Doesn't the spec say it has to be 4? >From http://www.khronos.org/opengles/sdk/1.1/docs/man/glColorPointer.xml : > size > Specifies the number of components per color. Must > be 4. The initial value is 4.
From http://java.sun.com/javame/reference/apis/jsr239/javax/microedition/khronos/opengles/GL10.html#glColorPointer%28int,%20int,%20int,%20java.nio.Buffer%29 : > size specifies the number of components per color, and must be 4. On Mar 14, 12:47 pm, Mario Zechner <[email protected]> wrote: > Hi, > > just wanted to drop by to tell you about a nice little bug i just > encountered on my droid. Here's some sample code: > > @Override > public void render(Application app) > { > GL11 gl = app.getGraphics().getGL11(); > > gl.glViewport( 0, 0, app.getGraphics().getWidth(), > app.getGraphics().getHeight() ); > gl.glClearColor( 0.7f, 0.7f, 0.7f, 1 ); > gl.glClear( GL11.GL_COLOR_BUFFER_BIT ); > > gl.glBindBuffer( GL11.GL_ARRAY_BUFFER, vboHandle ); > gl.glEnableClientState( GL11.GL_VERTEX_ARRAY ); > gl.glEnableClientState( GL11.GL_COLOR_ARRAY ); > gl.glVertexPointer( 3, GL11.GL_FLOAT, 6 * 4, 0 ); > gl.glColorPointer( 3, GL11.GL_FLOAT, 6 * 4, 3 * 4 ); > gl.glDrawArrays( GL11.GL_TRIANGLES, 0, 3 ); > } > > @Override > public void setup(Application app) > { > ByteBuffer buffer = ByteBuffer.allocateDirect( 3 * 6 * 4 ); > buffer.order(ByteOrder.nativeOrder()); > FloatBuffer vertices = buffer.asFloatBuffer(); > vertices.put( new float[] { > -0.5f, -0.5f, 0, 1, 0, 0, > 0.5f, -0.5f, 0, 0, 1, 0, > 0.0f, 0.5f, 0, 0, 0, 1, > }); > vertices.flip(); > > GL11 gl = app.getGraphics().getGL11(); > int[] handle = new int[1]; > gl.glGenBuffers( 1, handle, 0 ); > vboHandle = handle[0]; > gl.glBindBuffer( GL11.GL_ARRAY_BUFFER, vboHandle ); > gl.glBufferData( GL11.GL_ARRAY_BUFFER, 3 * 6 * 4, vertices, > GL11.GL_STATIC_DRAW ); > gl.glBindBuffer( GL11.GL_ARRAY_BUFFER, 0 ); > } > > In the setup method i create a FloatBuffer holding three vertices, > each having 3 coordinates (x,y,z) and 3 color components (r,g,b). Next > i generate a vertex buffer object to store the vertex data in. As you > can see the vertex data is interleaved, so everything goes into a > single VBO. > > In the render method i set the viewport and clear the screen first. > Next i bind the VBO and set the vertex and color pointer to start at > the correct positions in the interleaved vertex data in the VBO. This > code works perfectly fine on the desktop. > > On my Droid it crashes horribly in glDrawArrays with a segfault. I > triple-checked everything i did with the OpenGL ES specs and i came to > the conclusion that i'm not doing anything wrong (also, as i said it > works on the desktop). By accident i changed the number of color > components from 3 to 4 (r,g,b,a) and finally it worked. > > This seems like a bug in the Motorola Droid PowerVR drivers. Can > anyone confirm this? -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

