enum piglit_result piglit_display(void) { GLboolean pass = GL_TRUE; GLfloat red[3]={1.0, 0.0, 0.0}; GLfloat blue[3]={0.0, 0.0, 1.0}; GLfloat greyRed[3]={1.0, 0.6, 0.6}; GLfloat greyBlue[3]={0.6, 0.6, 1.0}; glClear(GL_COLOR_BUFFER_BIT); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_SECONDARY_COLOR_ARRAY); glSecondaryColorPointer(3, GL_UNSIGNED_BYTE, 4, colors); glVertexPointer(3, GL_FLOAT, 0, verts); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glPushMatrix(); glTranslatef(75.0, 0.0, 0.0); glSecondaryColorPointer(GL_BGRA, GL_UNSIGNED_BYTE, 0, colors); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glPopMatrix(); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE); glPushMatrix(); glTranslatef(0.0, -75.0, 0.0); glSecondaryColorPointer(3, GL_UNSIGNED_BYTE, 4, colors); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glPushMatrix(); glTranslatef(75.0, 0.0, 0.0); glSecondaryColorPointer(GL_BGRA, GL_UNSIGNED_BYTE, 0, colors); glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); glPopMatrix(); glPopMatrix(); pass = pass && piglit_probe_pixel_rgb(200, 200, red); pass = pass && piglit_probe_pixel_rgb(275, 200, blue); pass = pass && piglit_probe_pixel_rgb(200, 125, greyRed); pass = pass && piglit_probe_pixel_rgb(275, 125, greyBlue); glFinish(); piglit_present_results(); glDisable(GL_BLEND); glDisableClientState(GL_SECONDARY_COLOR_ARRAY); glDisableClientState(GL_VERTEX_ARRAY); return pass ? PIGLIT_PASS : PIGLIT_FAIL; }
inline void VL_glSecondaryColorPointer( GLint size, GLenum type, GLsizei stride, const GLvoid* pointer) { if(glSecondaryColorPointer) glSecondaryColorPointer(size, type, stride, (GLvoid*)pointer); else if(glSecondaryColorPointerEXT) glSecondaryColorPointerEXT(size, type, stride, (GLvoid*)pointer); else VL_UNSUPPORTED_FUNC(); }
inline void VL_glSecondaryColorPointer( GLint size, GLenum type, GLsizei stride, const GLvoid* pointer) { #ifdef GL_VERSION_1_4_DEPRECATED if(glSecondaryColorPointer) glSecondaryColorPointer(size, type, stride, (GLvoid*)pointer); else #endif if(glSecondaryColorPointerEXT) glSecondaryColorPointerEXT(size, type, stride, (GLvoid*)pointer); else VL_UNSUPPORTED_FUNC(); }
void piglit_init(int argc, char **argv) { bool pass = true; GLubyte dummy[100]; glVertexPointer(2, GL_FLOAT, 12, dummy); glNormalPointer(GL_FLOAT, 0, dummy); glColorPointer(4, GL_UNSIGNED_BYTE, 16, dummy); glSecondaryColorPointer(3, GL_SHORT, 32, dummy); glTexCoordPointer(3, GL_SHORT, 18, dummy); glEdgeFlagPointer(4, dummy); glIndexPointer(GL_SHORT, 10, dummy); glFogCoordPointer(GL_FLOAT, 8, dummy); pass = test_get(GL_VERTEX_ARRAY_SIZE, 2) && pass; pass = test_get(GL_VERTEX_ARRAY_TYPE, GL_FLOAT) && pass; pass = test_get(GL_VERTEX_ARRAY_STRIDE, 12) && pass; pass = test_get(GL_NORMAL_ARRAY_TYPE, GL_FLOAT) && pass; pass = test_get(GL_NORMAL_ARRAY_STRIDE, 0) && pass; pass = test_get(GL_COLOR_ARRAY_SIZE, 4) && pass; pass = test_get(GL_COLOR_ARRAY_TYPE, GL_UNSIGNED_BYTE) && pass; pass = test_get(GL_COLOR_ARRAY_STRIDE, 16) && pass; pass = test_get(GL_SECONDARY_COLOR_ARRAY_SIZE, 3) && pass; pass = test_get(GL_SECONDARY_COLOR_ARRAY_TYPE, GL_SHORT) && pass; pass = test_get(GL_SECONDARY_COLOR_ARRAY_STRIDE, 32) && pass; pass = test_get(GL_TEXTURE_COORD_ARRAY_SIZE, 3) && pass; pass = test_get(GL_TEXTURE_COORD_ARRAY_TYPE, GL_SHORT) && pass; pass = test_get(GL_TEXTURE_COORD_ARRAY_STRIDE, 18) && pass; pass = test_get(GL_EDGE_FLAG_ARRAY_STRIDE, 4) && pass; pass = test_get(GL_INDEX_ARRAY_TYPE, GL_SHORT) && pass; pass = test_get(GL_INDEX_ARRAY_STRIDE, 10) && pass; pass = test_get(GL_FOG_COORD_ARRAY_TYPE, GL_FLOAT) && pass; pass = test_get(GL_FOG_COORD_ARRAY_STRIDE, 8) && pass; piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL); }
void VertexDecl::bindArray() { bool haveTex = false; for ( InfoVec::iterator iter = mInfoVec.begin() , itEnd = mInfoVec.end(); iter != itEnd; ++iter ) { Info& info = *iter; switch( info.semantic ) { case Vertex::ePosition: glEnableClientState( GL_VERTEX_ARRAY ); glVertexPointer( getElementSize( info.format ) , getFormatType( info.format ) , mVertexSize , (void*)info.offset ); break; case Vertex::eNormal: assert( getElementSize( info.format ) == 3 ); glEnableClientState( GL_NORMAL_ARRAY ); glNormalPointer( getFormatType( info.format ) , mVertexSize , (void*)info.offset ); break; case Vertex::eColor: if ( info.idx == 0 ) { glEnableClientState( GL_COLOR_ARRAY ); glColorPointer( getElementSize( info.format ) , getFormatType( info.format ) , mVertexSize , (void*)info.offset ); } else { glEnableClientState( GL_SECONDARY_COLOR_ARRAY ); glSecondaryColorPointer( getElementSize( info.format ) , getFormatType( info.format ) , mVertexSize , (void*)info.offset ); } break; case Vertex::eTexcoord: glClientActiveTexture( GL_TEXTURE0 + info.idx ); glEnableClientState( GL_TEXTURE_COORD_ARRAY ); glTexCoordPointer( getElementSize( info.format ) , getFormatType( info.format ) , mVertexSize , (void*)info.offset ); haveTex = true; break; } } }
PIGLIT_GL_TEST_CONFIG_END void piglit_init(int argc, char **argv) { static const GLubyte ubytes[4] = { 255, 0, 0, 127 }; bool pass = true; GLint size; piglit_require_gl_version(20); piglit_require_extension("GL_ARB_vertex_array_bgra"); glColorPointer(GL_BGRA, GL_UNSIGNED_BYTE, sizeof ubytes, ubytes); size = 0; glGetIntegerv(GL_COLOR_ARRAY_SIZE, &size); if (size != GL_BGRA) { fprintf(stderr, "glGetIntegerv(GL_COLOR_ARRAY_SIZE) returned %i, GL_BGRA expected\n", size); pass = false; } glSecondaryColorPointer(GL_BGRA, GL_UNSIGNED_BYTE, sizeof ubytes, ubytes); size = 0; glGetIntegerv(GL_SECONDARY_COLOR_ARRAY_SIZE, &size); if (size != GL_BGRA) { fprintf(stderr, "glGetIntegerv(GL_SECONDARY_COLOR_ARRAY_SIZE) returned %i, GL_BGRA expected\n", size); pass = false; } glVertexAttribPointer(1, GL_BGRA, GL_UNSIGNED_BYTE, GL_TRUE, sizeof ubytes, ubytes); size = 0; glGetVertexAttribiv(1, GL_VERTEX_ATTRIB_ARRAY_SIZE, &size); if (size != GL_BGRA) { fprintf(stderr, "glGetVertexAttribiv(GL_VERTEX_ATTRIB_ARRAY_SIZE) returned %i, GL_BGRA expected\n", size); pass = false; } piglit_report_result(pass ? PIGLIT_PASS : PIGLIT_FAIL); }
static bool test_legacy_vertex_attribs() { bool pass = true; /* "The error INVALID_ENUM is generated by VertexPointer, NormalPointer, * ColorPointer, SecondaryColorPointer, IndexPointer, EdgeFlagPointer, * FogCoordPointer, or TexCoordPointer if <type> is * UNSIGNED_INT_10F_11F_11F_REV. */ glVertexPointer(3, GL_UNSIGNED_INT_10F_11F_11F_REV, 0, (GLvoid *)0); TEST("VertexPointer-not-allowed", GL_INVALID_ENUM); glNormalPointer(GL_UNSIGNED_INT_10F_11F_11F_REV, 0, (GLvoid *)0); TEST("NormalPointer-not-allowed", GL_INVALID_ENUM); glColorPointer(3, GL_UNSIGNED_INT_10F_11F_11F_REV, 0, (GLvoid *)0); TEST("ColorPointer-not-allowed", GL_INVALID_ENUM); glSecondaryColorPointer(3, GL_UNSIGNED_INT_10F_11F_11F_REV, 0, (GLvoid *)0); TEST("SecondaryColorPointer-not-allowed", GL_INVALID_ENUM); glIndexPointer(GL_UNSIGNED_INT_10F_11F_11F_REV, 0, (GLvoid *)0); TEST("IndexPointer-not-allowed", GL_INVALID_ENUM); /* spec lists EdgeFlagPointer, but this is a bug -- it does not take a <type> param */ glFogCoordPointer(GL_UNSIGNED_INT_10F_11F_11F_REV, 0, (GLvoid *)0); TEST("FogCoordPointer-not-allowed", GL_INVALID_ENUM); glTexCoordPointer(3, GL_UNSIGNED_INT_10F_11F_11F_REV, 0, (GLvoid *)0); TEST("TexCoordPointer-not-allowed", GL_INVALID_ENUM); return pass; }
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_GL14_nglSecondaryColorPointerBO(JNIEnv *env, jclass clazz, jint size, jint type, jint stride, jlong data_buffer_offset, jlong function_pointer) { const GLvoid *data_address = (const GLvoid *)(intptr_t)offsetToPointer(data_buffer_offset); glSecondaryColorPointerPROC glSecondaryColorPointer = (glSecondaryColorPointerPROC)((intptr_t)function_pointer); glSecondaryColorPointer(size, type, stride, data_address); }
// ---------------------------------------------------------------------------- void vertex_attribute_secondary_color_enable( vertex_attribute_t *attr ) { glEnableClientState( attr->target ); glSecondaryColorPointer( attr->size, attr->type, attr->stride, attr->pointer ); }
enum piglit_result piglit_display(void) { GLboolean pass = GL_TRUE; float array[] = { 10, 10, 1, 0, 0, 27, 10, 1, 0, 0, 10, 30, 1, 0, 0, 30, 10, 0, 1, 0, 47, 10, 0, 1, 0, 30, 30, 0, 1, 0, 50, 10, 0, 0, 1, 67, 10, 0, 0, 1, 50, 30, 0, 0, 1, 70, 10, 1, 0, 1, 87, 10, 1, 0, 1, 70, 30, 1, 0, 1 }; float seccol[] = { 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, 0.2, }; float c0[] = {1, 0.2, 0.2}; float c1[] = {0.2, 1, 0.2}; float c2[] = {0.2, 0.2, 1}; float c3[] = {1, 0.2, 1}; short indices[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 }; int i, j; piglit_ortho_projection(piglit_width, piglit_height, GL_FALSE); printf("From bottom to top:\n"); glEnable(GL_COLOR_SUM); glLoadIdentity(); /* State change: Vertex arrays. */ glVertexPointer(2, GL_FLOAT, 20, array); glColorPointer(3, GL_FLOAT, 20, array + 2); glSecondaryColorPointer(3, GL_FLOAT, 0, seccol); glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_COLOR_ARRAY); glEnableClientState(GL_SECONDARY_COLOR_ARRAY); /* The vertex array state should be preserved after glClear. */ glClear(GL_COLOR_BUFFER_BIT); /* Draw. */ printf("DrawElements\n"); for (i = 0; i < 4; i++) glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_SHORT, indices + i*3); /* State change: Constant buffer. */ glTranslatef(0, 30, 0); rotate_colors(array); /* Draw. */ printf("DrawArrays\n"); for (i = 0; i < 4; i++) glDrawArrays(GL_TRIANGLES, i*3, 3); /* State change: Vertex arrays. */ glDisableClientState(GL_VERTEX_ARRAY); glDisableClientState(GL_COLOR_ARRAY); glDisableClientState(GL_SECONDARY_COLOR_ARRAY); /* State change: Constant buffer. */ glTranslatef(0, 30, 0); rotate_colors(array); /* Draw. */ printf("Begin/End\n"); for (i = 0; i < 4; i++) { glBegin(GL_TRIANGLES); for (j = 0; j < 3; j++) { glColor3fv(array + i*15 + j*5 + 2); glSecondaryColor3fv(seccol); glVertex2fv(array + i*15 + j*5); } glEnd(); } /* State change: Constant buffer. */ glTranslatef(0, 30, 0); rotate_colors(array); /* Create display lists. */ for (i = 0; i < 4; i++) { glNewList(i+1, GL_COMPILE); glBegin(GL_TRIANGLES); for (j = 0; j < 3; j++) { glColor3fv(array + i*15 + j*5 + 2); glSecondaryColor3fv(seccol); glVertex2fv(array + i*15 + j*5); } glEnd(); glEndList(); } /* Draw. */ printf("CallList\n"); for (i = 0; i < 4; i++) { glCallList(i+1); } pass = pass && piglit_probe_pixel_rgb(15, 15, c0); pass = pass && piglit_probe_pixel_rgb(35, 15, c1); pass = pass && piglit_probe_pixel_rgb(55, 15, c2); pass = pass && piglit_probe_pixel_rgb(75, 15, c3); pass = pass && piglit_probe_pixel_rgb(15, 45, c1); pass = pass && piglit_probe_pixel_rgb(35, 45, c2); pass = pass && piglit_probe_pixel_rgb(55, 45, c3); pass = pass && piglit_probe_pixel_rgb(75, 45, c0); pass = pass && piglit_probe_pixel_rgb(15, 75, c2); pass = pass && piglit_probe_pixel_rgb(35, 75, c3); pass = pass && piglit_probe_pixel_rgb(55, 75, c0); pass = pass && piglit_probe_pixel_rgb(75, 75, c1); pass = pass && piglit_probe_pixel_rgb(15, 105, c3); pass = pass && piglit_probe_pixel_rgb(35, 105, c0); pass = pass && piglit_probe_pixel_rgb(55, 105, c1); pass = pass && piglit_probe_pixel_rgb(75, 105, c2); glutSwapBuffers(); return pass ? PIGLIT_PASS : PIGLIT_FAIL; }
void PowerVBO::display() { glPushClientAttrib(GL_CLIENT_ALL_ATTRIB_BITS); if (mTypes & PVBO_VERTEX ) glEnableClientState(GL_VERTEX_ARRAY); if (mTypes & PVBO_NORMAL ) glEnableClientState(GL_NORMAL_ARRAY); if (mTypes & PVBO_TEXTURE) glEnableClientState(GL_TEXTURE_COORD_ARRAY); if (mTypes & PVBO_COLOR ) glEnableClientState(GL_COLOR_ARRAY); if (mTypes & PVBO_COLOR2 ) glEnableClientState(GL_SECONDARY_COLOR_ARRAY); for (size_t i = 0; i < mVertices.size(); ++i) { PowerVertexArray& pva = mVertices[i]; glBindBuffer(GL_ARRAY_BUFFER, pva.binding); switch (pva.type) { case PVBO_VERTEX: { glVertexPointer(pva.valuesPerVertex, GL_FLOAT, 0, 0); break; } case PVBO_NORMAL: { glNormalPointer(GL_FLOAT, 0, 0); break; } case PVBO_TEXTURE: { glTexCoordPointer(pva.valuesPerVertex, GL_FLOAT, 0, 0); break; } case PVBO_COLOR: { glColorPointer(pva.valuesPerVertex, GL_FLOAT, 0, 0); break; } case PVBO_COLOR2: { glSecondaryColorPointer(pva.valuesPerVertex, GL_FLOAT, 0, 0); break; } default: { cerr << "PowerVBO::display() -- invalid array type -- " << pva.type << endl; exit(1); } } } for (size_t i = 0; i < mIndices.size(); ++i) { PowerIndexArray& pia = mIndices[i]; glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, pia.binding); glDrawElements(pia.drawMode, pia.size, GL_UNSIGNED_INT, 0); } glPopClientAttrib(); glBindBuffer(GL_ARRAY_BUFFER, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); }