xref: /aosp_15_r20/external/deqp/framework/opengl/gluDrawUtil.hpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1*35238bceSAndroid Build Coastguard Worker #ifndef _GLUDRAWUTIL_HPP
2*35238bceSAndroid Build Coastguard Worker #define _GLUDRAWUTIL_HPP
3*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
4*35238bceSAndroid Build Coastguard Worker  * drawElements Quality Program OpenGL Utilities
5*35238bceSAndroid Build Coastguard Worker  * ---------------------------------------------
6*35238bceSAndroid Build Coastguard Worker  *
7*35238bceSAndroid Build Coastguard Worker  * Copyright 2014 The Android Open Source Project
8*35238bceSAndroid Build Coastguard Worker  *
9*35238bceSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
10*35238bceSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
11*35238bceSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
12*35238bceSAndroid Build Coastguard Worker  *
13*35238bceSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
14*35238bceSAndroid Build Coastguard Worker  *
15*35238bceSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
16*35238bceSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
17*35238bceSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18*35238bceSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
19*35238bceSAndroid Build Coastguard Worker  * limitations under the License.
20*35238bceSAndroid Build Coastguard Worker  *
21*35238bceSAndroid Build Coastguard Worker  *//*!
22*35238bceSAndroid Build Coastguard Worker  * \file
23*35238bceSAndroid Build Coastguard Worker  * \brief Draw call utilities.
24*35238bceSAndroid Build Coastguard Worker  *
25*35238bceSAndroid Build Coastguard Worker  * Draw call utilities provide an abstraction for commonly used draw calls.
26*35238bceSAndroid Build Coastguard Worker  * The objective of that abstraction is to allow moving data to buffers
27*35238bceSAndroid Build Coastguard Worker  * and state to VAOs automatically if target context doesn't support
28*35238bceSAndroid Build Coastguard Worker  * user pointers or default VAOs.
29*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
30*35238bceSAndroid Build Coastguard Worker 
31*35238bceSAndroid Build Coastguard Worker #include "gluDefs.hpp"
32*35238bceSAndroid Build Coastguard Worker 
33*35238bceSAndroid Build Coastguard Worker #include <string>
34*35238bceSAndroid Build Coastguard Worker 
35*35238bceSAndroid Build Coastguard Worker namespace glu
36*35238bceSAndroid Build Coastguard Worker {
37*35238bceSAndroid Build Coastguard Worker 
38*35238bceSAndroid Build Coastguard Worker class RenderContext;
39*35238bceSAndroid Build Coastguard Worker 
40*35238bceSAndroid Build Coastguard Worker enum VertexComponentType
41*35238bceSAndroid Build Coastguard Worker {
42*35238bceSAndroid Build Coastguard Worker     // Standard types: all conversion types apply.
43*35238bceSAndroid Build Coastguard Worker     VTX_COMP_UNSIGNED_INT8 = 0,
44*35238bceSAndroid Build Coastguard Worker     VTX_COMP_UNSIGNED_INT16,
45*35238bceSAndroid Build Coastguard Worker     VTX_COMP_UNSIGNED_INT32,
46*35238bceSAndroid Build Coastguard Worker     VTX_COMP_SIGNED_INT8,
47*35238bceSAndroid Build Coastguard Worker     VTX_COMP_SIGNED_INT16,
48*35238bceSAndroid Build Coastguard Worker     VTX_COMP_SIGNED_INT32,
49*35238bceSAndroid Build Coastguard Worker 
50*35238bceSAndroid Build Coastguard Worker     // Special types: only CONVERT_NONE is allowed.
51*35238bceSAndroid Build Coastguard Worker     VTX_COMP_FIXED,
52*35238bceSAndroid Build Coastguard Worker     VTX_COMP_HALF_FLOAT,
53*35238bceSAndroid Build Coastguard Worker     VTX_COMP_FLOAT,
54*35238bceSAndroid Build Coastguard Worker 
55*35238bceSAndroid Build Coastguard Worker     VTX_COMP_TYPE_LAST
56*35238bceSAndroid Build Coastguard Worker };
57*35238bceSAndroid Build Coastguard Worker 
58*35238bceSAndroid Build Coastguard Worker enum VertexComponentConversion
59*35238bceSAndroid Build Coastguard Worker {
60*35238bceSAndroid Build Coastguard Worker     VTX_COMP_CONVERT_NONE = 0,           //!< No conversion: integer types, or floating-point values.
61*35238bceSAndroid Build Coastguard Worker     VTX_COMP_CONVERT_NORMALIZE_TO_FLOAT, //!< Normalize integers to range [0,1] or [-1,1] depending on type.
62*35238bceSAndroid Build Coastguard Worker     VTX_COMP_CONVERT_CAST_TO_FLOAT,      //!< Convert to floating-point directly.
63*35238bceSAndroid Build Coastguard Worker 
64*35238bceSAndroid Build Coastguard Worker     VTX_COMP_CONVERT_LAST
65*35238bceSAndroid Build Coastguard Worker };
66*35238bceSAndroid Build Coastguard Worker 
67*35238bceSAndroid Build Coastguard Worker enum IndexType
68*35238bceSAndroid Build Coastguard Worker {
69*35238bceSAndroid Build Coastguard Worker     INDEXTYPE_UINT8,
70*35238bceSAndroid Build Coastguard Worker     INDEXTYPE_UINT16,
71*35238bceSAndroid Build Coastguard Worker     INDEXTYPE_UINT32,
72*35238bceSAndroid Build Coastguard Worker 
73*35238bceSAndroid Build Coastguard Worker     INDEXTYPE_LAST
74*35238bceSAndroid Build Coastguard Worker };
75*35238bceSAndroid Build Coastguard Worker 
76*35238bceSAndroid Build Coastguard Worker enum PrimitiveType
77*35238bceSAndroid Build Coastguard Worker {
78*35238bceSAndroid Build Coastguard Worker     PRIMITIVETYPE_TRIANGLES = 0,
79*35238bceSAndroid Build Coastguard Worker     PRIMITIVETYPE_TRIANGLE_STRIP,
80*35238bceSAndroid Build Coastguard Worker     PRIMITIVETYPE_TRIANGLE_FAN,
81*35238bceSAndroid Build Coastguard Worker 
82*35238bceSAndroid Build Coastguard Worker     PRIMITIVETYPE_LINES,
83*35238bceSAndroid Build Coastguard Worker     PRIMITIVETYPE_LINE_STRIP,
84*35238bceSAndroid Build Coastguard Worker     PRIMITIVETYPE_LINE_LOOP,
85*35238bceSAndroid Build Coastguard Worker 
86*35238bceSAndroid Build Coastguard Worker     PRIMITIVETYPE_POINTS,
87*35238bceSAndroid Build Coastguard Worker 
88*35238bceSAndroid Build Coastguard Worker     PRIMITIVETYPE_PATCHES,
89*35238bceSAndroid Build Coastguard Worker 
90*35238bceSAndroid Build Coastguard Worker     PRIMITIVETYPE_LAST
91*35238bceSAndroid Build Coastguard Worker };
92*35238bceSAndroid Build Coastguard Worker 
93*35238bceSAndroid Build Coastguard Worker struct BindingPoint
94*35238bceSAndroid Build Coastguard Worker {
95*35238bceSAndroid Build Coastguard Worker     enum Type
96*35238bceSAndroid Build Coastguard Worker     {
97*35238bceSAndroid Build Coastguard Worker         BPTYPE_LOCATION = 0, //!< Binding by numeric location.
98*35238bceSAndroid Build Coastguard Worker         BPTYPE_NAME,         //!< Binding by input name.
99*35238bceSAndroid Build Coastguard Worker 
100*35238bceSAndroid Build Coastguard Worker         BPTYPE_LAST
101*35238bceSAndroid Build Coastguard Worker     };
102*35238bceSAndroid Build Coastguard Worker 
103*35238bceSAndroid Build Coastguard Worker     Type type;        //!< Binding type (name or location).
104*35238bceSAndroid Build Coastguard Worker     std::string name; //!< Input name, or empty if is not binding by name.
105*35238bceSAndroid Build Coastguard Worker     int location;     //!< Input location, or offset to named location if binding by name.
106*35238bceSAndroid Build Coastguard Worker 
BindingPointglu::BindingPoint107*35238bceSAndroid Build Coastguard Worker     BindingPoint(void) : type(BPTYPE_LAST), location(0)
108*35238bceSAndroid Build Coastguard Worker     {
109*35238bceSAndroid Build Coastguard Worker     }
BindingPointglu::BindingPoint110*35238bceSAndroid Build Coastguard Worker     explicit BindingPoint(int location_) : type(BPTYPE_LOCATION), location(location_)
111*35238bceSAndroid Build Coastguard Worker     {
112*35238bceSAndroid Build Coastguard Worker     }
BindingPointglu::BindingPoint113*35238bceSAndroid Build Coastguard Worker     explicit BindingPoint(const std::string &name_, int location_ = 0)
114*35238bceSAndroid Build Coastguard Worker         : type(BPTYPE_NAME)
115*35238bceSAndroid Build Coastguard Worker         , name(name_)
116*35238bceSAndroid Build Coastguard Worker         , location(location_)
117*35238bceSAndroid Build Coastguard Worker     {
118*35238bceSAndroid Build Coastguard Worker     }
119*35238bceSAndroid Build Coastguard Worker };
120*35238bceSAndroid Build Coastguard Worker 
121*35238bceSAndroid Build Coastguard Worker struct VertexArrayPointer
122*35238bceSAndroid Build Coastguard Worker {
123*35238bceSAndroid Build Coastguard Worker     VertexComponentType componentType; //!< Component type.
124*35238bceSAndroid Build Coastguard Worker     VertexComponentConversion convert; //!< Component conversion type.
125*35238bceSAndroid Build Coastguard Worker     int numComponents;                 //!< Number of components per element.
126*35238bceSAndroid Build Coastguard Worker     int numElements;                   //!< Number of elements in total.
127*35238bceSAndroid Build Coastguard Worker     int stride;                        //!< Element stride.
128*35238bceSAndroid Build Coastguard Worker 
129*35238bceSAndroid Build Coastguard Worker     const void *data; //!< Data pointer.
130*35238bceSAndroid Build Coastguard Worker 
VertexArrayPointerglu::VertexArrayPointer131*35238bceSAndroid Build Coastguard Worker     VertexArrayPointer(VertexComponentType componentType_, VertexComponentConversion convert_, int numComponents_,
132*35238bceSAndroid Build Coastguard Worker                        int numElements_, int stride_, const void *data_)
133*35238bceSAndroid Build Coastguard Worker         : componentType(componentType_)
134*35238bceSAndroid Build Coastguard Worker         , convert(convert_)
135*35238bceSAndroid Build Coastguard Worker         , numComponents(numComponents_)
136*35238bceSAndroid Build Coastguard Worker         , numElements(numElements_)
137*35238bceSAndroid Build Coastguard Worker         , stride(stride_)
138*35238bceSAndroid Build Coastguard Worker         , data(data_)
139*35238bceSAndroid Build Coastguard Worker     {
140*35238bceSAndroid Build Coastguard Worker     }
141*35238bceSAndroid Build Coastguard Worker 
VertexArrayPointerglu::VertexArrayPointer142*35238bceSAndroid Build Coastguard Worker     VertexArrayPointer(void)
143*35238bceSAndroid Build Coastguard Worker         : componentType(VTX_COMP_TYPE_LAST)
144*35238bceSAndroid Build Coastguard Worker         , convert(VTX_COMP_CONVERT_LAST)
145*35238bceSAndroid Build Coastguard Worker         , numComponents(0)
146*35238bceSAndroid Build Coastguard Worker         , numElements(0)
147*35238bceSAndroid Build Coastguard Worker         , stride(0)
148*35238bceSAndroid Build Coastguard Worker         , data(0)
149*35238bceSAndroid Build Coastguard Worker     {
150*35238bceSAndroid Build Coastguard Worker     }
151*35238bceSAndroid Build Coastguard Worker } DE_WARN_UNUSED_TYPE;
152*35238bceSAndroid Build Coastguard Worker 
153*35238bceSAndroid Build Coastguard Worker struct VertexArrayBinding
154*35238bceSAndroid Build Coastguard Worker {
155*35238bceSAndroid Build Coastguard Worker     BindingPoint binding;
156*35238bceSAndroid Build Coastguard Worker     VertexArrayPointer pointer;
157*35238bceSAndroid Build Coastguard Worker 
VertexArrayBindingglu::VertexArrayBinding158*35238bceSAndroid Build Coastguard Worker     VertexArrayBinding(const BindingPoint &binding_, const VertexArrayPointer &pointer_)
159*35238bceSAndroid Build Coastguard Worker         : binding(binding_)
160*35238bceSAndroid Build Coastguard Worker         , pointer(pointer_)
161*35238bceSAndroid Build Coastguard Worker     {
162*35238bceSAndroid Build Coastguard Worker     }
163*35238bceSAndroid Build Coastguard Worker 
VertexArrayBindingglu::VertexArrayBinding164*35238bceSAndroid Build Coastguard Worker     VertexArrayBinding(void)
165*35238bceSAndroid Build Coastguard Worker     {
166*35238bceSAndroid Build Coastguard Worker     }
167*35238bceSAndroid Build Coastguard Worker } DE_WARN_UNUSED_TYPE;
168*35238bceSAndroid Build Coastguard Worker 
169*35238bceSAndroid Build Coastguard Worker struct PrimitiveList
170*35238bceSAndroid Build Coastguard Worker {
171*35238bceSAndroid Build Coastguard Worker     PrimitiveType type;  //!< Primitive type.
172*35238bceSAndroid Build Coastguard Worker     int numElements;     //!< Number of elements to be drawn.
173*35238bceSAndroid Build Coastguard Worker     IndexType indexType; //!< Index type or INDEXTYPE_LAST if not used
174*35238bceSAndroid Build Coastguard Worker     const void *indices; //!< Index list or DE_NULL if not used.
175*35238bceSAndroid Build Coastguard Worker 
PrimitiveListglu::PrimitiveList176*35238bceSAndroid Build Coastguard Worker     PrimitiveList(PrimitiveType type_, int numElements_)
177*35238bceSAndroid Build Coastguard Worker         : type(type_)
178*35238bceSAndroid Build Coastguard Worker         , numElements(numElements_)
179*35238bceSAndroid Build Coastguard Worker         , indexType(INDEXTYPE_LAST)
180*35238bceSAndroid Build Coastguard Worker         , indices(0)
181*35238bceSAndroid Build Coastguard Worker     {
182*35238bceSAndroid Build Coastguard Worker     }
183*35238bceSAndroid Build Coastguard Worker 
PrimitiveListglu::PrimitiveList184*35238bceSAndroid Build Coastguard Worker     PrimitiveList(PrimitiveType type_, int numElements_, IndexType indexType_, const void *indices_)
185*35238bceSAndroid Build Coastguard Worker         : type(type_)
186*35238bceSAndroid Build Coastguard Worker         , numElements(numElements_)
187*35238bceSAndroid Build Coastguard Worker         , indexType(indexType_)
188*35238bceSAndroid Build Coastguard Worker         , indices(indices_)
189*35238bceSAndroid Build Coastguard Worker     {
190*35238bceSAndroid Build Coastguard Worker     }
191*35238bceSAndroid Build Coastguard Worker 
PrimitiveListglu::PrimitiveList192*35238bceSAndroid Build Coastguard Worker     PrimitiveList(void) : type(PRIMITIVETYPE_LAST), numElements(0), indexType(INDEXTYPE_LAST), indices(0)
193*35238bceSAndroid Build Coastguard Worker     {
194*35238bceSAndroid Build Coastguard Worker     }
195*35238bceSAndroid Build Coastguard Worker } DE_WARN_UNUSED_TYPE;
196*35238bceSAndroid Build Coastguard Worker 
197*35238bceSAndroid Build Coastguard Worker class DrawUtilCallback
198*35238bceSAndroid Build Coastguard Worker {
199*35238bceSAndroid Build Coastguard Worker public:
beforeDrawCall(void)200*35238bceSAndroid Build Coastguard Worker     virtual void beforeDrawCall(void)
201*35238bceSAndroid Build Coastguard Worker     {
202*35238bceSAndroid Build Coastguard Worker     }
afterDrawCall(void)203*35238bceSAndroid Build Coastguard Worker     virtual void afterDrawCall(void)
204*35238bceSAndroid Build Coastguard Worker     {
205*35238bceSAndroid Build Coastguard Worker     }
206*35238bceSAndroid Build Coastguard Worker };
207*35238bceSAndroid Build Coastguard Worker 
208*35238bceSAndroid Build Coastguard Worker void draw(const RenderContext &context, uint32_t program, int numVertexArrays, const VertexArrayBinding *vertexArrays,
209*35238bceSAndroid Build Coastguard Worker           const PrimitiveList &primitives, DrawUtilCallback *callback = DE_NULL);
210*35238bceSAndroid Build Coastguard Worker 
211*35238bceSAndroid Build Coastguard Worker void drawFromUserPointers(const RenderContext &context, uint32_t program, int numVertexArrays,
212*35238bceSAndroid Build Coastguard Worker                           const VertexArrayBinding *vertexArrays, const PrimitiveList &primitives,
213*35238bceSAndroid Build Coastguard Worker                           DrawUtilCallback *callback = DE_NULL);
214*35238bceSAndroid Build Coastguard Worker void drawFromBuffers(const RenderContext &context, uint32_t program, int numVertexArrays,
215*35238bceSAndroid Build Coastguard Worker                      const VertexArrayBinding *vertexArrays, const PrimitiveList &primitives,
216*35238bceSAndroid Build Coastguard Worker                      DrawUtilCallback *callback = DE_NULL);
217*35238bceSAndroid Build Coastguard Worker void drawFromVAOBuffers(const RenderContext &context, uint32_t program, int numVertexArrays,
218*35238bceSAndroid Build Coastguard Worker                         const VertexArrayBinding *vertexArrays, const PrimitiveList &primitives,
219*35238bceSAndroid Build Coastguard Worker                         DrawUtilCallback *callback = DE_NULL);
220*35238bceSAndroid Build Coastguard Worker 
221*35238bceSAndroid Build Coastguard Worker // Shorthands for PrimitiveList
222*35238bceSAndroid Build Coastguard Worker namespace pr
223*35238bceSAndroid Build Coastguard Worker {
224*35238bceSAndroid Build Coastguard Worker 
225*35238bceSAndroid Build Coastguard Worker #define DECLARE_PR_CTOR(NAME, TYPE)                                         \
226*35238bceSAndroid Build Coastguard Worker     inline PrimitiveList NAME(int numElements)                              \
227*35238bceSAndroid Build Coastguard Worker     {                                                                       \
228*35238bceSAndroid Build Coastguard Worker         return PrimitiveList(TYPE, numElements);                            \
229*35238bceSAndroid Build Coastguard Worker     }                                                                       \
230*35238bceSAndroid Build Coastguard Worker     inline PrimitiveList NAME(int numElements, const uint8_t *indices)      \
231*35238bceSAndroid Build Coastguard Worker     {                                                                       \
232*35238bceSAndroid Build Coastguard Worker         return PrimitiveList(TYPE, numElements, INDEXTYPE_UINT8, indices);  \
233*35238bceSAndroid Build Coastguard Worker     }                                                                       \
234*35238bceSAndroid Build Coastguard Worker     inline PrimitiveList NAME(int numElements, const uint16_t *indices)     \
235*35238bceSAndroid Build Coastguard Worker     {                                                                       \
236*35238bceSAndroid Build Coastguard Worker         return PrimitiveList(TYPE, numElements, INDEXTYPE_UINT16, indices); \
237*35238bceSAndroid Build Coastguard Worker     }                                                                       \
238*35238bceSAndroid Build Coastguard Worker     inline PrimitiveList NAME(int numElements, const uint32_t *indices)     \
239*35238bceSAndroid Build Coastguard Worker     {                                                                       \
240*35238bceSAndroid Build Coastguard Worker         return PrimitiveList(TYPE, numElements, INDEXTYPE_UINT32, indices); \
241*35238bceSAndroid Build Coastguard Worker     }                                                                       \
242*35238bceSAndroid Build Coastguard Worker     struct DeclarePRCtor##NAME##Unused_s                                    \
243*35238bceSAndroid Build Coastguard Worker     {                                                                       \
244*35238bceSAndroid Build Coastguard Worker         int unused;                                                         \
245*35238bceSAndroid Build Coastguard Worker     }
246*35238bceSAndroid Build Coastguard Worker 
247*35238bceSAndroid Build Coastguard Worker DECLARE_PR_CTOR(Triangles, PRIMITIVETYPE_TRIANGLES);
248*35238bceSAndroid Build Coastguard Worker DECLARE_PR_CTOR(TriangleStrip, PRIMITIVETYPE_TRIANGLE_STRIP);
249*35238bceSAndroid Build Coastguard Worker DECLARE_PR_CTOR(TriangleFan, PRIMITIVETYPE_TRIANGLE_FAN);
250*35238bceSAndroid Build Coastguard Worker 
251*35238bceSAndroid Build Coastguard Worker DECLARE_PR_CTOR(Lines, PRIMITIVETYPE_LINES);
252*35238bceSAndroid Build Coastguard Worker DECLARE_PR_CTOR(LineStrip, PRIMITIVETYPE_LINE_STRIP);
253*35238bceSAndroid Build Coastguard Worker DECLARE_PR_CTOR(LineLineLoop, PRIMITIVETYPE_LINE_LOOP);
254*35238bceSAndroid Build Coastguard Worker 
255*35238bceSAndroid Build Coastguard Worker DECLARE_PR_CTOR(Points, PRIMITIVETYPE_POINTS);
256*35238bceSAndroid Build Coastguard Worker 
257*35238bceSAndroid Build Coastguard Worker DECLARE_PR_CTOR(Patches, PRIMITIVETYPE_PATCHES);
258*35238bceSAndroid Build Coastguard Worker 
259*35238bceSAndroid Build Coastguard Worker } // namespace pr
260*35238bceSAndroid Build Coastguard Worker 
261*35238bceSAndroid Build Coastguard Worker // Shorthands for VertexArrayBinding
262*35238bceSAndroid Build Coastguard Worker namespace va
263*35238bceSAndroid Build Coastguard Worker {
264*35238bceSAndroid Build Coastguard Worker 
265*35238bceSAndroid Build Coastguard Worker #define DECLARE_VA_CTOR(NAME, DATATYPE, TYPE, CONVERT)                                                                 \
266*35238bceSAndroid Build Coastguard Worker     inline VertexArrayBinding NAME(const std::string &name, int offset, int numComponents, int numElements,            \
267*35238bceSAndroid Build Coastguard Worker                                    int stride, const DATATYPE *data)                                                   \
268*35238bceSAndroid Build Coastguard Worker     {                                                                                                                  \
269*35238bceSAndroid Build Coastguard Worker         return VertexArrayBinding(BindingPoint(name, offset),                                                          \
270*35238bceSAndroid Build Coastguard Worker                                   VertexArrayPointer(TYPE, CONVERT, numComponents, numElements, stride, data));        \
271*35238bceSAndroid Build Coastguard Worker     }                                                                                                                  \
272*35238bceSAndroid Build Coastguard Worker     inline VertexArrayBinding NAME(const std::string &name, int numComponents, int numElements, int stride,            \
273*35238bceSAndroid Build Coastguard Worker                                    const DATATYPE *data)                                                               \
274*35238bceSAndroid Build Coastguard Worker     {                                                                                                                  \
275*35238bceSAndroid Build Coastguard Worker         return NAME(name, 0, numComponents, numElements, stride, data);                                                \
276*35238bceSAndroid Build Coastguard Worker     }                                                                                                                  \
277*35238bceSAndroid Build Coastguard Worker     inline VertexArrayBinding NAME(int location, int numComponents, int numElements, int stride, const DATATYPE *data) \
278*35238bceSAndroid Build Coastguard Worker     {                                                                                                                  \
279*35238bceSAndroid Build Coastguard Worker         return VertexArrayBinding(BindingPoint(location),                                                              \
280*35238bceSAndroid Build Coastguard Worker                                   VertexArrayPointer(TYPE, CONVERT, numComponents, numElements, stride, data));        \
281*35238bceSAndroid Build Coastguard Worker     }                                                                                                                  \
282*35238bceSAndroid Build Coastguard Worker     struct DeclareVACtor##NAME##Unused_s                                                                               \
283*35238bceSAndroid Build Coastguard Worker     {                                                                                                                  \
284*35238bceSAndroid Build Coastguard Worker         int unused;                                                                                                    \
285*35238bceSAndroid Build Coastguard Worker     }
286*35238bceSAndroid Build Coastguard Worker 
287*35238bceSAndroid Build Coastguard Worker // Integer types
288*35238bceSAndroid Build Coastguard Worker DECLARE_VA_CTOR(Uint8, uint8_t, VTX_COMP_UNSIGNED_INT8, VTX_COMP_CONVERT_NONE);
289*35238bceSAndroid Build Coastguard Worker DECLARE_VA_CTOR(Uint16, uint16_t, VTX_COMP_UNSIGNED_INT16, VTX_COMP_CONVERT_NONE);
290*35238bceSAndroid Build Coastguard Worker DECLARE_VA_CTOR(Uint32, uint32_t, VTX_COMP_UNSIGNED_INT32, VTX_COMP_CONVERT_NONE);
291*35238bceSAndroid Build Coastguard Worker DECLARE_VA_CTOR(Int8, int8_t, VTX_COMP_SIGNED_INT8, VTX_COMP_CONVERT_NONE);
292*35238bceSAndroid Build Coastguard Worker DECLARE_VA_CTOR(Int16, int16_t, VTX_COMP_SIGNED_INT16, VTX_COMP_CONVERT_NONE);
293*35238bceSAndroid Build Coastguard Worker DECLARE_VA_CTOR(Int32, int32_t, VTX_COMP_SIGNED_INT32, VTX_COMP_CONVERT_NONE);
294*35238bceSAndroid Build Coastguard Worker 
295*35238bceSAndroid Build Coastguard Worker // Normalized integers.
296*35238bceSAndroid Build Coastguard Worker DECLARE_VA_CTOR(Unorm8, uint8_t, VTX_COMP_UNSIGNED_INT8, VTX_COMP_CONVERT_NORMALIZE_TO_FLOAT);
297*35238bceSAndroid Build Coastguard Worker DECLARE_VA_CTOR(Unorm16, uint16_t, VTX_COMP_UNSIGNED_INT16, VTX_COMP_CONVERT_NORMALIZE_TO_FLOAT);
298*35238bceSAndroid Build Coastguard Worker DECLARE_VA_CTOR(Unorm32, uint32_t, VTX_COMP_UNSIGNED_INT32, VTX_COMP_CONVERT_NORMALIZE_TO_FLOAT);
299*35238bceSAndroid Build Coastguard Worker DECLARE_VA_CTOR(Snorm8, int8_t, VTX_COMP_SIGNED_INT8, VTX_COMP_CONVERT_NORMALIZE_TO_FLOAT);
300*35238bceSAndroid Build Coastguard Worker DECLARE_VA_CTOR(Snorm16, int16_t, VTX_COMP_SIGNED_INT16, VTX_COMP_CONVERT_NORMALIZE_TO_FLOAT);
301*35238bceSAndroid Build Coastguard Worker DECLARE_VA_CTOR(Snorm32, int32_t, VTX_COMP_SIGNED_INT32, VTX_COMP_CONVERT_NORMALIZE_TO_FLOAT);
302*35238bceSAndroid Build Coastguard Worker 
303*35238bceSAndroid Build Coastguard Worker // Integers converted to float.
304*35238bceSAndroid Build Coastguard Worker DECLARE_VA_CTOR(Uint8Float, uint8_t, VTX_COMP_UNSIGNED_INT8, VTX_COMP_CONVERT_CAST_TO_FLOAT);
305*35238bceSAndroid Build Coastguard Worker DECLARE_VA_CTOR(Uint16Float, uint16_t, VTX_COMP_UNSIGNED_INT16, VTX_COMP_CONVERT_CAST_TO_FLOAT);
306*35238bceSAndroid Build Coastguard Worker DECLARE_VA_CTOR(Uint32Float, uint32_t, VTX_COMP_UNSIGNED_INT32, VTX_COMP_CONVERT_CAST_TO_FLOAT);
307*35238bceSAndroid Build Coastguard Worker DECLARE_VA_CTOR(Int8Float, int8_t, VTX_COMP_SIGNED_INT8, VTX_COMP_CONVERT_CAST_TO_FLOAT);
308*35238bceSAndroid Build Coastguard Worker DECLARE_VA_CTOR(Int16Float, int16_t, VTX_COMP_SIGNED_INT16, VTX_COMP_CONVERT_CAST_TO_FLOAT);
309*35238bceSAndroid Build Coastguard Worker DECLARE_VA_CTOR(Int32Float, int32_t, VTX_COMP_SIGNED_INT32, VTX_COMP_CONVERT_CAST_TO_FLOAT);
310*35238bceSAndroid Build Coastguard Worker 
311*35238bceSAndroid Build Coastguard Worker // Special types.
312*35238bceSAndroid Build Coastguard Worker DECLARE_VA_CTOR(Fixed, void, VTX_COMP_FIXED, VTX_COMP_CONVERT_NONE);
313*35238bceSAndroid Build Coastguard Worker DECLARE_VA_CTOR(Half, void, VTX_COMP_HALF_FLOAT, VTX_COMP_CONVERT_NONE);
314*35238bceSAndroid Build Coastguard Worker DECLARE_VA_CTOR(Float, float, VTX_COMP_FLOAT, VTX_COMP_CONVERT_NONE);
315*35238bceSAndroid Build Coastguard Worker 
316*35238bceSAndroid Build Coastguard Worker #undef DECLARE_VA_CTOR
317*35238bceSAndroid Build Coastguard Worker 
318*35238bceSAndroid Build Coastguard Worker } // namespace va
319*35238bceSAndroid Build Coastguard Worker 
320*35238bceSAndroid Build Coastguard Worker } // namespace glu
321*35238bceSAndroid Build Coastguard Worker 
322*35238bceSAndroid Build Coastguard Worker #endif // _GLUDRAWUTIL_HPP
323