コード例 #1
0
ファイル: varray.c プロジェクト: BackupTheBerlios/dri-ex-svn
void GLAPIENTRY
_mesa_TexCoordPointer(GLint size, GLenum type, GLsizei stride,
                      const GLvoid *ptr)
{
    GLint elementSize;
    GET_CURRENT_CONTEXT(ctx);
    const GLuint unit = ctx->Array.ActiveTexture;
    ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);

    if (size < 1 || size > 4) {
        _mesa_error( ctx, GL_INVALID_VALUE, "glTexCoordPointer(size)" );
        return;
    }
    if (stride < 0) {
        _mesa_error( ctx, GL_INVALID_VALUE, "glTexCoordPointer(stride)" );
        return;
    }

    if (MESA_VERBOSE&(VERBOSE_VARRAY|VERBOSE_API))
        _mesa_debug(ctx, "glTexCoordPointer(unit %u sz %d type %s stride %d)\n",
                    unit, size, _mesa_lookup_enum_by_nr( type ), stride);

    /* always need to check that <type> is legal */
    switch (type) {
    case GL_SHORT:
        elementSize = size * sizeof(GLshort);
        break;
    case GL_INT:
        elementSize = size * sizeof(GLint);
        break;
    case GL_FLOAT:
        elementSize = size * sizeof(GLfloat);
        break;
    case GL_DOUBLE:
        elementSize = size * sizeof(GLdouble);
        break;
    default:
        _mesa_error( ctx, GL_INVALID_ENUM, "glTexCoordPointer(type)" );
        return;
    }

    update_array(ctx, &ctx->Array.TexCoord[unit], _NEW_ARRAY_TEXCOORD(unit),
                 elementSize, size, type, stride, GL_FALSE, ptr);

    if (ctx->Driver.TexCoordPointer)
        ctx->Driver.TexCoordPointer( ctx, size, type, stride, ptr );
}
コード例 #2
0
ファイル: enable.c プロジェクト: toastpp/toastpp
/**
 * Helper to enable/disable client-side state.
 */
static void
client_state(GLcontext *ctx, GLenum cap, GLboolean state)
{
   GLuint flag;
   GLboolean *var;

   switch (cap) {
      case GL_VERTEX_ARRAY:
         var = &ctx->Array.ArrayObj->Vertex.Enabled;
         flag = _NEW_ARRAY_VERTEX;
         break;
      case GL_NORMAL_ARRAY:
         var = &ctx->Array.ArrayObj->Normal.Enabled;
         flag = _NEW_ARRAY_NORMAL;
         break;
      case GL_COLOR_ARRAY:
         var = &ctx->Array.ArrayObj->Color.Enabled;
         flag = _NEW_ARRAY_COLOR0;
         break;
      case GL_INDEX_ARRAY:
         var = &ctx->Array.ArrayObj->Index.Enabled;
         flag = _NEW_ARRAY_INDEX;
         break;
      case GL_TEXTURE_COORD_ARRAY:
         var = &ctx->Array.ArrayObj->TexCoord[ctx->Array.ActiveTexture].Enabled;
         flag = _NEW_ARRAY_TEXCOORD(ctx->Array.ActiveTexture);
         break;
      case GL_EDGE_FLAG_ARRAY:
         var = &ctx->Array.ArrayObj->EdgeFlag.Enabled;
         flag = _NEW_ARRAY_EDGEFLAG;
         break;
      case GL_FOG_COORDINATE_ARRAY_EXT:
         var = &ctx->Array.ArrayObj->FogCoord.Enabled;
         flag = _NEW_ARRAY_FOGCOORD;
         break;
      case GL_SECONDARY_COLOR_ARRAY_EXT:
         var = &ctx->Array.ArrayObj->SecondaryColor.Enabled;
         flag = _NEW_ARRAY_COLOR1;
         break;

#if FEATURE_point_size_array
      case GL_POINT_SIZE_ARRAY_OES:
         var = &ctx->Array.ArrayObj->PointSize.Enabled;
         flag = _NEW_ARRAY_POINT_SIZE;
         break;
#endif

#if FEATURE_NV_vertex_program
      case GL_VERTEX_ATTRIB_ARRAY0_NV:
      case GL_VERTEX_ATTRIB_ARRAY1_NV:
      case GL_VERTEX_ATTRIB_ARRAY2_NV:
      case GL_VERTEX_ATTRIB_ARRAY3_NV:
      case GL_VERTEX_ATTRIB_ARRAY4_NV:
      case GL_VERTEX_ATTRIB_ARRAY5_NV:
      case GL_VERTEX_ATTRIB_ARRAY6_NV:
      case GL_VERTEX_ATTRIB_ARRAY7_NV:
      case GL_VERTEX_ATTRIB_ARRAY8_NV:
      case GL_VERTEX_ATTRIB_ARRAY9_NV:
      case GL_VERTEX_ATTRIB_ARRAY10_NV:
      case GL_VERTEX_ATTRIB_ARRAY11_NV:
      case GL_VERTEX_ATTRIB_ARRAY12_NV:
      case GL_VERTEX_ATTRIB_ARRAY13_NV:
      case GL_VERTEX_ATTRIB_ARRAY14_NV:
      case GL_VERTEX_ATTRIB_ARRAY15_NV:
         CHECK_EXTENSION(NV_vertex_program, cap);
         {
            GLint n = (GLint) cap - GL_VERTEX_ATTRIB_ARRAY0_NV;
            var = &ctx->Array.ArrayObj->VertexAttrib[n].Enabled;
            flag = _NEW_ARRAY_ATTRIB(n);
         }
         break;
#endif /* FEATURE_NV_vertex_program */

      default:
         _mesa_error( ctx, GL_INVALID_ENUM,
                      "glEnable/DisableClientState(0x%x)", cap);
         return;
   }

   if (*var == state)
      return;

   FLUSH_VERTICES(ctx, _NEW_ARRAY);
   ctx->Array.NewState |= flag;

   _ae_invalidate_state(ctx, _NEW_ARRAY);

   *var = state;

   if (state)
      ctx->Array.ArrayObj->_Enabled |= flag;
   else
      ctx->Array.ArrayObj->_Enabled &= ~flag;

   if (ctx->Driver.Enable) {
      ctx->Driver.Enable( ctx, cap, state );
   }
}