/** * Applies all instancing info to the mesh and returns if the current render call is allowed to continue * * @param mesh * @param renderer * @param shader * @return continue rendering or skip rendering all together */ public boolean apply(final Mesh mesh, final Renderer renderer, final GLSLShaderObjectsState shader) { final RenderContext context = ContextManager.getCurrentContext(); final ContextCapabilities caps = context.getCapabilities(); if (!caps.isGeometryInstancingSupported()) { throw new Ardor3dException("Geometry instancing not supported for current graphics configuration"); } if (_meshesToDraw <= 0) { // reset for next draw call _primCount = -1; shader.setUniform("nrOfInstances", -1); _visibleMeshes.clear(); return false; } shader.setUniform("transforms", fillTransformBuffer(), 4); shader.setUniform("nrOfInstances", getPrimitiveCount()); return true; }