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)
ede25793e6ce6c74f0622821ee2648849726a9ddvboxsync /*crDebug("crUnpackSetClientPointerByIndex: %i(s=%i, t=0x%x, n=%i, str=%i) -> %p", index, size, type, normalized, stride, pointer);*/
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,
ede25793e6ce6c74f0622821ee2648849726a9ddvboxsync /*crDebug("crUnpackExtendLockArraysEXT(%i, %i) ne=%i", first, count, numenabled);*/
10183353efa12aa94e0f3dc78e0f1c47f7928e8dvboxsync for (i=0; i<numenabled; ++i)
10183353efa12aa94e0f3dc78e0f1c47f7928e8dvboxsync offset += sizeof(int);
10183353efa12aa94e0f3dc78e0f1c47f7928e8dvboxsync cp = crStateGetClientPointerByIndex(index, &c->array);
c62d2520ac91e12cf4665c936f490dd2064152d3vboxsync CRASSERT(cp && cp->enabled && (!cp->buffer || !cp->buffer->id));
10183353efa12aa94e0f3dc78e0f1c47f7928e8dvboxsync crMemcpy(data+first*cp->bytesPerIndex, DATA_POINTER(offset, GLvoid), count*cp->bytesPerIndex);
ede25793e6ce6c74f0622821ee2648849726a9ddvboxsync /*crDebug("crUnpackExtendLockArraysEXT: old cp(%i): en/l=%i(%i) p=%p size=%i type=0x%x n=%i str=%i pp=%p pstr=%i",
ede25793e6ce6c74f0622821ee2648849726a9ddvboxsync index, cp->enabled, cp->locked, cp->p, cp->size, cp->type, cp->normalized, cp->stride, cp->prevPtr, cp->prevStride);*/
10183353efa12aa94e0f3dc78e0f1c47f7928e8dvboxsync crUnpackSetClientPointerByIndex(index, cp->size, cp->type, cp->normalized, 0, data, c);
ede25793e6ce6c74f0622821ee2648849726a9ddvboxsync /*crDebug("crUnpackExtendLockArraysEXT: new cp(%i): en/l=%i(%i) p=%p size=%i type=0x%x n=%i str=%i pp=%p pstr=%i",
ede25793e6ce6c74f0622821ee2648849726a9ddvboxsync index, cp->enabled, cp->locked, cp->p, cp->size, cp->type, cp->normalized, cp->stride, cp->prevPtr, cp->prevStride);*/
ede25793e6ce6c74f0622821ee2648849726a9ddvboxsync /*crDebug("crUnpackExtendUnlockArraysEXT");*/
ede25793e6ce6c74f0622821ee2648849726a9ddvboxsync /*crDebug("crUnpackExtendUnlockArraysEXT: old cp(%i): en/l=%i(%i) p=%p size=%i type=0x%x n=%i str=%i pp=%p pstr=%i",
ede25793e6ce6c74f0622821ee2648849726a9ddvboxsync i, cp->enabled, cp->locked, cp->p, cp->size, cp->type, cp->normalized, cp->stride, cp->prevPtr, cp->prevStride);*/
10183353efa12aa94e0f3dc78e0f1c47f7928e8dvboxsync crUnpackSetClientPointerByIndex(i, cp->size, cp->type, cp->normalized, cp->prevStride, cp->prevPtr, c);
ede25793e6ce6c74f0622821ee2648849726a9ddvboxsync /*crDebug("crUnpackExtendUnlockArraysEXT: new cp(%i): en/l=%i(%i) p=%p size=%i type=0x%x n=%i str=%i pp=%p pstr=%i",
ede25793e6ce6c74f0622821ee2648849726a9ddvboxsync i, cp->enabled, cp->locked, cp->p, cp->size, cp->type, cp->normalized, cp->stride, cp->prevPtr, cp->prevStride);*/