1 /* ---------------------------------------------------------------------------- 2 * This file was automatically generated by SWIG (http://www.swig.org). 3 * Version 3.0.8 4 * 5 * Do not make changes to this file unless you know what you are doing--modify 6 * the SWIG interface file instead. 7 * ----------------------------------------------------------------------------- */ 8 9 package com.badlogic.gdx.physics.bullet.collision; 10 11 import com.badlogic.gdx.physics.bullet.BulletBase; 12 import com.badlogic.gdx.physics.bullet.linearmath.*; 13 import com.badlogic.gdx.math.Vector3; 14 import com.badlogic.gdx.math.Quaternion; 15 import com.badlogic.gdx.math.Matrix3; 16 import com.badlogic.gdx.math.Matrix4; 17 import com.badlogic.gdx.graphics.Mesh; 18 import com.badlogic.gdx.graphics.g3d.Model; 19 import com.badlogic.gdx.graphics.g3d.model.MeshPart; 20 import com.badlogic.gdx.graphics.g3d.model.NodePart; 21 import com.badlogic.gdx.utils.Array; 22 import com.badlogic.gdx.utils.GdxRuntimeException; 23 24 public class btTriangleIndexVertexArray extends btStridingMeshInterface { 25 private long swigCPtr; 26 btTriangleIndexVertexArray(final String className, long cPtr, boolean cMemoryOwn)27 protected btTriangleIndexVertexArray(final String className, long cPtr, boolean cMemoryOwn) { 28 super(className, CollisionJNI.btTriangleIndexVertexArray_SWIGUpcast(cPtr), cMemoryOwn); 29 swigCPtr = cPtr; 30 } 31 32 /** Construct a new btTriangleIndexVertexArray, normally you should not need this constructor it's intended for low-level usage. */ btTriangleIndexVertexArray(long cPtr, boolean cMemoryOwn)33 public btTriangleIndexVertexArray(long cPtr, boolean cMemoryOwn) { 34 this("btTriangleIndexVertexArray", cPtr, cMemoryOwn); 35 construct(); 36 } 37 38 @Override reset(long cPtr, boolean cMemoryOwn)39 protected void reset(long cPtr, boolean cMemoryOwn) { 40 if (!destroyed) 41 destroy(); 42 super.reset(CollisionJNI.btTriangleIndexVertexArray_SWIGUpcast(swigCPtr = cPtr), cMemoryOwn); 43 } 44 getCPtr(btTriangleIndexVertexArray obj)45 public static long getCPtr(btTriangleIndexVertexArray obj) { 46 return (obj == null) ? 0 : obj.swigCPtr; 47 } 48 49 @Override finalize()50 protected void finalize() throws Throwable { 51 if (!destroyed) 52 destroy(); 53 super.finalize(); 54 } 55 delete()56 @Override protected synchronized void delete() { 57 if (swigCPtr != 0) { 58 if (swigCMemOwn) { 59 swigCMemOwn = false; 60 CollisionJNI.delete_btTriangleIndexVertexArray(swigCPtr); 61 } 62 swigCPtr = 0; 63 } 64 super.delete(); 65 } 66 67 protected final static Array<btTriangleIndexVertexArray> instances = new Array<btTriangleIndexVertexArray>(); 68 69 /** @return Whether the supplied array contains all specified tags. */ compare(final btTriangleIndexVertexArray array, final Array<T> tags)70 public static <T extends Object> boolean compare(final btTriangleIndexVertexArray array, final Array<T> tags) { 71 if (array.meshes.size != tags.size) 72 return false; 73 for (final btIndexedMesh mesh : array.meshes) { 74 boolean found = false; 75 final Object tag = mesh.tag; 76 if (tag == null) 77 return false; 78 for (final T t : tags) { 79 if (t.equals(tag)) { 80 found = true; 81 break; 82 } 83 } 84 if (!found) 85 return false; 86 } 87 return true; 88 } 89 getInstance(final Array<T> tags)90 protected static <T extends Object> btTriangleIndexVertexArray getInstance(final Array<T> tags) { 91 for (final btTriangleIndexVertexArray instance : instances) { 92 if (compare(instance, tags)) 93 return instance; 94 } 95 return null; 96 } 97 98 /** Create or reuse a btTriangleIndexVertexArray instance based on the specified {@link MeshPart} array. 99 * Use {@link #release()} to release the mesh when it's no longer needed. */ obtain(final Array<T> meshParts)100 public static <T extends MeshPart> btTriangleIndexVertexArray obtain(final Array<T> meshParts) { 101 btTriangleIndexVertexArray result = getInstance(meshParts); 102 if (result == null) { 103 result = new btTriangleIndexVertexArray(meshParts); 104 instances.add(result); 105 } 106 result.obtain(); 107 return result; 108 } 109 110 protected final Array<btIndexedMesh> meshes = new Array<btIndexedMesh>(1); 111 btTriangleIndexVertexArray(final MeshPart meshPart)112 public btTriangleIndexVertexArray(final MeshPart meshPart) { 113 this(); 114 addMeshPart(meshPart); 115 } 116 btTriangleIndexVertexArray(final Iterable<T> meshParts)117 public <T extends MeshPart> btTriangleIndexVertexArray(final Iterable<T> meshParts) { 118 this(); 119 addMeshParts(meshParts); 120 } 121 122 /** The amount of meshes this array contains. */ getIndexedMeshCount()123 public int getIndexedMeshCount() { 124 return meshes.size; 125 } 126 127 /** Return the {@link btIndexedMesh} at the specified index. */ getIndexedMesh(int index)128 public btIndexedMesh getIndexedMesh(int index) { 129 return meshes.get(index); 130 } 131 132 /** Add a {@link MeshPart} instance to this btTriangleIndexVertexArray. 133 * The specified mesh must be indexed and triangulated and must outlive this btTriangleIndexVertexArray. 134 * The buffers for the vertices and indices are shared amongst both. */ addMeshPart(final MeshPart meshPart)135 public btTriangleIndexVertexArray addMeshPart(final MeshPart meshPart) { 136 btIndexedMesh mesh = btIndexedMesh.obtain(meshPart); 137 addIndexedMesh(mesh, PHY_ScalarType.PHY_SHORT); 138 mesh.release(); 139 return this; 140 } 141 142 /** Add one or more {@link MeshPart} instances to this btTriangleIndexVertexArray. 143 * The specified meshes must be indexed and triangulated and must outlive this btTriangleIndexVertexArray. 144 * The buffers for the vertices and indices are shared amongst both. */ addMeshParts(final MeshPart... meshParts)145 public btTriangleIndexVertexArray addMeshParts(final MeshPart... meshParts) { 146 for (int i = 0; i < meshParts.length; i++) 147 addMeshPart(meshParts[i]); 148 return this; 149 } 150 151 /** Add one or more {@link MeshPart} instances to this btTriangleIndexVertexArray. 152 * The specified meshes must be indexed and triangulated and must outlive this btTriangleIndexVertexArray. 153 * The buffers for the vertices and indices are shared amongst both. */ addMeshParts(final Iterable<T> meshParts)154 public <T extends MeshPart> btTriangleIndexVertexArray addMeshParts(final Iterable<T> meshParts) { 155 for (final MeshPart meshPart : meshParts) 156 addMeshPart(meshPart); 157 return this; 158 } 159 160 /** Add one or more {@link NodePart} instances to this btTriangleIndexVertexArray. 161 * The specified meshes must be indexed and triangulated and must outlive this btTriangleIndexVertexArray. 162 * The buffers for the vertices and indices are shared amongst both. */ addNodeParts(final Iterable<T> nodeParts)163 public <T extends NodePart> btTriangleIndexVertexArray addNodeParts(final Iterable<T> nodeParts) { 164 for (final NodePart nodePart : nodeParts) 165 addMeshPart(nodePart.meshPart); 166 return this; 167 } 168 169 /** Add a {@link btIndexedMesh} to this array */ addIndexedMesh(final btIndexedMesh mesh, int indexType)170 public btTriangleIndexVertexArray addIndexedMesh(final btIndexedMesh mesh, int indexType) { 171 mesh.obtain(); 172 internalAddIndexedMesh(mesh, indexType); 173 meshes.add(mesh); 174 return this; 175 } 176 177 /** Add a {@link btIndexedMesh} to this array */ addIndexedMesh(final btIndexedMesh mesh)178 public btTriangleIndexVertexArray addIndexedMesh(final btIndexedMesh mesh) { 179 return addIndexedMesh(mesh, PHY_ScalarType.PHY_SHORT); 180 } 181 182 @Override dispose()183 public void dispose() { 184 for (final btIndexedMesh mesh : meshes) 185 mesh.release(); 186 meshes.clear(); 187 super.dispose(); 188 } 189 btTriangleIndexVertexArray()190 public btTriangleIndexVertexArray() { 191 this(CollisionJNI.new_btTriangleIndexVertexArray(), true); 192 } 193 internalAddIndexedMesh(btIndexedMesh mesh, int indexType)194 private void internalAddIndexedMesh(btIndexedMesh mesh, int indexType) { 195 CollisionJNI.btTriangleIndexVertexArray_internalAddIndexedMesh__SWIG_0(swigCPtr, this, btIndexedMesh.getCPtr(mesh), mesh, indexType); 196 } 197 internalAddIndexedMesh(btIndexedMesh mesh)198 private void internalAddIndexedMesh(btIndexedMesh mesh) { 199 CollisionJNI.btTriangleIndexVertexArray_internalAddIndexedMesh__SWIG_1(swigCPtr, this, btIndexedMesh.getCPtr(mesh), mesh); 200 } 201 getLockedVertexIndexBase(SWIGTYPE_p_p_unsigned_char vertexbase, SWIGTYPE_p_int numverts, SWIGTYPE_p_PHY_ScalarType type, SWIGTYPE_p_int vertexStride, SWIGTYPE_p_p_unsigned_char indexbase, SWIGTYPE_p_int indexstride, SWIGTYPE_p_int numfaces, SWIGTYPE_p_PHY_ScalarType indicestype, int subpart)202 public void getLockedVertexIndexBase(SWIGTYPE_p_p_unsigned_char vertexbase, SWIGTYPE_p_int numverts, SWIGTYPE_p_PHY_ScalarType type, SWIGTYPE_p_int vertexStride, SWIGTYPE_p_p_unsigned_char indexbase, SWIGTYPE_p_int indexstride, SWIGTYPE_p_int numfaces, SWIGTYPE_p_PHY_ScalarType indicestype, int subpart) { 203 CollisionJNI.btTriangleIndexVertexArray_getLockedVertexIndexBase__SWIG_0(swigCPtr, this, SWIGTYPE_p_p_unsigned_char.getCPtr(vertexbase), SWIGTYPE_p_int.getCPtr(numverts), SWIGTYPE_p_PHY_ScalarType.getCPtr(type), SWIGTYPE_p_int.getCPtr(vertexStride), SWIGTYPE_p_p_unsigned_char.getCPtr(indexbase), SWIGTYPE_p_int.getCPtr(indexstride), SWIGTYPE_p_int.getCPtr(numfaces), SWIGTYPE_p_PHY_ScalarType.getCPtr(indicestype), subpart); 204 } 205 getLockedVertexIndexBase(SWIGTYPE_p_p_unsigned_char vertexbase, SWIGTYPE_p_int numverts, SWIGTYPE_p_PHY_ScalarType type, SWIGTYPE_p_int vertexStride, SWIGTYPE_p_p_unsigned_char indexbase, SWIGTYPE_p_int indexstride, SWIGTYPE_p_int numfaces, SWIGTYPE_p_PHY_ScalarType indicestype)206 public void getLockedVertexIndexBase(SWIGTYPE_p_p_unsigned_char vertexbase, SWIGTYPE_p_int numverts, SWIGTYPE_p_PHY_ScalarType type, SWIGTYPE_p_int vertexStride, SWIGTYPE_p_p_unsigned_char indexbase, SWIGTYPE_p_int indexstride, SWIGTYPE_p_int numfaces, SWIGTYPE_p_PHY_ScalarType indicestype) { 207 CollisionJNI.btTriangleIndexVertexArray_getLockedVertexIndexBase__SWIG_1(swigCPtr, this, SWIGTYPE_p_p_unsigned_char.getCPtr(vertexbase), SWIGTYPE_p_int.getCPtr(numverts), SWIGTYPE_p_PHY_ScalarType.getCPtr(type), SWIGTYPE_p_int.getCPtr(vertexStride), SWIGTYPE_p_p_unsigned_char.getCPtr(indexbase), SWIGTYPE_p_int.getCPtr(indexstride), SWIGTYPE_p_int.getCPtr(numfaces), SWIGTYPE_p_PHY_ScalarType.getCPtr(indicestype)); 208 } 209 getLockedReadOnlyVertexIndexBase(SWIGTYPE_p_p_unsigned_char vertexbase, SWIGTYPE_p_int numverts, SWIGTYPE_p_PHY_ScalarType type, SWIGTYPE_p_int vertexStride, SWIGTYPE_p_p_unsigned_char indexbase, SWIGTYPE_p_int indexstride, SWIGTYPE_p_int numfaces, SWIGTYPE_p_PHY_ScalarType indicestype, int subpart)210 public void getLockedReadOnlyVertexIndexBase(SWIGTYPE_p_p_unsigned_char vertexbase, SWIGTYPE_p_int numverts, SWIGTYPE_p_PHY_ScalarType type, SWIGTYPE_p_int vertexStride, SWIGTYPE_p_p_unsigned_char indexbase, SWIGTYPE_p_int indexstride, SWIGTYPE_p_int numfaces, SWIGTYPE_p_PHY_ScalarType indicestype, int subpart) { 211 CollisionJNI.btTriangleIndexVertexArray_getLockedReadOnlyVertexIndexBase__SWIG_0(swigCPtr, this, SWIGTYPE_p_p_unsigned_char.getCPtr(vertexbase), SWIGTYPE_p_int.getCPtr(numverts), SWIGTYPE_p_PHY_ScalarType.getCPtr(type), SWIGTYPE_p_int.getCPtr(vertexStride), SWIGTYPE_p_p_unsigned_char.getCPtr(indexbase), SWIGTYPE_p_int.getCPtr(indexstride), SWIGTYPE_p_int.getCPtr(numfaces), SWIGTYPE_p_PHY_ScalarType.getCPtr(indicestype), subpart); 212 } 213 getLockedReadOnlyVertexIndexBase(SWIGTYPE_p_p_unsigned_char vertexbase, SWIGTYPE_p_int numverts, SWIGTYPE_p_PHY_ScalarType type, SWIGTYPE_p_int vertexStride, SWIGTYPE_p_p_unsigned_char indexbase, SWIGTYPE_p_int indexstride, SWIGTYPE_p_int numfaces, SWIGTYPE_p_PHY_ScalarType indicestype)214 public void getLockedReadOnlyVertexIndexBase(SWIGTYPE_p_p_unsigned_char vertexbase, SWIGTYPE_p_int numverts, SWIGTYPE_p_PHY_ScalarType type, SWIGTYPE_p_int vertexStride, SWIGTYPE_p_p_unsigned_char indexbase, SWIGTYPE_p_int indexstride, SWIGTYPE_p_int numfaces, SWIGTYPE_p_PHY_ScalarType indicestype) { 215 CollisionJNI.btTriangleIndexVertexArray_getLockedReadOnlyVertexIndexBase__SWIG_1(swigCPtr, this, SWIGTYPE_p_p_unsigned_char.getCPtr(vertexbase), SWIGTYPE_p_int.getCPtr(numverts), SWIGTYPE_p_PHY_ScalarType.getCPtr(type), SWIGTYPE_p_int.getCPtr(vertexStride), SWIGTYPE_p_p_unsigned_char.getCPtr(indexbase), SWIGTYPE_p_int.getCPtr(indexstride), SWIGTYPE_p_int.getCPtr(numfaces), SWIGTYPE_p_PHY_ScalarType.getCPtr(indicestype)); 216 } 217 getIndexedMeshArray()218 public SWIGTYPE_p_btAlignedObjectArrayT_btIndexedMesh_t getIndexedMeshArray() { 219 return new SWIGTYPE_p_btAlignedObjectArrayT_btIndexedMesh_t(CollisionJNI.btTriangleIndexVertexArray_getIndexedMeshArray(swigCPtr, this), false); 220 } 221 222 } 223