unpack_arrays.c revision 10183353efa12aa94e0f3dc78e0f1c47f7928e8d
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync/* Copyright (c) 2001, Stanford University
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * All rights reserved
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * See the file LICENSE.txt for information on redistributing this software.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * \mainpage Unpacker
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * \section UnpackerIntroduction Introduction
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * Chromium consists of all the top-level files in the cr
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * directory. The unpacker module basically takes care of API dispatch,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * and OpenGL state management.
4aef33e90cfa798b2e6db5b45f02c2a6c8bbc4aevboxsync GLintptrARB pointer = (GLintptrARB) READ_DATA( 20, GLuint );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync cr_unpackDispatch.VertexPointer( size, type, stride, (void *) pointer );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync cr_unpackDispatch.TexCoordPointer( size, type, stride, (void *) pointer );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync cr_unpackDispatch.NormalPointer( type, stride, (void *) pointer );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync cr_unpackDispatch.IndexPointer( type, stride, (void *) pointer );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync cr_unpackDispatch.EdgeFlagPointer( stride, (void *) pointer );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync cr_unpackDispatch.ColorPointer( size, type, stride, (void *) pointer );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync cr_unpackDispatch.FogCoordPointerEXT( type, stride, (void *) pointer );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync cr_unpackDispatch.SecondaryColorPointerEXT( size, type, stride, (void *) pointer );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync cr_unpackDispatch.VertexAttribPointerARB( index, size, type, normalized, stride, (void *) pointer );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync cr_unpackDispatch.VertexAttribPointerNV( index, size, type, stride, (void *) pointer );
54cdd2a4e7676bc8694fa8db62ece5a1447b3597vboxsync cr_unpackDispatch.InterleavedArrays( format, stride, (void *) pointer );
521a799e2d6b107f295561fbb2d4c8852717dbf1vboxsync indexptr = hasidxdata ? DATA_POINTER(28, void) : (void*)indices;
236b6e0fdf652661ff4c655314fe488998c5c17dvboxsync cr_unpackDispatch.DrawElements(mode, count, type, indexptr);
521a799e2d6b107f295561fbb2d4c8852717dbf1vboxsync indexptr = hasidxdata ? DATA_POINTER(36, void) : (void*)indices;
236b6e0fdf652661ff4c655314fe488998c5c17dvboxsync cr_unpackDispatch.DrawRangeElements(mode, start, end, count, type, indexptr);
10183353efa12aa94e0f3dc78e0f1c47f7928e8dvboxsyncstatic void crUnpackSetClientPointerByIndex(int index, GLint size,
10183353efa12aa94e0f3dc78e0f1c47f7928e8dvboxsync GLsizei stride, const GLvoid *pointer, CRClientState *c)
10183353efa12aa94e0f3dc78e0f1c47f7928e8dvboxsync cr_unpackDispatch.VertexPointer(size, type, stride, pointer);
10183353efa12aa94e0f3dc78e0f1c47f7928e8dvboxsync cr_unpackDispatch.ColorPointer(size, type, stride, pointer);
10183353efa12aa94e0f3dc78e0f1c47f7928e8dvboxsync cr_unpackDispatch.FogCoordPointerEXT(type, stride, pointer);
10183353efa12aa94e0f3dc78e0f1c47f7928e8dvboxsync cr_unpackDispatch.SecondaryColorPointerEXT(size, type, stride, pointer);
10183353efa12aa94e0f3dc78e0f1c47f7928e8dvboxsync cr_unpackDispatch.EdgeFlagPointer(stride, pointer);
10183353efa12aa94e0f3dc78e0f1c47f7928e8dvboxsync cr_unpackDispatch.IndexPointer(type, stride, pointer);
10183353efa12aa94e0f3dc78e0f1c47f7928e8dvboxsync cr_unpackDispatch.NormalPointer(type, stride, pointer);
10183353efa12aa94e0f3dc78e0f1c47f7928e8dvboxsync cr_unpackDispatch.ClientActiveTextureARB(GL_TEXTURE0_ARB+index-7);
10183353efa12aa94e0f3dc78e0f1c47f7928e8dvboxsync cr_unpackDispatch.TexCoordPointer(size, type, stride, pointer);
10183353efa12aa94e0f3dc78e0f1c47f7928e8dvboxsync cr_unpackDispatch.ClientActiveTextureARB(GL_TEXTURE0_ARB+curTexUnit);
10183353efa12aa94e0f3dc78e0f1c47f7928e8dvboxsync cr_unpackDispatch.VertexAttribPointerARB(index-7-CR_MAX_TEXTURE_UNITS,
10183353efa12aa94e0f3dc78e0f1c47f7928e8dvboxsync unsigned char *data;
10183353efa12aa94e0f3dc78e0f1c47f7928e8dvboxsync for (i=0; i<numenabled; ++i)
10183353efa12aa94e0f3dc78e0f1c47f7928e8dvboxsync offset += sizeof(int);
10183353efa12aa94e0f3dc78e0f1c47f7928e8dvboxsync cp = crStateGetClientPointerByIndex(index, &c->array);
10183353efa12aa94e0f3dc78e0f1c47f7928e8dvboxsync CRASSERT(cp && cp->enabled && (!cp->buffer || !cp->buffer->name));
10183353efa12aa94e0f3dc78e0f1c47f7928e8dvboxsync crMemcpy(data+first*cp->bytesPerIndex, DATA_POINTER(offset, GLvoid), count*cp->bytesPerIndex);
10183353efa12aa94e0f3dc78e0f1c47f7928e8dvboxsync crUnpackSetClientPointerByIndex(index, cp->size, cp->type, cp->normalized, 0, data, c);