/* This calls the appropriate vertex pointer based on the given capability. */
static void _setVertexPointer(GLint size,
			      GLenum type,
			      GLsizei stride,
			      const GLvoid *pointer,
			      GLenum capability)
{
  switch(capability) {
  case GL_VERTEX_ARRAY:
    glVertexPointer(size, type, stride, pointer);
    break;
  case GL_NORMAL_ARRAY:
    glNormalPointer(type, stride, pointer);
    break;
  case GL_COLOR_ARRAY:
    glColorPointer(size, type, stride, pointer);
    break;
  case GL_INDEX_ARRAY:
    glIndexPointer(type, stride, pointer);
    break;
  case GL_TEXTURE_COORD_ARRAY:
    glTexCoordPointer(size, type, stride, pointer);
    break;
  case GL_EDGE_FLAG_ARRAY:
    glEdgeFlagPointer(stride, pointer);
    break;
  default:
    fatalUnreportableError("Unexpected capabilitity passed to _setVertexPointer");
    break;
  }
}
Exemple #2
0
enum piglit_result
piglit_display(void)
{
	bool pass = true;
	float green[] = {0, 1, 0, 0};
	float clear[] = {0.5, 0.5, 0.5, 0.5};
	struct {
		GLfloat x, y;
		GLfloat r, g, b, a;
		GLboolean edgeflag;
	} verts[] = {
		{ 1.5, 1.5, 0.0, 1.0, 0.0, 0.0, GL_TRUE },
		{ 5.5, 1.5, 0.0, 1.0, 0.0, 0.0, GL_FALSE },
		{ 5.5, 5.5, 0.0, 1.0, 0.0, 0.0, GL_TRUE },
		{ 1.5, 5.5, 0.0, 1.0, 0.0, 0.0, GL_FALSE },
	};

	piglit_ortho_projection(piglit_width, piglit_height, false);

	glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);

	glClearColor(0.5, 0.5, 0.5, 0.5);
	glClear(GL_COLOR_BUFFER_BIT);

	glColor4f(0, 1, 0, 0);

	glVertexPointer(2, GL_FLOAT, sizeof(verts[0]), &verts[0].x);
	glVertexAttribPointer(color_index, 4, GL_FLOAT, GL_FALSE,
			      sizeof(verts[0]), &verts[0].r);
	glEdgeFlagPointer(sizeof(verts[0]), &verts[0].edgeflag);
	glEnableClientState(GL_VERTEX_ARRAY);
	glEnableVertexAttribArray(color_index);
	glEnableClientState(GL_EDGE_FLAG_ARRAY);

	glDrawArrays(GL_POLYGON, 0, 4);

	pass = piglit_probe_pixel_rgba(3, 1, green) && pass;
	pass = piglit_probe_pixel_rgba(3, 5, green) && pass;
	pass = piglit_probe_pixel_rgba(1, 3, clear) && pass;
	pass = piglit_probe_pixel_rgba(5, 3, clear) && pass;

	piglit_present_results();

	return pass ? PIGLIT_PASS : PIGLIT_FAIL;
}
Exemple #3
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);
}
Exemple #4
0
void glEdgeFlagPointerEXT( GLsizei stride, GLsizei count, const GLboolean *ptr )
{
	(void) count;
	glEdgeFlagPointer( stride, ptr );
}
// ----------------------------------------------------------------------------
void
vertex_attribute_edge_flag_enable( vertex_attribute_t *attr )
{
    glEnableClientState( attr->target );
    glEdgeFlagPointer( attr->stride, attr->pointer );
}
Exemple #6
0
void nuiGLDrawContext::DrawArray(const nuiRenderArray& rArray)
{
  if (mCurrentState.mAntialiasing)
  {
/*
    glEnable(GL_POLYGON_SMOOTH);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
*/
//    glHint(GL_MULTISAMPLE_FILTER_HINT_NV, GL_NICEST);
    glEnable(GL_MULTISAMPLE_ARB);
  }

  if (rArray.IsArrayEnabled(nuiRenderArray::eVertex))
  {
    glEnableClientState(GL_VERTEX_ARRAY);
    glVertexPointer(rArray.GetVertexElements(), GL_FLOAT, 0, &rArray.GetVertices()[0]);
  }
  else
    glDisableClientState(GL_VERTEX_ARRAY);

  if (rArray.IsArrayEnabled(nuiRenderArray::eColor))
  {
    glEnableClientState(GL_COLOR_ARRAY);
    glColorPointer(rArray.GetColorElements(), GL_FLOAT, 0, &rArray.GetColors()[0]);
  }
  else
  {
    nuiColor c;
    switch (rArray.GetMode())
    {
      case GL_POINTS:
      case GL_LINES:
      case GL_LINE_LOOP:
      case GL_LINE_STRIP:
        c = mCurrentState.mStrokeColor;
        break;

      case GL_TRIANGLES:
      case GL_TRIANGLE_STRIP:
      case GL_TRIANGLE_FAN:
      case GL_QUADS:
      case GL_QUAD_STRIP:
      case GL_POLYGON:
        c = mCurrentState.mFillColor;
        break;
    }
    glColor4f(
      c.Red(),
      c.Green(),
      c.Blue(),
      c.Alpha()
      );
    glDisableClientState(GL_COLOR_ARRAY);
  }

  if (rArray.IsArrayEnabled(nuiRenderArray::eTexCoord))
  {
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
    glTexCoordPointer(rArray.GetTexCoordElements(), GL_FLOAT, 0, &rArray.GetTexCoords()[0]);
  }
  else
    glDisableClientState(GL_TEXTURE_COORD_ARRAY);

  if (rArray.IsArrayEnabled(nuiRenderArray::eNormal))
  {
    glEnableClientState(GL_NORMAL_ARRAY);
    glNormalPointer(GL_FLOAT, 0, &rArray.GetNormals()[0]);
  }
  else
    glDisableClientState(GL_NORMAL_ARRAY);

  if (rArray.IsArrayEnabled(nuiRenderArray::eEdgeFlag))
  {
    glEnableClientState(GL_EDGE_FLAG_ARRAY);
    glEdgeFlagPointer(1, &rArray.GetEdgeFlags()[0]);
  }
  else
    glDisableClientState(GL_EDGE_FLAG_ARRAY);

  glDrawArrays(rArray.GetMode(), 0, rArray.GetSize());

  if (mCurrentState.mAntialiasing)
  {
    glDisable(GL_MULTISAMPLE_ARB);
  }

  glColor3f(1.0f, 1.0f, 1.0f);
}
Exemple #7
0
void
__glXDispSwap_DrawArrays(GLbyte * pc)
{
    __GLXdispatchDrawArraysHeader *hdr = (__GLXdispatchDrawArraysHeader *) pc;
    __GLXdispatchDrawArraysComponentHeader *compHeader;
    GLint numVertexes = hdr->numVertexes;
    GLint numComponents = hdr->numComponents;
    GLenum primType = hdr->primType;
    GLint stride = 0;
    int i;

    __GLX_DECLARE_SWAP_VARIABLES;

    __GLX_SWAP_INT(&numVertexes);
    __GLX_SWAP_INT(&numComponents);
    __GLX_SWAP_INT(&primType);

    pc += sizeof(__GLXdispatchDrawArraysHeader);
    compHeader = (__GLXdispatchDrawArraysComponentHeader *) pc;

    /* compute stride (same for all component arrays) */
    for (i = 0; i < numComponents; i++) {
        GLenum datatype = compHeader[i].datatype;
        GLint numVals = compHeader[i].numVals;
        GLenum component = compHeader[i].component;

        __GLX_SWAP_INT(&datatype);
        __GLX_SWAP_INT(&numVals);
        __GLX_SWAP_INT(&component);

        stride += __GLX_PAD(numVals * __glXTypeSize(datatype));
    }

    pc += numComponents * sizeof(__GLXdispatchDrawArraysComponentHeader);

    /* set up component arrays */
    for (i = 0; i < numComponents; i++) {
        GLenum datatype = compHeader[i].datatype;
        GLint numVals = compHeader[i].numVals;
        GLenum component = compHeader[i].component;

        __GLX_SWAP_INT(&datatype);
        __GLX_SWAP_INT(&numVals);
        __GLX_SWAP_INT(&component);

        swapArray(numVals, datatype, stride, numVertexes, pc);

        switch (component) {
        case GL_VERTEX_ARRAY:
            glEnableClientState(GL_VERTEX_ARRAY);
            glVertexPointer(numVals, datatype, stride, pc);
            break;
        case GL_NORMAL_ARRAY:
            glEnableClientState(GL_NORMAL_ARRAY);
            glNormalPointer(datatype, stride, pc);
            break;
        case GL_COLOR_ARRAY:
            glEnableClientState(GL_COLOR_ARRAY);
            glColorPointer(numVals, datatype, stride, pc);
            break;
        case GL_INDEX_ARRAY:
            glEnableClientState(GL_INDEX_ARRAY);
            glIndexPointer(datatype, stride, pc);
            break;
        case GL_TEXTURE_COORD_ARRAY:
            glEnableClientState(GL_TEXTURE_COORD_ARRAY);
            glTexCoordPointer(numVals, datatype, stride, pc);
            break;
        case GL_EDGE_FLAG_ARRAY:
            glEnableClientState(GL_EDGE_FLAG_ARRAY);
            glEdgeFlagPointer(stride, (const GLboolean *) pc);
            break;
        case GL_SECONDARY_COLOR_ARRAY:
        {
            PFNGLSECONDARYCOLORPOINTERPROC SecondaryColorPointerEXT =
                __glGetProcAddress("glSecondaryColorPointerEXT");
            glEnableClientState(GL_SECONDARY_COLOR_ARRAY);
            SecondaryColorPointerEXT(numVals, datatype, stride, pc);
            break;
        }
        case GL_FOG_COORD_ARRAY:
        {
            PFNGLFOGCOORDPOINTERPROC FogCoordPointerEXT =
                __glGetProcAddress("glFogCoordPointerEXT");
            glEnableClientState(GL_FOG_COORD_ARRAY);
            FogCoordPointerEXT(datatype, stride, pc);
            break;
        }
        default:
            break;
        }

        pc += __GLX_PAD(numVals * __glXTypeSize(datatype));
    }

    glDrawArrays(primType, 0, numVertexes);

    /* turn off anything we might have turned on */
    glDisableClientState(GL_VERTEX_ARRAY);
    glDisableClientState(GL_NORMAL_ARRAY);
    glDisableClientState(GL_COLOR_ARRAY);
    glDisableClientState(GL_INDEX_ARRAY);
    glDisableClientState(GL_TEXTURE_COORD_ARRAY);
    glDisableClientState(GL_EDGE_FLAG_ARRAY);
    glDisableClientState(GL_SECONDARY_COLOR_ARRAY);
    glDisableClientState(GL_FOG_COORD_ARRAY);
}
Exemple #8
0
void
CVisComplexObj::draw()
{
	logToFile((f, "VisComplexObj Draw\n"));
	if(!Show) return;
    double *vertices = exact ? scrVertices : getVertices();
    if (arrays[aiIndices] != 0 && GetLength(arrays[aiIndices], 1) == 0 ||
        vertices == 0 || GetLength(vertices, 1) == 0)
        return;

    glPushMatrix();

    if(exact){
        glMatrixMode (GL_MODELVIEW);
        glLoadIdentity();
        glTranslated(0.0, 0.0, Z);
    }
    else {
        // Only get exact calibration location of center
        // and approximate the rest of the points
        float x = XPosToScreen((float)X,(float)Y);
        float y = YPosToScreen((float)X,(float)Y);

        Clipped = VISWIN_IS_CLIPPED(x,y);

        DPosToDScreen(JAC,x,y);
        // Rot 4x4, allocated by column, as in matlab
        // Jac, though, is only the 2x2 Jacobian
        ROT[0]=(float)scale*JAC[0][0]; ROT[1]=(float)scale*JAC[1][0];
        ROT[4]=(float)scale*JAC[0][1]; ROT[5]=(float)scale*JAC[1][1];
        ROT[12]=x; ROT[13]=y; ROT[14]=Z;

        glMatrixMode (GL_MODELVIEW);
        // glLoadIdentity();
        // glTranslatef((float)x,(float)y,Z);      // 3: Translate
        // glScalef((float)scx,(float)scy,1);      // 2: Scale
        glLoadMatrixf(ROT);              // 2: Translate and Scale
        glRotatef((float)angle,0,0,1);   // 1: Rotate About Z axis
    }

#if INDEX_MODE
    glIndexi(ColorIndex);
#else
	glColor4d(color[0],color[1],color[2],alpha);
#endif

    if (drawMode >= odmLines && drawMode <= odmLineLoop)
    {
        if (lineStipple != 0)
        {
            glLineStipple(lineStippleFactor, lineStipple);
            glEnable(GL_LINE_STIPPLE);
        }

        if (lineWidth != 1.0) glLineWidth((float)lineWidth);
    }

    if (drawMode == odmPoints && pointSize != 1.0) glPointSize((float)pointSize);

    if (drawMode >= odmTriangles && drawMode <= odmPolygon)
    {
        if (arrays[aiPolygonStipple] != 0)
        {
            glEnable(GL_POLYGON_STIPPLE);
            glPolygonStipple((unsigned char *)arrays[aiPolygonStipple]);
        }
    }

    if (vertices            != 0)   glEnableClientState(GL_VERTEX_ARRAY);
    if (arrays[aiNormals  ] != 0)   glEnableClientState(GL_NORMAL_ARRAY);
    if (arrays[aiColors   ] != 0)   glEnableClientState(GL_COLOR_ARRAY);
    if (arrays[aiEdgeFlags] != 0)   glEnableClientState(GL_EDGE_FLAG_ARRAY);

    if (vertices != 0)
        glVertexPointer(GetLength(vertices, 0), GL_DOUBLE, 0, vertices);
    if (arrays[aiNormals] != 0)
        glNormalPointer(GL_DOUBLE, 0, arrays[aiNormals]);
    if (arrays[aiColors] != 0)
        glColorPointer (GetLength(arrays[aiColors], 0), GL_DOUBLE, 0, arrays[aiColors]);
    if (arrays[aiEdgeFlags] != 0)
        glEdgeFlagPointer(0, arrays[aiEdgeFlags]);

    if (arrays[aiIndices] != 0)
        glDrawElements(glDrawModeMap[drawMode], GetLength(arrays[aiIndices]), GL_UNSIGNED_INT, arrays[aiIndices]);
    else
        glDrawArrays(glDrawModeMap[drawMode], 0, GetLength(vertices, 1));

    if (vertices            != 0)   glDisableClientState(GL_VERTEX_ARRAY);
    if (arrays[aiNormals  ] != 0)   glDisableClientState(GL_NORMAL_ARRAY);
    if (arrays[aiColors   ] != 0)   glDisableClientState(GL_COLOR_ARRAY);
    if (arrays[aiEdgeFlags] != 0)   glDisableClientState(GL_EDGE_FLAG_ARRAY);

    if (drawMode >= odmTriangles && drawMode <= odmPolygon)
    {
        if (arrays[aiPolygonStipple] != 0) glDisable(GL_POLYGON_STIPPLE);
    }

    if (drawMode >= odmLines && drawMode <= odmLineLoop)
    {
        if (lineStipple != 0) glDisable(GL_LINE_STIPPLE);
        if (lineWidth != 1.0) glLineWidth(1.0);
    }

    if (drawMode == odmPoints && pointSize != 1.0) glPointSize(1.0);

    glPopMatrix();
}
Exemple #9
0
M(void, glEdgeFlagPointer, jint stride, jobject ptr) {
	glEdgeFlagPointer(stride, BUFF(GLvoid, ptr));
}