Ejemplo n.º 1
0
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();
  }
Ejemplo n.º 4
0
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);
}
Ejemplo n.º 5
0
	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;
			}
		}
	}
Ejemplo n.º 6
0
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);
}
Ejemplo n.º 7
0
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;
}
Ejemplo n.º 8
0
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);
}
Ejemplo n.º 9
0
// ----------------------------------------------------------------------------
void
vertex_attribute_secondary_color_enable( vertex_attribute_t *attr )
{
    glEnableClientState( attr->target );
    glSecondaryColorPointer( attr->size, attr->type, attr->stride, attr->pointer );
}
Ejemplo n.º 10
0
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;
}
Ejemplo n.º 11
0
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);
}