List of usage examples for com.badlogic.gdx.graphics VertexAttributes equals
@Override
public boolean equals(final Object obj)
From source file:com.badlogic.gdx.tests.g3d.ModelCache.java
/** Finishes creating the cache, must be called after a call to {@link #begin()}, only after this call the cache will be valid * (until the next call to {@link #begin()}). Calling this method will process all renderables added using one of the add(...) * methods and will combine them if possible. */ public void end() { if (!building) throw new GdxRuntimeException("Call begin() prior to calling end()"); building = false;/*w ww. jav a 2 s. c o m*/ if (items.size == 0) return; sorter.sort(null, items); // FIXME Perhaps pass the actual camera? int itemCount = items.size; int initCount = renderables.size; final Renderable first = items.get(0); VertexAttributes vertexAttributes = first.mesh.getVertexAttributes(); Material material = first.material; int primitiveType = first.primitiveType; int offset = renderables.size; meshBuilder.begin(vertexAttributes); MeshPart part = meshBuilder.part("", primitiveType, meshPartPool.obtain()); renderables.add(obtainRenderable(material, primitiveType)); for (int i = 0, n = items.size; i < n; ++i) { final Renderable renderable = items.get(i); final VertexAttributes va = renderable.mesh.getVertexAttributes(); final Material mat = renderable.material; final int pt = renderable.primitiveType; final boolean sameMesh = va.equals(vertexAttributes) && renderable.meshPartSize + meshBuilder.getNumVertices() < Short.MAX_VALUE; // comparing indices and vertices... final boolean samePart = sameMesh && pt == primitiveType && mat.same(material, true); if (!samePart) { if (!sameMesh) { final Mesh mesh = meshBuilder.end(meshPool.obtain(vertexAttributes, meshBuilder.getNumVertices(), meshBuilder.getNumIndices())); while (offset < renderables.size) renderables.get(offset++).mesh = mesh; meshBuilder.begin(vertexAttributes = va); } final MeshPart newPart = meshBuilder.part("", pt, meshPartPool.obtain()); final Renderable previous = renderables.get(renderables.size - 1); previous.meshPartOffset = part.indexOffset; previous.meshPartSize = part.numVertices; part = newPart; renderables.add(obtainRenderable(material = mat, primitiveType = pt)); } meshBuilder.setVertexTransform(renderable.worldTransform); meshBuilder.addMesh(renderable.mesh, renderable.meshPartOffset, renderable.meshPartSize); } final Mesh mesh = meshBuilder .end(meshPool.obtain(vertexAttributes, meshBuilder.getNumVertices(), meshBuilder.getNumIndices())); while (offset < renderables.size) renderables.get(offset++).mesh = mesh; final Renderable previous = renderables.get(renderables.size - 1); previous.meshPartOffset = part.indexOffset; previous.meshPartSize = part.numVertices; }