Changeset 155:3a06387c0ef8
- Timestamp:
- 08/16/2008 02:23:51 AM
(4 months ago)
- Author:
- marc@f1.local
- branch:
- default
- Message:
minor additions to DynamicXXX utility classes
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r0 |
r155 |
|
| 9 | 9 | import field.bytecode.protect.iInside; |
|---|
| 10 | 10 | import field.graphics.core.Base; |
|---|
| | 11 | import field.graphics.core.BasicGLSLangProgram; |
|---|
| 11 | 12 | import field.graphics.core.BasicGeometry; |
|---|
| 12 | 13 | import field.graphics.core.BasicSceneList; |
|---|
| … | … | |
| 19 | 20 | import field.math.linalg.Vector3; |
|---|
| 20 | 21 | |
|---|
| 21 | | |
|---|
| 22 | 22 | /** |
|---|
| 23 | 23 | * @author marc Created on Oct 21, 2003 |
|---|
| … | … | |
| 37 | 37 | } |
|---|
| 38 | 38 | |
|---|
| | 39 | public static DynamicMesh coloredMesh(BasicSceneList basicSceneList) { |
|---|
| | 40 | BasicGLSLangProgram program = new BasicGLSLangProgram("content/shaders/TestGLSLangVertex.glslang", "content/shaders/VertexColorFragment.glslang"); |
|---|
| | 41 | BasicGeometry.TriangleMesh lines = new BasicGeometry.TriangleMesh(new BasicUtilities.Position()); |
|---|
| | 42 | lines.rebuildTriangle(0); |
|---|
| | 43 | lines.rebuildVertex(0); |
|---|
| | 44 | lines.addChild(program); |
|---|
| | 45 | if (basicSceneList!=null) |
|---|
| | 46 | basicSceneList.addChild(lines); |
|---|
| | 47 | DynamicMesh ret = new DynamicMesh(lines); |
|---|
| | 48 | return ret; |
|---|
| | 49 | } |
|---|
| | 50 | |
|---|
| 39 | 51 | static public DynamicPointlist unshadedPoints(BasicSceneList into) { |
|---|
| 40 | 52 | BasicGeometry.TriangleMesh lines = new PointList(new BasicUtilities.Position()); |
|---|
| 41 | 53 | lines.rebuildTriangle(0); |
|---|
| 42 | 54 | lines.rebuildVertex(0); |
|---|
| 43 | | if (into != null) into.addChild(lines); |
|---|
| | 55 | if (into != null) |
|---|
| | 56 | into.addChild(lines); |
|---|
| 44 | 57 | |
|---|
| 45 | 58 | DynamicPointlist ret = new DynamicPointlist(lines); |
|---|
| … | … | |
| 113 | 126 | } |
|---|
| 114 | 127 | } |
|---|
| 115 | | if (openCount<0) |
|---|
| | 128 | if (openCount < 0) |
|---|
| 116 | 129 | assert false : "to many closes"; |
|---|
| 117 | 130 | } |
|---|
| 118 | 131 | |
|---|
| 119 | 132 | public void copyFrom(SubMesh subMesh) { |
|---|
| 120 | | if (subMesh.delegate.cachedVertexBuffer == null) return; |
|---|
| 121 | | if (subMesh.delegate.cachedTriangleBuffer== null) return; |
|---|
| | 133 | if (subMesh.delegate.cachedVertexBuffer == null) |
|---|
| | 134 | return; |
|---|
| | 135 | if (subMesh.delegate.cachedTriangleBuffer == null) |
|---|
| | 136 | return; |
|---|
| 122 | 137 | |
|---|
| 123 | 138 | for (int i = 0; i < subMesh.delegate.cachedAuxBuffer.length; i++) { |
|---|
| … | … | |
| 134 | 149 | subMesh.delegate.cachedTriangleBuffer.rewind(); |
|---|
| 135 | 150 | |
|---|
| 136 | | |
|---|
| 137 | | this.inject(subMesh.delegate.cachedVertexBuffer, subMesh.delegate.cachedTriangleBuffer, new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, subMesh.delegate.cachedAuxBuffer, 0); |
|---|
| | 151 | this.inject(subMesh.delegate.cachedVertexBuffer, subMesh.delegate.cachedTriangleBuffer, new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 }, subMesh.delegate.cachedAuxBuffer, 0); |
|---|
| 138 | 152 | |
|---|
| 139 | 153 | // subMesh.delegate.cachedVertexBuffer.clear(); |
|---|
| … | … | |
| 147 | 161 | */ |
|---|
| 148 | 162 | public Vector3 getPositionOfVertex(int v1, Vector3 v) { |
|---|
| 149 | | if (v == null) v = new Vector3(); |
|---|
| | 163 | if (v == null) |
|---|
| | 164 | v = new Vector3(); |
|---|
| 150 | 165 | return v.set(cachedVertexBuffer.get(3 * v1), cachedVertexBuffer.get(3 * v1 + 1), cachedVertexBuffer.get(3 * v1 + 2)); |
|---|
| 151 | 166 | } |
|---|
| … | … | |
| 177 | 192 | cachedVertexBuffer.position(0); |
|---|
| 178 | 193 | |
|---|
| 179 | | |
|---|
| 180 | 194 | checkTriangleStorage(triangleCursor, triangle.remaining() / elementSize); |
|---|
| 181 | 195 | cachedTriangleBuffer.position(triangleCursor * elementSize); |
|---|
| … | … | |
| 187 | 201 | short c = (short) (triangle.get() - offset); |
|---|
| 188 | 202 | |
|---|
| 189 | | |
|---|
| 190 | 203 | // assert c>0; |
|---|
| 191 | 204 | cachedTriangleBuffer.put(c); |
|---|
| … | … | |
| 197 | 210 | triangleCursor += triangle.limit() / elementSize; |
|---|
| 198 | 211 | |
|---|
| 199 | | |
|---|
| 200 | 212 | for (int i = 0; i < auxs.length; i++) { |
|---|
| 201 | | if (auxBuffers[i] != null) if (auxBuffers[i].remaining() > 0) { |
|---|
| 202 | | |
|---|
| 203 | | if (cachedAuxBuffer[auxs[i]] == null) { |
|---|
| 204 | | checkAuxStorage(auxs[i], auxBuffers[i].capacity() / (vertex.capacity() / 3)); |
|---|
| 205 | | } else |
|---|
| 206 | | checkAuxStorage(auxs[i], cachedAuxBufferWidth[auxs[i]]); |
|---|
| 207 | | cachedAuxBuffer[auxs[i]].position(cachedAuxBufferWidth[auxs[i]] * originalVertexCursor); |
|---|
| 208 | | |
|---|
| 209 | | |
|---|
| 210 | | cachedAuxBuffer[auxs[i]].put(auxBuffers[i]); |
|---|
| 211 | | cachedAuxBuffer[auxs[i]].position(0); |
|---|
| 212 | | } |
|---|
| | 213 | if (auxBuffers[i] != null) |
|---|
| | 214 | if (auxBuffers[i].remaining() > 0) { |
|---|
| | 215 | |
|---|
| | 216 | if (cachedAuxBuffer[auxs[i]] == null) { |
|---|
| | 217 | checkAuxStorage(auxs[i], auxBuffers[i].capacity() / (vertex.capacity() / 3)); |
|---|
| | 218 | } else |
|---|
| | 219 | checkAuxStorage(auxs[i], cachedAuxBufferWidth[auxs[i]]); |
|---|
| | 220 | cachedAuxBuffer[auxs[i]].position(cachedAuxBufferWidth[auxs[i]] * originalVertexCursor); |
|---|
| | 221 | |
|---|
| | 222 | cachedAuxBuffer[auxs[i]].put(auxBuffers[i]); |
|---|
| | 223 | cachedAuxBuffer[auxs[i]].position(0); |
|---|
| | 224 | } |
|---|
| 213 | 225 | // else |
|---|
| 214 | 226 | } |
|---|
| … | … | |
| 277 | 289 | int vertexCursor3 = 3 * vertexCursor; |
|---|
| 278 | 290 | |
|---|
| 279 | | |
|---|
| 280 | 291 | cachedVertexBuffer.put(vertexCursor3, v1.get(0)); |
|---|
| 281 | 292 | cachedVertexBuffer.put(vertexCursor3 + 1, v1.get(1)); |
|---|
| … | … | |
| 304 | 315 | if (this.getUnderlyingGeometry().getParents().size() != 0) { |
|---|
| 305 | 316 | |
|---|
| 306 | | List< ? extends iMutable<iSceneListElement>> p = new ArrayList<iMutable<iSceneListElement>>(this.getUnderlyingGeometry().getParents()); |
|---|
| 307 | | Iterator< ? extends iMutable<iSceneListElement>> n = p.iterator(); |
|---|
| | 317 | List<? extends iMutable<iSceneListElement>> p = new ArrayList<iMutable<iSceneListElement>>(this.getUnderlyingGeometry().getParents()); |
|---|
| | 318 | Iterator<? extends iMutable<iSceneListElement>> n = p.iterator(); |
|---|
| 308 | 319 | while (n.hasNext()) { |
|---|
| 309 | 320 | iMutable<iSceneListElement> nn = n.next(); |
|---|
| … | … | |
| 313 | 324 | ((TriangleMesh) this.getUnderlyingGeometry()).deallocate(ResourceMonitor.resourceMonitor.getQueue()); |
|---|
| 314 | 325 | } |
|---|
| 315 | | // (((Base.iSceneList) this.getUnderlyingGeometry().getParent())).removeChild(getUnderlyingGeometry()); |
|---|
| | 326 | // (((Base.iSceneList) |
|---|
| | 327 | // this.getUnderlyingGeometry().getParent())).removeChild(getUnderlyingGeometry()); |
|---|
| 316 | 328 | } |
|---|
| 317 | 329 | |
|---|
| … | … | |
| 351 | 363 | cachedVertexBuffer.put(vertexCursor3 + 1, v1.get(1)); |
|---|
| 352 | 364 | cachedVertexBuffer.put(vertexCursor3 + 2, v1.get(2)); |
|---|
| 353 | | if (vertexCursor < n + 1) vertexCursor = n + 1; |
|---|
| | 365 | if (vertexCursor < n + 1) |
|---|
| | 366 | vertexCursor = n + 1; |
|---|
| 354 | 367 | } |
|---|
| 355 | 368 | |
|---|
| … | … | |
| 375 | 388 | protected void checkTriangleStorage(int at, int plus) { |
|---|
| 376 | 389 | |
|---|
| 377 | | if (cachedTriangleBuffer == null) cachedTriangleBuffer = basis.triangle(); |
|---|
| | 390 | if (cachedTriangleBuffer == null) |
|---|
| | 391 | cachedTriangleBuffer = basis.triangle(); |
|---|
| 378 | 392 | cachedTriangleBuffer.clear(); |
|---|
| 379 | 393 | if (cachedTriangleBuffer.capacity() < ((at + plus) * elementSize)) { |
|---|
| … | … | |
| 385 | 399 | protected void checkVertexStorage(int at, int plus) { |
|---|
| 386 | 400 | |
|---|
| 387 | | if (cachedVertexBuffer == null) cachedVertexBuffer = basis.vertex(); |
|---|
| | 401 | if (cachedVertexBuffer == null) |
|---|
| | 402 | cachedVertexBuffer = basis.vertex(); |
|---|
| 388 | 403 | cachedVertexBuffer.clear(); |
|---|
| 389 | 404 | if (cachedVertexBuffer.capacity() < ((at * 3 + plus))) { |
|---|
| r0 |
r155 |
|
| 3 | 3 | import field.graphics.core.Base; |
|---|
| 4 | 4 | import field.graphics.core.BasicGLSLangProgram; |
|---|
| 5 | | import field.graphics.core.BasicGeometry; |
|---|
| 6 | 5 | import field.graphics.core.BasicSceneList; |
|---|
| 7 | 6 | import field.graphics.core.BasicUtilities; |
|---|
| … | … | |
| 11 | 10 | /** |
|---|
| 12 | 11 | * Created on Nov 2, 2003 |
|---|
| 13 | | * |
|---|
| | 12 | * |
|---|
| 14 | 13 | * @author marc |
|---|
| 15 | 14 | */ |
|---|
| … | … | |
| 24 | 23 | |
|---|
| 25 | 24 | /** @return */ |
|---|
| | 25 | @Override |
|---|
| 26 | 26 | public PointList getUnderlyingGeometry() { |
|---|
| 27 | 27 | return (PointList) basis; |
|---|
| 28 | 28 | } |
|---|
| 29 | 29 | |
|---|
| 30 | | |
|---|
| | 30 | |
|---|
| | 31 | @Override |
|---|
| 31 | 32 | public int nextFace(Vector3 v1, Vector3 v2, Vector3 v3) { |
|---|
| 32 | 33 | nextVertex(v1); |
|---|
| … | … | |
| 36 | 37 | } |
|---|
| 37 | 38 | |
|---|
| | 39 | @Override |
|---|
| 38 | 40 | public int nextFace(int v1, int v2, int v3) { |
|---|
| 39 | 41 | return -1; |
|---|
| 40 | 42 | } |
|---|
| 41 | 43 | |
|---|
| | 44 | @Override |
|---|
| 42 | 45 | public int nextVertex(Vector3 v1) { |
|---|
| 43 | 46 | return super.nextVertex(v1); |
|---|
| 44 | 47 | } |
|---|
| 45 | | |
|---|
| | 48 | |
|---|
| 46 | 49 | |
|---|
| 47 | 50 | public static DynamicPointlist coloredPoints(BasicSceneList sceneList, float width) { |
|---|
| … | … | |
| 57 | 60 | return ret; |
|---|
| 58 | 61 | } |
|---|
| | 62 | |
|---|
| | 63 | public static DynamicPointlist texturedColoredPoints(BasicSceneList sceneList, float width) { |
|---|
| | 64 | |
|---|
| | 65 | BasicGLSLangProgram program = new BasicGLSLangProgram("content/shaders/TestGLSLangVertex_withPointsize.glslang", "content/shaders/Texture2DForPointSprites.glslang"); |
|---|
| | 66 | program.new SetIntegerUniform("texture", 0); |
|---|
| | 67 | program.setDoPointSize(); |
|---|
| | 68 | PointList lines = new PointList(new BasicUtilities.Position()).setSize(width); |
|---|
| | 69 | lines.rebuildTriangle(0); |
|---|
| | 70 | lines.rebuildVertex(0); |
|---|
| | 71 | lines.addChild(program); |
|---|
| | 72 | if (sceneList != null) |
|---|
| | 73 | sceneList.addChild(lines); |
|---|
| | 74 | DynamicPointlist ret = new DynamicPointlist(lines); |
|---|
| | 75 | return ret; |
|---|
| | 76 | } |
|---|
| 59 | 77 | } |
|---|
| r32 |
r155 |
|
| 55 | 55 | public void getWorld(CoordinateFrame out) { |
|---|
| 56 | 56 | // first, lets just check to see if anything has changed |
|---|
| 57 | | if (globalModCountHere == globalModCount) { |
|---|
| 58 | | out.setValue(cachedWorld); |
|---|
| 59 | | } |
|---|
| | 57 | // if (globalModCountHere == globalModCount) { |
|---|
| | 58 | // out.setValue(cachedWorld); |
|---|
| | 59 | // } |
|---|
| 60 | 60 | |
|---|
| 61 | 61 | // next, lets see if just us has changed |
|---|
| … | … | |
| 88 | 88 | |
|---|
| 89 | 89 | cachedWorld.multiply(tmp, frame); |
|---|
| | 90 | |
|---|
| 90 | 91 | |
|---|
| 91 | 92 | modCountParent = parent != null ? parent.modCountHere : 0; |
|---|
| r32 |
r155 |
|
| 269 | 269 | n.setLocal(out); |
|---|
| 270 | 270 | |
|---|
| | 271 | |
|---|
| 271 | 272 | } |
|---|
| 272 | 273 | } else { |
|---|
| r32 |
r155 |
|
| 71 | 71 | currentLinkInfo[i].inverseGeometry.set(skinningInfo.bindPoseDescriptions[i].geometryRotation, skinningInfo.bindPoseDescriptions[i].geometryTranslation, skinningInfo.bindPoseDescriptions[i].geometryScale); |
|---|
| 72 | 72 | |
|---|
| 73 | | System.out.println(" initial link matricies\n bound:" + currentLinkInfo[i].bound + "\n inverseGeometry (not invert yet):" + currentLinkInfo[i].inverseGeometry); |
|---|
| | 73 | //System.out.println(" initial link matricies\n bound:" + currentLinkInfo[i].bound + "\n inverseGeometry (not invert yet):" + currentLinkInfo[i].inverseGeometry); |
|---|
| 74 | 74 | currentLinkInfo[i].inverseGeometry.invert(); |
|---|
| 75 | 75 | } |
|---|