13a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/*
23a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * SGI FREE SOFTWARE LICENSE B (Version 2.0, Sept. 18, 2008)
33a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Copyright (C) 1991-2000 Silicon Graphics, Inc. All Rights Reserved.
43a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *
53a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Permission is hereby granted, free of charge, to any person obtaining a
63a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * copy of this software and associated documentation files (the "Software"),
73a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * to deal in the Software without restriction, including without limitation
83a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * the rights to use, copy, modify, merge, publish, distribute, sublicense,
93a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * and/or sell copies of the Software, and to permit persons to whom the
103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Software is furnished to do so, subject to the following conditions:
113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *
123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * The above copyright notice including the dates of first publication and
133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * either this permission notice or a reference to
143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * http://oss.sgi.com/projects/FreeB/
153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * shall be included in all copies or substantial portions of the Software.
163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *
173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * SILICON GRAPHICS, INC. BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF
223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * SOFTWARE.
243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *
253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Except as contained in this notice, the name of Silicon Graphics, Inc.
263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * shall not be used in advertising or otherwise to promote the sale, use or
273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * other dealings in this Software without prior written authorization from
283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * Silicon Graphics, Inc.
293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */
303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "glxclient.h"
323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "indirect.h"
333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#include "indirect_vertex_array.h"
343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/*****************************************************************************/
373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/**
393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * \name Vertex array pointer bridge functions
403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org *
413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * When EXT_vertex_array was moved into the core GL spec, the \c count
423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * parameter was lost.  This libGL really only wants to implement the GL 1.1
433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * version, but we need to support applications that were written to the old
443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * interface.  These bridge functions are part of the glue that makes this
453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org * happen.
463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org */
473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/*@{*/
483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid
493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org__indirect_glColorPointerEXT(GLint size, GLenum type, GLsizei stride,
503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org                             GLsizei count, const GLvoid * pointer)
513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{
523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   (void) count;
533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   __indirect_glColorPointer(size, type, stride, pointer);
543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}
553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid
573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org__indirect_glEdgeFlagPointerEXT(GLsizei stride,
583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org                                GLsizei count, const GLboolean * pointer)
593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{
603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   (void) count;
613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   __indirect_glEdgeFlagPointer(stride, pointer);
623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}
633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid
653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org__indirect_glIndexPointerEXT(GLenum type, GLsizei stride,
663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org                             GLsizei count, const GLvoid * pointer)
673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{
683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   (void) count;
693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   __indirect_glIndexPointer(type, stride, pointer);
703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}
713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid
733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org__indirect_glNormalPointerEXT(GLenum type, GLsizei stride, GLsizei count,
743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org                              const GLvoid * pointer)
753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{
763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   (void) count;
773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   __indirect_glNormalPointer(type, stride, pointer);
783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}
793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid
813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org__indirect_glTexCoordPointerEXT(GLint size, GLenum type, GLsizei stride,
823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org                                GLsizei count, const GLvoid * pointer)
833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{
843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   (void) count;
853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   __indirect_glTexCoordPointer(size, type, stride, pointer);
863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}
873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid
893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org__indirect_glVertexPointerEXT(GLint size, GLenum type, GLsizei stride,
903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org                              GLsizei count, const GLvoid * pointer)
913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{
923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   (void) count;
933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   __indirect_glVertexPointer(size, type, stride, pointer);
943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}
953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/*@}*/
973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org/*****************************************************************************/
993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
1003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.orgvoid
1013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org__indirect_glInterleavedArrays(GLenum format, GLsizei stride,
1023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org                               const GLvoid * pointer)
1033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org{
104760fd893ba809a7a5daa25c2749ff502f7186e83kbr@chromium.org   struct glx_context *gc = __glXGetCurrentContext();
1053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   __GLXattribute *state = (__GLXattribute *) (gc->client_state_private);
1063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
1073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define NONE  {0, 0, 0}
1083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define F(x)  {GL_FLOAT, x, x * sizeof(GLfloat)}
1093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#define UB4   {GL_UNSIGNED_BYTE, 4, 4 * sizeof(GLubyte)}
1103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
1113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   /* Each row in this array describes the elements of a particular
1123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    * interleaved array mode.  Each column describes, in the order in which
1133a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    * they appear in the interleaved arrays, one of the four possible types
1143a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    * of vertex data that can appear in an interleaved array.
1153a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    */
1163a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   struct
1173a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   {
1183a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org        /**
1193a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 * The enum describing the GL type, as would be passed to the
1203a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 * appropriate gl*Pointer function.
1213a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 */
1223a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      GLushort type;
1233a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
1243a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org        /**
1253a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 * Number of elements in the subarray, as would be passed (as the
1263a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 * \c size parameter) to the appropriate gl*Pointer function.
1273a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 */
1283a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      GLubyte count;
1293a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
1303a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org        /**
1313a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 * True size of a single element in the subarray, as would be passed
1323a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 * (as the \c stride parameter) to the appropriate gl*Pointer
1333a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 * function.
1343a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org	 */
1353a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      GLubyte size;
1363a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
1373a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   static const modes[14][4] = {
1383a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      /* texture color normal vertex */
1393a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      {NONE, NONE, NONE, F(2)}, /* GL_V2F */
1403a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      {NONE, NONE, NONE, F(3)}, /* GL_V3F */
1413a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      {NONE, UB4, NONE, F(2)},  /* GL_C4UB_V2F */
1423a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      {NONE, UB4, NONE, F(3)},  /* GL_C4UB_V3F */
1433a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      {NONE, F(3), NONE, F(3)}, /* GL_C3F_V3F */
1443a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      {NONE, NONE, F(3), F(3)}, /* GL_N3F_V3F */
1453a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      {NONE, F(4), F(3), F(3)}, /* GL_C4F_N3F_V3F */
1463a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      {F(2), NONE, NONE, F(3)}, /* GL_T2F_V3F */
1473a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      {F(4), NONE, NONE, F(4)}, /* GL_T4F_V4F */
1483a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      {F(2), UB4, NONE, F(3)},  /* GL_T2F_C4UB_V3F */
1493a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      {F(2), F(3), NONE, F(3)}, /* GL_T2F_C3F_V3F */
1503a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      {F(2), NONE, F(3), F(3)}, /* GL_T2F_N3F_V3F */
1513a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      {F(2), F(4), F(3), F(3)}, /* GL_T2F_C4F_N3F_V3F */
1523a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      {F(4), F(4), F(3), F(4)}, /* GL_T4F_C4F_N3F_V4F */
1533a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   };
1543a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#undef NONE
1553a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#undef F
1563a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org#undef UB4
1573a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
1583a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   GLint trueStride, size;
1593a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   int offsets[4];
1603a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   unsigned i;
1613a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   const int idx = format - GL_V2F;
1623a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
1633a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
1643a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   /* All valid formats are on the range [GL_V2F, GL_V2F+0x0D].  Since idx
1653a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    * is just the format biased by -GL_V2F, all valid idx values are on the
1663a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    * range [0, 0x0D].
1673a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    */
1683a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if ((idx < 0) || (idx > 0x0D)) {
1693a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      __glXSetError(gc, GL_INVALID_ENUM);
1703a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      return;
1713a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
1723a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
1733a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if (stride < 0) {
1743a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      __glXSetError(gc, GL_INVALID_VALUE);
1753a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      return;
1763a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
1773a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
1783a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
1793a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   /* If the 'count' for a subarray is non-zero, then the offset of its
1803a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    * first element is at the currently accumulated 'size'.
1813a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org    */
1823a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   size = 0;
1833a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   for (i = 0; i < 4; i++) {
1843a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      offsets[i] = (modes[idx][i].count != 0) ? size : -1;
1853a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      size += modes[idx][i].size;
1863a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
1873a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
1883a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   trueStride = (stride == 0) ? size : stride;
1893a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
1903a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   __glXArrayDisableAll(state);
1913a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org
1923a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if (offsets[0] >= 0) {
1933a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      __indirect_glEnableClientState(GL_TEXTURE_COORD_ARRAY);
1943a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      __indirect_glTexCoordPointer(modes[idx][0].count, GL_FLOAT,
1953a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org                                   trueStride, (const char *) pointer);
1963a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
1973a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if (offsets[1] >= 0) {
1983a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      __indirect_glEnableClientState(GL_COLOR_ARRAY);
1993a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      __indirect_glColorPointer(modes[idx][1].count, modes[idx][1].type,
2003a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org                                trueStride,
2013a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org                                (const char *) pointer + offsets[1]);
2023a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
2033a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   if (offsets[2] >= 0) {
2043a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      __indirect_glEnableClientState(GL_NORMAL_ARRAY);
2053a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org      __indirect_glNormalPointer(GL_FLOAT, trueStride,
2063a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org                                 (const char *) pointer + offsets[2]);
2073a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   }
2083a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   __indirect_glEnableClientState(GL_VERTEX_ARRAY);
2093a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org   __indirect_glVertexPointer(modes[idx][3].count, GL_FLOAT,
2103a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org                              trueStride,
2113a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org                              (const char *) pointer + offsets[3]);
2123a0db227ffe90888ad760c61a63226988c974e0apatrick@chromium.org}
213