state_client.c revision 499206869d6ae299fc30d85ae5a03493b5c945db
10430N/A * See the file LICENSE.txt for information on redistributing this software.
10430N/A#include "state/cr_statetypes.h"
10430N/A#include "state/cr_statefuncs.h"
10430N/A#include "state_internals.h"
10430N/A for ( i = 0; i < CR_MAX_TEXTURE_UNITS; i++ )
10430N/A#ifdef CR_NV_vertex_program
10430N/A for ( i = 0; i < CR_MAX_VERTEX_ATTRIBS; i++ )
#ifndef IN_GUEST
#ifdef CR_EXT_compiled_vertex_array
for (i = 0 ; i < CR_MAX_TEXTURE_UNITS ; i++)
for (i = 0; i < CR_MAX_VERTEX_ATTRIBS; i++)
c->curClientTextureUnit = 0;
#ifdef CR_EXT_compiled_vertex_array
# ifdef IN_GUEST
#ifdef CR_ARB_vertex_buffer_object
#ifdef CR_EXT_compiled_vertex_array
#ifdef CR_ARB_vertex_buffer_object
#ifdef CR_EXT_compiled_vertex_array
#ifdef CR_ARB_vertex_buffer_object
#ifdef CR_EXT_compiled_vertex_array
#ifdef CR_ARB_vertex_buffer_object
#ifdef CR_EXT_compiled_vertex_array
#ifdef CR_ARB_vertex_buffer_object
#ifdef CR_EXT_compiled_vertex_array
#ifdef CR_ARB_vertex_buffer_object
#ifdef CR_EXT_compiled_vertex_array
#ifdef CR_ARB_vertex_buffer_object
#ifdef CR_EXT_compiled_vertex_array
for (i = 0 ; i < CR_MAX_TEXTURE_UNITS ; i++)
#ifdef CR_ARB_vertex_buffer_object
#ifdef CR_EXT_compiled_vertex_array
#ifdef CR_NV_vertex_program
for (i = 0; i < CR_MAX_VERTEX_ATTRIBS; i++) {
#ifdef CR_ARB_vertex_buffer_object
#ifdef CR_EXT_compiled_vertex_array
* PixelStore functions are here, not in state_pixel.c because this
switch( pname )
case GL_PACK_SWAP_BYTES:
case GL_PACK_LSB_FIRST:
case GL_UNPACK_SWAP_BYTES:
case GL_UNPACK_LSB_FIRST:
FLUSH();
switch(pname) {
case GL_PACK_SWAP_BYTES:
case GL_PACK_LSB_FIRST:
case GL_PACK_ROW_LENGTH:
#ifdef CR_OPENGL_VERSION_1_2
case GL_PACK_IMAGE_HEIGHT:
case GL_PACK_SKIP_IMAGES:
case GL_PACK_SKIP_PIXELS:
case GL_PACK_SKIP_ROWS:
case GL_PACK_ALIGNMENT:
case GL_UNPACK_SWAP_BYTES:
case GL_UNPACK_LSB_FIRST:
case GL_UNPACK_ROW_LENGTH:
#ifdef CR_OPENGL_VERSION_1_2
case GL_UNPACK_IMAGE_HEIGHT:
case GL_UNPACK_SKIP_IMAGES:
case GL_UNPACK_SKIP_PIXELS:
case GL_UNPACK_SKIP_ROWS:
case GL_UNPACK_ALIGNMENT:
switch (array)
#ifdef CR_NV_vertex_program
case GL_VERTEX_ARRAY:
case GL_COLOR_ARRAY:
case GL_NORMAL_ARRAY:
case GL_INDEX_ARRAY:
case GL_TEXTURE_COORD_ARRAY:
case GL_EDGE_FLAG_ARRAY:
#ifdef CR_EXT_fog_coord
#ifdef CR_EXT_secondary_color
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "Invalid Enum passed to Enable/Disable Client State: SECONDARY_COLOR_ARRAY_EXT - EXT_secondary_color is not enabled." );
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "Invalid Enum passed to Enable/Disable Client State: 0x%x", array );
FLUSH();
FLUSH();
#ifdef CR_EXT_compiled_vertex_array
switch (type)
case GL_BYTE:
case GL_UNSIGNED_BYTE:
case GL_SHORT:
case GL_UNSIGNED_SHORT:
case GL_INT:
case GL_UNSIGNED_INT:
case GL_FLOAT:
case GL_DOUBLE:
if (stride)
#ifdef CR_ARB_vertex_buffer_object
FLUSH();
if (stride < 0)
crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glVertexPointer: stride was negative: %d", stride);
FLUSH();
if (stride < 0)
crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glColorPointer: stride was negative: %d", stride);
FLUSH();
crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glSecondaryColorPointerEXT: invalid size: %d", size);
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "glSecondaryColorPointerEXT: invalid type: 0x%x", type);
if (stride < 0)
crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glSecondaryColorPointerEXT: stride was negative: %d", stride);
const GLvoid *p)
FLUSH();
if (stride < 0)
crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glIndexPointer: stride was negative: %d", stride);
const GLvoid *p)
FLUSH();
if (stride < 0)
crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glNormalPointer: stride was negative: %d", stride);
FLUSH();
if (stride < 0)
crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glTexCoordPointer: stride was negative: %d", stride);
FLUSH();
if (stride < 0)
crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glTexCoordPointer: stride was negative: %d", stride);
FLUSH();
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "glFogCoordPointerEXT: invalid type: 0x%x", type);
if (stride < 0)
crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glFogCoordPointerEXT: stride was negative: %d", stride);
void STATE_APIENTRY crStateVertexAttribPointerNV(GLuint index, GLint size, GLenum type, GLsizei stride, const GLvoid *p)
void STATE_APIENTRY crStateVertexAttribPointerARB(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *p)
FLUSH();
crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glVertexAttribPointerARB: invalid index: %d", (int) index);
crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glVertexAttribPointerARB: invalid size: %d", size);
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "glVertexAttribPointerARB: invalid type: 0x%x", type);
if (stride < 0)
crStateError(__LINE__, __FILE__, GL_INVALID_VALUE, "glVertexAttribPointerARB: stride was negative: %d", stride);
unsigned char *base = (unsigned char *) p;
FLUSH();
if (stride < 0)
crStateError(__LINE__, __FILE__, GL_INVALID_OPERATION, "glInterleavedArrays: stride < 0: %d", stride);
switch (format)
case GL_T4F_C4F_N3F_V4F:
case GL_T2F_C4F_N3F_V3F:
case GL_C4F_N3F_V3F:
case GL_T4F_V4F:
case GL_T2F_C3F_V3F:
case GL_T2F_N3F_V3F:
case GL_C3F_V3F:
case GL_N3F_V3F:
case GL_T2F_C4UB_V3F:
case GL_T2F_V3F:
case GL_C4UB_V3F:
case GL_V3F:
case GL_C4UB_V2F:
case GL_V2F:
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "glInterleavedArrays: Unrecognized format: %d", format);
#ifdef CR_EXT_compiled_vertex_array
switch (format)
case GL_T4F_C4F_N3F_V4F:
case GL_T2F_C4F_N3F_V3F:
case GL_C4F_N3F_V3F:
case GL_T4F_V4F:
case GL_T2F_C3F_V3F:
case GL_T2F_N3F_V3F:
case GL_C3F_V3F:
case GL_N3F_V3F:
case GL_T2F_C4UB_V3F:
case GL_T2F_V3F:
case GL_C4UB_V3F:
case GL_V3F:
case GL_C4UB_V2F:
case GL_V2F:
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "glInterleavedArrays: Unrecognized format: %d", format);
if (stride==0)
#ifdef CR_EXT_compiled_vertex_array
switch (format)
case GL_T4F_C4F_N3F_V4F:
case GL_T2F_C4F_N3F_V3F:
case GL_C4F_N3F_V3F:
case GL_T2F_N3F_V3F:
case GL_N3F_V3F:
case GL_T4F_V4F:
case GL_T2F_C3F_V3F:
case GL_C3F_V3F:
case GL_T2F_C4UB_V3F:
case GL_T2F_V3F:
case GL_C4UB_V3F:
case GL_V3F:
case GL_C4UB_V2F:
case GL_V2F:
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "glInterleavedArrays: Unrecognized format: %d", format);
#ifdef CR_EXT_compiled_vertex_array
switch (format)
case GL_T4F_C4F_N3F_V4F:
case GL_T2F_C4F_N3F_V3F:
case GL_C4F_N3F_V3F:
case GL_T2F_C3F_V3F:
case GL_C3F_V3F:
case GL_T2F_C4UB_V3F:
case GL_C4UB_V3F:
case GL_C4UB_V2F:
case GL_T2F_N3F_V3F:
case GL_N3F_V3F:
case GL_T4F_V4F:
case GL_T2F_V3F:
case GL_V3F:
case GL_V2F:
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "glInterleavedArrays: Unrecognized format: %d", format);
#ifdef CR_EXT_compiled_vertex_array
switch (format)
case GL_T4F_C4F_N3F_V4F:
case GL_T2F_C4F_N3F_V3F:
case GL_T2F_C3F_V3F:
case GL_T2F_N3F_V3F:
case GL_T2F_C4UB_V3F:
case GL_T4F_V4F:
case GL_T2F_V3F:
case GL_C4UB_V3F:
case GL_C4UB_V2F:
case GL_C3F_V3F:
case GL_C4F_N3F_V3F:
case GL_N3F_V3F:
case GL_V3F:
case GL_V2F:
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "glInterleavedArrays: Unrecognized format: %d", format);
switch (pname)
case GL_VERTEX_ARRAY_POINTER:
case GL_COLOR_ARRAY_POINTER:
case GL_NORMAL_ARRAY_POINTER:
case GL_INDEX_ARRAY_POINTER:
#ifdef CR_EXT_fog_coord
#ifdef CR_EXT_secondary_color
crStateError(__LINE__, __FILE__, GL_INVALID_ENUM, "Invalid Enum passed to glGetPointerv: SECONDARY_COLOR_ARRAY_EXT - EXT_secondary_color is not enabled." );
FLUSH();
c->pixelStoreStackDepth++;
c->vertexArrayStackDepth++;
if (c->attribStackDepth == 0) {
FLUSH();
if (c->pixelStoreStackDepth == 0) {
c->pixelStoreStackDepth--;
if (c->vertexArrayStackDepth == 0) {
c->vertexArrayStackDepth--;
#ifdef IN_GUEST
for (i = 0 ; i < CR_MAX_TEXTURE_UNITS ; i++)
for (i = 0; i < CR_MAX_VERTEX_ATTRIBS; i++)
#ifdef IN_GUEST
for (i = 0 ; i < CR_MAX_TEXTURE_UNITS ; i++)
for (i = 0; i < CR_MAX_VERTEX_ATTRIBS; i++)
#define CRSTATE_IS_SERVER_CP(cp) (!(cp).enabled || !(cp).p || ((cp).buffer && (cp).buffer->name) || ((cp).locked))
#ifdef CR_ARB_vertex_buffer_object
if (res)
if (res)
#if defined(DEBUG) && 0
if (!res)
return res;
return GL_FALSE;
#ifdef CR_ARB_vertex_buffer_object
return GL_TRUE;
return GL_FALSE;
return GL_FALSE;
switch (index)
case 0: return &array->v;
CRASSERT(false);
return NULL;