Login  Register

Re: how to use glDraw*Instanced()

Posted by Sven Gothel on Oct 10, 2014; 2:05am
URL: https://forum.jogamp.org/how-to-use-glDraw-Instanced-tp4033277p4033301.html

On 10/10/2014 03:58 AM, Sven Gothel wrote:

> On 10/09/2014 04:30 PM, toruwest [via jogamp] wrote:
>>
>> Next step, I tried to modify it to use ShaderState, GLUniformData, and
>> GLArrayDataServer.
>> (Please See
>> https://github.com/toruwest/jogl-instanced-many-triangles/tree/master/jogl-instanced-many-triangles/src/demos/triangles/ManyTriangleVAOInstancedExperiment1.java )
>
> +++
>
> int NO_OF_INSTANCE = 30
>
> interleavedVBO = GLArrayDataServer.createGLSLInterleaved(3 + 4, GL.GL_FLOAT, false,
>                                             3 * NO_OF_INSTANCE, GL.GL_STATIC_DRAW);
> interleavedVBO.addGLSLSubArray("VertexPosition", 3, GL.GL_ARRAY_BUFFER);
> interleavedVBO.addGLSLSubArray("VertexColor", 4, GL.GL_ARRAY_BUFFER);
> FloatBuffer ib = (FloatBuffer)interleavedVBO.getBuffer();
> for(int i = 0; i < 3; i++) {
>   ib.put(vertices, i*3, 3);
>   ib.put(colors, i*4, 4);
> }
>
> ^^^
> compsPerElement = 3 + 4;
>
> your initialElementCount = 3 * 30,
> but you only push 3 * 2 elements.
>
> to have this working, you would need to push
> all 3 * 30 elements .. I guess.
Your working demo ManyTriangleVAOInstancedExperiment0
only uses an VBO w/ initialElementCount = 3 * 2 elements !

Hence I assume its a typo here, i.e.:

- interleavedVBO = GLArrayDataServer.createGLSLInterleaved(3 + 4, GL.GL_FLOAT, false,
-                                             3 * NO_OF_INSTANCE, GL.GL_STATIC_DRAW);

+ interleavedVBO = GLArrayDataServer.createGLSLInterleaved(3 + 4, GL.GL_FLOAT, false,
+                                             3 * 2, GL.GL_STATIC_DRAW);


Can you commit your example incl demo unit test to our JOGL repo,
adding our generic JogAmp (c) ?
That would be nice to have - thank you!


>
> See jogamp.opengl.util.glsl.GLSLTextureRaster
>
> ~Sven
>



signature.asc (828 bytes) Download Attachment