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

Reply via email to