1 /* $XFree86: xc/lib/GL/glx/vertarr.c,v 1.4 2001/03/25 05:32:00 tsi Exp $ */
3 ** License Applicability. Except to the extent portions of this file are
4 ** made subject to an alternative license as permitted in the SGI Free
5 ** Software License B, Version 1.1 (the "License"), the contents of this
6 ** file are subject only to the provisions of the License. You may not use
7 ** this file except in compliance with the License. You may obtain a copy
8 ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600
9 ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:
11 ** http://oss.sgi.com/projects/FreeB
13 ** Note that, as provided in the License, the Software is distributed on an
14 ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS
15 ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND
16 ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A
17 ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.
19 ** Original Code. The Original Code is: OpenGL Sample Implementation,
20 ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,
21 ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.
22 ** Copyright in any portions created by third parties is as indicated
23 ** elsewhere herein. All Rights Reserved.
25 ** Additional Notice Provisions: The application programming interfaces
26 ** established by SGI in conjunction with the Original Code are The
27 ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released
28 ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version
29 ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X
30 ** Window System(R) (Version 1.3), released October 19, 1998. This software
31 ** was created using the OpenGL(R) version 1.2.1 Sample Implementation
32 ** published by SGI, but has not been independently verified as being
33 ** compliant with the OpenGL(R) version 1.2.1 Specification.
37 #include "glxclient.h"
39 #include "indirect_vertex_array.h"
42 /*****************************************************************************/
45 * \name Vertex array pointer bridge functions
47 * When EXT_vertex_array was moved into the core GL spec, the \c count
48 * parameter was lost. This libGL really only wants to implement the GL 1.1
49 * version, but we need to support applications that were written to the old
50 * interface. These bridge functions are part of the glue that makes this
54 void __indirect_glColorPointerEXT(GLint size
, GLenum type
, GLsizei stride
,
55 GLsizei count
, const GLvoid
* pointer
)
57 (void) count
; __indirect_glColorPointer( size
, type
, stride
, pointer
);
60 void __indirect_glEdgeFlagPointerEXT(GLsizei stride
,
61 GLsizei count
, const GLboolean
* pointer
)
63 (void) count
; __indirect_glEdgeFlagPointer( stride
, pointer
);
66 void __indirect_glIndexPointerEXT(GLenum type
, GLsizei stride
,
67 GLsizei count
, const GLvoid
* pointer
)
69 (void) count
; __indirect_glIndexPointer( type
, stride
, pointer
);
72 void __indirect_glNormalPointerEXT(GLenum type
, GLsizei stride
, GLsizei count
,
73 const GLvoid
* pointer
)
75 (void) count
; __indirect_glNormalPointer( type
, stride
, pointer
);
78 void __indirect_glTexCoordPointerEXT(GLint size
, GLenum type
, GLsizei stride
,
79 GLsizei count
, const GLvoid
* pointer
)
81 (void) count
; __indirect_glTexCoordPointer( size
, type
, stride
, pointer
);
84 void __indirect_glVertexPointerEXT(GLint size
, GLenum type
, GLsizei stride
,
85 GLsizei count
, const GLvoid
* pointer
)
87 (void) count
; __indirect_glVertexPointer( size
, type
, stride
, pointer
);
91 /*****************************************************************************/
93 void __indirect_glInterleavedArrays(GLenum format
, GLsizei stride
, const GLvoid
*pointer
)
95 __GLXcontext
*gc
= __glXGetCurrentContext();
96 __GLXattribute
* state
= (__GLXattribute
*)(gc
->client_state_private
);
97 GLboolean tEnable
= GL_FALSE
, cEnable
= GL_FALSE
, nEnable
= GL_FALSE
;
98 GLenum tType
= GL_FLOAT
, nType
= GL_FLOAT
, vType
= GL_FLOAT
;
99 GLenum cType
= GL_FALSE
;
100 GLint tSize
= 0, cSize
= 0, nSize
= 3, vSize
;
101 int cOffset
= 0, nOffset
= 0, vOffset
= 0;
102 GLint trueStride
, size
;
107 size
= __glXTypeSize(vType
) * vSize
;
111 size
= __glXTypeSize(vType
) * vSize
;
116 cType
= GL_UNSIGNED_BYTE
;
118 vOffset
= __glXTypeSize(cType
) * cSize
;
119 size
= vOffset
+ __glXTypeSize(vType
) * vSize
;
124 cType
= GL_UNSIGNED_BYTE
;
126 vOffset
= __glXTypeSize(vType
) * cSize
;
127 size
= vOffset
+ __glXTypeSize(vType
) * vSize
;
134 vOffset
= __glXTypeSize(cType
) * cSize
;
135 size
= vOffset
+ __glXTypeSize(vType
) * vSize
;
140 vOffset
= __glXTypeSize(nType
) * nSize
;
141 size
= vOffset
+ __glXTypeSize(vType
) * vSize
;
148 nOffset
= __glXTypeSize(cType
) * cSize
;
150 vOffset
= nOffset
+ __glXTypeSize(nType
) * nSize
;
151 size
= vOffset
+ __glXTypeSize(vType
) * vSize
;
157 vOffset
= __glXTypeSize(tType
) * tSize
;
158 size
= vOffset
+ __glXTypeSize(vType
) * vSize
;
164 vOffset
= __glXTypeSize(tType
) * tSize
;
165 size
= vOffset
+ __glXTypeSize(vType
) * vSize
;
167 case GL_T2F_C4UB_V3F
:
172 cType
= GL_UNSIGNED_BYTE
;
173 cOffset
= __glXTypeSize(tType
) * tSize
;
175 vOffset
= cOffset
+ __glXTypeSize(cType
) * cSize
;
176 size
= vOffset
+ __glXTypeSize(vType
) * vSize
;
184 cOffset
= __glXTypeSize(tType
) * tSize
;
186 vOffset
= cOffset
+ __glXTypeSize(cType
) * cSize
;
187 size
= vOffset
+ __glXTypeSize(vType
) * vSize
;
193 nOffset
= __glXTypeSize(tType
) * tSize
;
195 vOffset
= nOffset
+ __glXTypeSize(nType
) * nSize
;
196 size
= vOffset
+ __glXTypeSize(vType
) * vSize
;
198 case GL_T2F_C4F_N3F_V3F
:
204 cOffset
= __glXTypeSize(tType
) * tSize
;
206 nOffset
= cOffset
+ __glXTypeSize(cType
) * cSize
;
208 vOffset
= nOffset
+ __glXTypeSize(nType
) * nSize
;
209 size
= vOffset
+ __glXTypeSize(vType
) * vSize
;
211 case GL_T4F_C4F_N3F_V4F
:
217 cOffset
= __glXTypeSize(tType
) * tSize
;
219 nOffset
= cOffset
+ __glXTypeSize(cType
) * cSize
;
221 vOffset
= nOffset
+ __glXTypeSize(nType
) * nSize
;
222 size
= vOffset
+ __glXTypeSize(vType
) * vSize
;
225 __glXSetError(gc
, GL_INVALID_ENUM
);
229 trueStride
= (stride
== 0) ? size
: stride
;
231 __glXArrayDisableAll( state
);
234 __indirect_glEnableClientState(GL_TEXTURE_COORD_ARRAY
);
235 __indirect_glTexCoordPointer(tSize
, tType
, trueStride
, (const char *)pointer
);
238 __indirect_glEnableClientState(GL_COLOR_ARRAY
);
239 __indirect_glColorPointer(cSize
, cType
, trueStride
, (const char *)pointer
+cOffset
);
242 __indirect_glEnableClientState(GL_NORMAL_ARRAY
);
243 __indirect_glNormalPointer(nType
, trueStride
, (const char *)pointer
+nOffset
);
245 __indirect_glEnableClientState(GL_VERTEX_ARRAY
);
246 __indirect_glVertexPointer(vSize
, vType
, trueStride
, (const char *)pointer
+vOffset
);