(int numVertex, int numElements, int primitiveType, int primitiveSize)
| 302 | } |
| 303 | |
| 304 | static public BaseMesh standard(int numVertex, int numElements, int primitiveType, int primitiveSize) { |
| 305 | BaseMesh m = new BaseMesh() { |
| 306 | protected boolean performNow() { |
| 307 | |
| 308 | if (GraphicsContext.getContext().stateTracker.shader.get() == 0) { |
| 309 | System.err.println("trying to draw geometry (" + this + ") without a shader attached will draw nothing"); |
| 310 | return true; |
| 311 | } |
| 312 | |
| 313 | GraphicsContext.checkError(() -> "on entry " + this); |
| 314 | |
| 315 | int ii = instances.get(); |
| 316 | |
| 317 | if (ii == 0) { |
| 318 | if (primitiveSize == 0) { |
| 319 | glDrawArrays(primitiveType, 0, limitVertex); |
| 320 | } else { |
| 321 | Log.log("graphics.trace", () -> "drawing " + primitiveType + " " + limitElement + " " + primitiveSize + " " + GraphicsContext.getContext() |
| 322 | .stateTracker.fbo.get()); |
| 323 | Log.log("graphics.trace", () -> "target FBO is complete ? " + GL30.glCheckFramebufferStatus(GL30.GL_DRAW_FRAMEBUFFER)); |
| 324 | GraphicsContext.checkError(() -> "before draw " + this); |
| 325 | glDrawElements(primitiveType, limitElement * primitiveSize, GL_UNSIGNED_INT, 0); |
| 326 | GraphicsContext.checkError(() -> "after draw " + this); |
| 327 | } |
| 328 | } else { |
| 329 | if (primitiveSize == 0) { |
| 330 | glDrawArraysInstanced(primitiveType, 0, limitVertex, ii); |
| 331 | } else { |
| 332 | Log.log("graphics.trace", () -> "drawing " + primitiveType + " " + limitElement + " " + primitiveSize + " " + GraphicsContext.getContext() |
| 333 | .stateTracker.fbo.get()); |
| 334 | Log.log("graphics.trace", () -> "target FBO is complete ? " + GL30.glCheckFramebufferStatus(GL30.GL_DRAW_FRAMEBUFFER)); |
| 335 | GraphicsContext.checkError(() -> "before draw " + this); |
| 336 | glDrawElementsInstanced(primitiveType, limitElement * primitiveSize, GL_UNSIGNED_INT, 0, ii); |
| 337 | GraphicsContext.checkError(() -> "after draw " + this); |
| 338 | } |
| 339 | |
| 340 | } |
| 341 | GraphicsContext.checkError(() -> "on exit " + this); |
| 342 | return true; |
| 343 | } |
| 344 | }; |
| 345 | m.setVertexMax(numVertex); |
| 346 | if (primitiveSize > 0) { |
| 347 | m.setElements(new SimpleArrayBuffer(numElements, GL_ELEMENT_ARRAY_BUFFER, -1, primitiveSize, 0)); |
| 348 | m.setElementMax(numElements); |
| 349 | } |
| 350 | return m; |
| 351 | } |
| 352 | |
| 353 | /** |
| 354 | * returns a new BaseMesh that draws up to numPoints. |
no test coverage detected