]> git.cworth.org Git - vogl/blob - src/vogleditor/vogleditor_statetreecontextgeneralitem.cpp
UI: Add support for the indexed variant of GL_BLEND
[vogl] / src / vogleditor / vogleditor_statetreecontextgeneralitem.cpp
1 #include "vogleditor_statetreecontextgeneralitem.h"
2 #include "vogl_general_context_state.h"
3
4 vogleditor_stateTreeContextGeneralCompressTextureFormatItem::vogleditor_stateTreeContextGeneralCompressTextureFormatItem(QString glenumName, GLenum name, unsigned int index, const vogl_state_vector& stateVec, int formatEnum, unsigned int numComponents, bool isIndexed, vogleditor_stateTreeItem* parent)
5    : vogleditor_stateTreeDatatypeItem<int>(glenumName, name, index, stateVec, numComponents, isIndexed, parent),
6      m_formatEnum(formatEnum),
7      m_pDiffBaseGeneralState(NULL)
8 {
9     static QString tmp;
10
11     switch(numComponents)
12     {
13     case 1:
14         setValue(enum_to_string(m_formatEnum));
15         break;
16     default:
17         VOGL_ASSERT(!"Unhandled component count in vogleditor_stateTreeContextGeneralCompressTextureFormatItem");
18         break;
19     }
20 }
21
22 bool vogleditor_stateTreeContextGeneralCompressTextureFormatItem::hasChanged() const
23 {
24     if (m_pDiffBaseGeneralState == NULL)
25         return false;
26
27     int base_num_formats = 0;
28     m_pDiffBaseGeneralState->get(GL_NUM_COMPRESSED_TEXTURE_FORMATS, 0, &base_num_formats);
29
30     if (base_num_formats == 0)
31     {
32         // the base had no formats, so any existing items are new.
33         return true;
34     }
35
36     int* pFormats = vogl_new_array(int, base_num_formats);
37     if (m_pDiffBaseGeneralState->get<int>(GL_COMPRESSED_TEXTURE_FORMATS, 0, pFormats, base_num_formats))
38     {
39         // search for the current format in the list of base formats
40        for(int i = 0; i < base_num_formats; i++)
41        {
42            if (m_formatEnum == pFormats[i])
43            {
44                // the format was found, so consider this as unchanged
45                vogl_delete_array(pFormats);
46                return false;
47            }
48        }
49
50        // the format was not found, consider it as changed
51        vogl_delete_array(pFormats);
52        return true;
53     }
54     else
55     {
56         // the enum must have been added, so it is changed
57         vogl_delete_array(pFormats);
58         return true;
59     }
60     vogl_delete_array(pFormats);
61     return false;
62 }
63
64 //=============================================================================
65
66 vogleditor_stateTreeContextGeneralItem::vogleditor_stateTreeContextGeneralItem(QString name, QString value, vogleditor_stateTreeItem* parent, vogl_general_context_state& generalState, const vogl_context_info& info)
67     : vogleditor_stateTreeItem(name, value, parent),
68       m_pState(&generalState),
69       m_pDiffBaseState(NULL)
70 {
71     float fVals[16];
72     int iVals[16];
73     bool bVals[4];
74
75     memset(fVals, 0, sizeof(fVals));
76     memset(iVals, 0, sizeof(iVals));
77     memset(bVals, 0, sizeof(bVals));
78
79     QString tmp;
80
81 #define GET_PTR(name, num) if (generalState.get<int>(name, 0, iVals, num)) { vogleditor_stateTreeStateVecPtrItem* pPtrItem = new vogleditor_stateTreeStateVecPtrItem(#name, name, 0, generalState, iVals, num, false, this); this->m_diffableItems.push_back(pPtrItem); this->appendChild(pPtrItem); }
82 #define GET_BOOL(name, num) if (generalState.get<bool>(name, 0, bVals, num)) { vogleditor_stateTreeStateVecBoolItem* pBoolItem = new vogleditor_stateTreeStateVecBoolItem(#name, name, 0, generalState, bVals, num, false, this); this->m_diffableItems.push_back(pBoolItem); this->appendChild(pBoolItem); }
83 #define GET_INT(name, num) if (generalState.get<int>(name, 0, iVals, num)) { vogleditor_stateTreeStateVecIntItem* pIntItem = new vogleditor_stateTreeStateVecIntItem(#name, name, 0, generalState, iVals, num, false, this); this->m_diffableItems.push_back(pIntItem); this->appendChild(pIntItem); }
84 #define GET_ENUM(name, num) if (generalState.get<int>(name, 0, iVals, num)) { vogleditor_stateTreeStateVecEnumItem* pEnumItem = new vogleditor_stateTreeStateVecEnumItem(#name, name, 0, generalState, iVals, num, false, this); this->m_diffableItems.push_back(pEnumItem); this->appendChild(pEnumItem); }
85 #define GET_FLOAT(name, num) if (generalState.get<float>(name, 0, fVals, num)) { vogleditor_stateTreeStateVecFloatItem* pFloatItem = new vogleditor_stateTreeStateVecFloatItem(#name, name, 0, generalState, fVals, num, false, this); this->m_diffableItems.push_back(pFloatItem); this->appendChild(pFloatItem); }
86
87 #define GET_MATRIX(name, num) if (generalState.get<float>(name, 0, fVals, num)) {\
88     vogleditor_stateTreeStateVecMatrixItem* pMatrixNode = new vogleditor_stateTreeStateVecMatrixItem(#name, name, 0, generalState, fVals, num, false, this);\
89     this->m_diffableItems.push_back(pMatrixNode);\
90     this->appendChild(pMatrixNode); }
91
92 #define STR_INT(val) tmp.sprintf("%d", val)
93
94     // TODO: Properly support diffing indexed state
95 #define GET_INDEXED_INT(name, num, totalIndices) if (totalIndices > 0) {vogleditor_stateTreeItem* pNode = new vogleditor_stateTreeItem(#name, "", this);\
96     for (int i = 0; i < totalIndices; i++) {\
97         if (generalState.get<int>(name, i, iVals, num, true)) {\
98             vogleditor_stateTreeStateVecIntItem* pIntItem = new vogleditor_stateTreeStateVecIntItem(STR_INT(i), name, i, generalState, &(iVals[i]), num, true, pNode);\
99             this->m_diffableItems.push_back(pIntItem);\
100             pNode->appendChild(pIntItem); }\
101     } pNode->setValue(tmp.sprintf("[%d]", pNode->childCount())); this->appendChild(pNode);}
102
103 #define GET_INDEXED_BOOL(name, num, totalIndices) if (totalIndices > 0) {vogleditor_stateTreeItem* pNode = new vogleditor_stateTreeItem(#name, "", this);\
104     for (int i = 0; i < totalIndices; i++) {\
105         if (generalState.get<bool>(name, i, bVals, num, true)) {\
106             vogleditor_stateTreeStateVecBoolItem* pBoolItem = new vogleditor_stateTreeStateVecBoolItem(STR_INT(i), name, i, generalState, &(bVals[i]), num, true, pNode);\
107             this->m_diffableItems.push_back(pBoolItem);\
108             pNode->appendChild(pBoolItem); }\
109     } pNode->setValue(tmp.sprintf("[%d]", pNode->childCount())); this->appendChild(pNode);}
110
111     // Start of version 1.0 - 2.1
112     GET_INT(GL_ACCUM_ALPHA_BITS, 1);
113     GET_INT(GL_ACCUM_BLUE_BITS, 1);
114     GET_INT(GL_ACCUM_GREEN_BITS, 1);
115     GET_INT(GL_ACCUM_RED_BITS, 1);
116     GET_FLOAT(GL_ACCUM_CLEAR_VALUE, 4);
117     GET_ENUM(GL_ACTIVE_TEXTURE, 1);
118     GET_FLOAT(GL_ALIASED_LINE_WIDTH_RANGE, 2);
119     GET_FLOAT(GL_ALIASED_POINT_SIZE_RANGE, 2);
120     GET_FLOAT(GL_ALPHA_BIAS, 1);
121     GET_INT(GL_ALPHA_BITS, 1);
122     GET_FLOAT(GL_ALPHA_SCALE, 1);
123     GET_BOOL(GL_ALPHA_TEST, 1);
124     GET_ENUM(GL_ALPHA_TEST_FUNC, 1);
125     GET_FLOAT(GL_ALPHA_TEST_REF, 1);
126     GET_INT(GL_ARRAY_BUFFER_BINDING, 1);
127     GET_INT(GL_ATOMIC_COUNTER_BUFFER_BINDING, 1);
128     GET_INT(GL_ATTRIB_STACK_DEPTH, 1);
129     GET_BOOL(GL_AUTO_NORMAL, 1);
130     GET_INT(GL_AUX_BUFFERS, 1);
131
132     GET_BOOL(GL_BLEND, 1);
133     int maxDrawBuffers = info.get_max_draw_buffers();
134     GET_INDEXED_BOOL(GL_BLEND, 1, maxDrawBuffers);
135     GET_FLOAT(GL_BLEND_COLOR, 4);
136     GET_ENUM(GL_BLEND_DST, 1);
137     GET_ENUM(GL_BLEND_DST_ALPHA, 1);
138     GET_ENUM(GL_BLEND_DST_RGB, 1);
139     GET_ENUM(GL_BLEND_EQUATION_ALPHA, 1);
140     GET_ENUM(GL_BLEND_EQUATION_RGB, 1);
141     GET_ENUM(GL_BLEND_SRC, 1);
142     GET_ENUM(GL_BLEND_SRC_ALPHA, 1);
143     GET_ENUM(GL_BLEND_SRC_RGB, 1);
144     GET_FLOAT(GL_BLUE_BIAS, 1);
145     GET_INT(GL_BLUE_BITS, 1);
146     GET_FLOAT(GL_BLUE_SCALE, 1);
147
148     GET_INT(GL_CLIENT_ACTIVE_TEXTURE, 1);
149     GET_INT(GL_CLIENT_ATTRIB_STACK_DEPTH, 1);
150     GET_BOOL(GL_CLIP_PLANE0, 1);
151     GET_BOOL(GL_CLIP_PLANE1, 1);
152     GET_BOOL(GL_CLIP_PLANE2, 1);
153     GET_BOOL(GL_CLIP_PLANE3, 1);
154     GET_BOOL(GL_CLIP_PLANE4, 1);
155     GET_BOOL(GL_CLIP_PLANE5, 1);
156     GET_BOOL(GL_CLIP_DISTANCE6, 1);
157     GET_BOOL(GL_CLIP_DISTANCE7, 1);
158     GET_FLOAT(GL_COLOR_CLEAR_VALUE, 4);
159     GET_BOOL(GL_COLOR_LOGIC_OP, 1);
160     GET_BOOL(GL_COLOR_MATERIAL, 1);
161     GET_ENUM(GL_COLOR_MATERIAL_FACE, 1);
162     GET_ENUM(GL_COLOR_MATERIAL_PARAMETER, 1);
163     GET_BOOL(GL_COLOR_ARRAY, 1);
164     GET_INT(GL_COLOR_ARRAY_BUFFER_BINDING, 1);
165     GET_PTR(GL_COLOR_ARRAY_POINTER, 1);
166     GET_INT(GL_COLOR_ARRAY_SIZE, 1);
167     GET_INT(GL_COLOR_ARRAY_STRIDE, 1);
168     GET_ENUM(GL_COLOR_ARRAY_TYPE, 1);
169     GET_MATRIX(GL_COLOR_MATRIX, 16);
170     GET_INT(GL_COLOR_MATRIX_STACK_DEPTH, 1);
171     GET_BOOL(GL_COLOR_SUM, 1);
172     GET_BOOL(GL_COLOR_SUM_ARB, 1);
173     GET_BOOL(GL_COLOR_TABLE, 1);
174     GET_BOOL(GL_COLOR_WRITEMASK, 4);
175
176     GET_INT(GL_NUM_COMPRESSED_TEXTURE_FORMATS, 1);
177
178     int num_compressed_texture_formats = 0;
179     if (generalState.get(GL_NUM_COMPRESSED_TEXTURE_FORMATS, 0, &num_compressed_texture_formats))
180     {
181         if (num_compressed_texture_formats > 0)
182         {
183             int* pFormats = vogl_new_array(int, num_compressed_texture_formats);
184             if (generalState.get<int>(GL_COMPRESSED_TEXTURE_FORMATS, 0, pFormats, num_compressed_texture_formats))
185             {
186                 vogleditor_stateTreeItem* pNode = new vogleditor_stateTreeItem("GL_COMPRESSED_TEXTURE_FORMATS", tmp.sprintf("[%d]", num_compressed_texture_formats), this);
187                 for (int i = 0; i < num_compressed_texture_formats; i++)
188                 {
189                     vogleditor_stateTreeContextGeneralCompressTextureFormatItem* pEnumItem = new vogleditor_stateTreeContextGeneralCompressTextureFormatItem(STR_INT(i), GL_COMPRESSED_TEXTURE_FORMATS, i, generalState, pFormats[i], 1, true, pNode);
190                     m_formatItems.push_back(pEnumItem);
191                     pNode->appendChild(pEnumItem);
192                 }
193                 this->appendChild(pNode);
194             }
195             vogl_delete_array(pFormats);
196         }
197     }
198
199     GET_INT(GL_CONTEXT_FLAGS, 1);
200     GET_BOOL(GL_CONVOLUTION_1D, 1);
201     GET_BOOL(GL_CONVOLUTION_2D, 1);
202     GET_INT(GL_COPY_READ_BUFFER_BINDING, 1);
203     GET_INT(GL_COPY_WRITE_BUFFER_BINDING, 1);
204     GET_BOOL(GL_CULL_FACE, 1);
205     GET_ENUM(GL_CULL_FACE_MODE, 1);
206     GET_FLOAT(GL_CURRENT_COLOR, 4);
207     GET_FLOAT(GL_CURRENT_FOG_COORD, 1);
208     GET_FLOAT(GL_CURRENT_INDEX, 1);
209     GET_FLOAT(GL_CURRENT_NORMAL, 3);
210     GET_INT(GL_CURRENT_PROGRAM, 1);
211     GET_FLOAT(GL_CURRENT_RASTER_COLOR, 4);
212     GET_FLOAT(GL_CURRENT_RASTER_DISTANCE, 1);
213     GET_FLOAT(GL_CURRENT_RASTER_INDEX, 1);
214     GET_FLOAT(GL_CURRENT_RASTER_POSITION, 4);
215     GET_FLOAT(GL_CURRENT_RASTER_SECONDARY_COLOR, 4);
216     GET_INT(GL_CURRENT_RASTER_POSITION_VALID, 1);
217     GET_FLOAT(GL_CURRENT_SECONDARY_COLOR, 4);
218
219     GET_INT(GL_DEBUG_GROUP_STACK_DEPTH, 1);
220     GET_BOOL(GL_DEPTH_CLAMP, 1);
221     GET_FLOAT(GL_DEPTH_BIAS, 1);
222     GET_INT(GL_DEPTH_BITS, 1);
223     GET_FLOAT(GL_DEPTH_SCALE, 1);
224     GET_FLOAT(GL_DEPTH_CLEAR_VALUE, 1);
225     GET_ENUM(GL_DEPTH_FUNC, 1);
226     GET_FLOAT(GL_DEPTH_RANGE, 2);
227     GET_BOOL(GL_DEPTH_TEST, 1);
228     GET_BOOL(GL_DEPTH_WRITEMASK, 1);
229     GET_INT(GL_DISPATCH_INDIRECT_BUFFER_BINDING, 1);
230     GET_BOOL(GL_DITHER, 1);
231     GET_BOOL(GL_DOUBLEBUFFER, 1);
232     GET_ENUM(GL_DRAW_BUFFER, 1);
233     GET_ENUM(GL_DRAW_BUFFER0, 1);
234     GET_ENUM(GL_DRAW_BUFFER1, 1);
235     GET_ENUM(GL_DRAW_BUFFER2, 1);
236     GET_ENUM(GL_DRAW_BUFFER3, 1);
237     GET_ENUM(GL_DRAW_BUFFER4, 1);
238     GET_ENUM(GL_DRAW_BUFFER5, 1);
239     GET_ENUM(GL_DRAW_BUFFER6, 1);
240     GET_ENUM(GL_DRAW_BUFFER7, 1);
241     GET_ENUM(GL_DRAW_BUFFER8, 1);
242     GET_ENUM(GL_DRAW_BUFFER9, 1);
243     GET_INT(GL_DRAW_FRAMEBUFFER_BINDING, 1);
244     GET_INT(GL_DRAW_INDIRECT_BUFFER_BINDING, 1);
245
246     GET_BOOL(GL_EDGE_FLAG, 1);
247     GET_BOOL(GL_EDGE_FLAG_ARRAY, 1);
248     GET_INT(GL_EDGE_FLAG_ARRAY_BUFFER_BINDING, 1);
249     GET_PTR(GL_EDGE_FLAG_ARRAY_POINTER, 1);
250     GET_INT(GL_EDGE_FLAG_ARRAY_STRIDE, 1);
251     GET_INT(GL_ELEMENT_ARRAY_BUFFER_BINDING, 1);
252
253     GET_PTR(GL_FEEDBACK_BUFFER_POINTER, 1);
254     GET_INT(GL_FEEDBACK_BUFFER_SIZE, 1);
255     GET_ENUM(GL_FEEDBACK_BUFFER_TYPE, 1);
256     GET_BOOL(GL_FOG, 1);
257     GET_FLOAT(GL_FOG_COLOR, 4);
258     GET_BOOL(GL_FOG_COORD_ARRAY, 1);
259     GET_INT(GL_FOG_COORD_ARRAY_BUFFER_BINDING, 1);
260     GET_PTR(GL_FOG_COORD_ARRAY_POINTER, 1);
261     GET_INT(GL_FOG_COORD_ARRAY_STRIDE, 1);
262     GET_ENUM(GL_FOG_COORD_ARRAY_TYPE, 1);
263     GET_ENUM(GL_FOG_COORD_SRC, 1);
264     GET_FLOAT(GL_FOG_DENSITY, 1);
265     GET_FLOAT(GL_FOG_END, 1);
266     GET_ENUM(GL_FOG_HINT, 1);
267     GET_INT(GL_FOG_INDEX, 1);
268     GET_ENUM(GL_FOG_MODE, 1);
269     GET_FLOAT(GL_FOG_START, 1);
270     GET_BOOL(GL_FRAGMENT_PROGRAM_ARB, 1);
271     GET_ENUM(GL_FRAGMENT_SHADER_DERIVATIVE_HINT, 1);
272     GET_BOOL(GL_FRAMEBUFFER_SRGB, 1);
273     GET_ENUM(GL_FRONT_FACE, 1);
274
275     GET_ENUM(GL_GENERATE_MIPMAP_HINT, 1);
276     GET_FLOAT(GL_GREEN_BIAS, 1);
277     GET_FLOAT(GL_GREEN_BITS, 1);
278     GET_FLOAT(GL_GREEN_SCALE, 1);
279
280     GET_BOOL(GL_HISTOGRAM, 1);
281
282     GET_ENUM(GL_IMPLEMENTATION_COLOR_READ_FORMAT, 1);
283     GET_ENUM(GL_IMPLEMENTATION_COLOR_READ_TYPE, 1);
284     GET_BOOL(GL_INDEX_ARRAY, 1);
285     GET_INT(GL_INDEX_ARRAY_BUFFER_BINDING, 1);
286     GET_PTR(GL_INDEX_ARRAY_POINTER, 1);
287     GET_INT(GL_INDEX_ARRAY_STRIDE, 1);
288     GET_ENUM(GL_INDEX_ARRAY_TYPE, 1);
289     GET_INT(GL_INDEX_BITS, 1);
290     GET_INT(GL_INDEX_CLEAR_VALUE, 1);
291     GET_ENUM(GL_INDEX_LOGIC_OP, 1); // these (GL_INDEX_LOGIC_OP & GL_LOGIC_OP) got merged? or replaced with GL_COLOR_LOGIC_OP
292     GET_BOOL(GL_INDEX_MODE, 1);
293     GET_INT(GL_INDEX_OFFSET, 1);
294     GET_INT(GL_INDEX_SHIFT, 1);
295     GET_INT(GL_INDEX_WRITEMASK, 1);
296
297     GET_ENUM(GL_LAYER_PROVOKING_VERTEX, 1);
298     GET_BOOL(GL_LIGHTING, 1);
299     GET_BOOL(GL_LIGHT0, 1);
300     GET_BOOL(GL_LIGHT1, 1);
301     GET_BOOL(GL_LIGHT2, 1);
302     GET_BOOL(GL_LIGHT3, 1);
303     GET_BOOL(GL_LIGHT4, 1);
304     GET_BOOL(GL_LIGHT5, 1);
305     GET_BOOL(GL_LIGHT6, 1);
306     GET_BOOL(GL_LIGHT7, 1);
307     GET_FLOAT(GL_LIGHT_MODEL_AMBIENT, 4);
308     GET_ENUM(GL_LIGHT_MODEL_COLOR_CONTROL, 1);
309     GET_BOOL(GL_LIGHT_MODEL_LOCAL_VIEWER, 1);
310     GET_BOOL(GL_LIGHT_MODEL_TWO_SIDE, 1);
311     GET_ENUM(GL_LINE_SMOOTH, 1);
312     GET_ENUM(GL_LINE_SMOOTH_HINT, 1);
313     GET_FLOAT(GL_LINE_WIDTH, 1);
314     GET_BOOL(GL_LINE_STIPPLE, 1);
315     GET_INT(GL_LINE_STIPPLE_PATTERN, 1);
316     GET_INT(GL_LINE_STIPPLE_REPEAT, 1);
317     GET_FLOAT(GL_LINE_WIDTH_GRANULARITY, 1); // replaced with GL_SMOOTH_LINE_WIDTH_GRANULARITY
318     GET_FLOAT(GL_LINE_WIDTH_RANGE, 2);// replaced with GL_SMOOTH_LINE_WIDTH_RANGE
319     GET_INT(GL_LIST_BASE, 1);
320     GET_INT(GL_LIST_INDEX, 1);
321     GET_ENUM(GL_LIST_MODE, 1);
322     GET_ENUM(GL_LOGIC_OP, 1); // these (GL_INDEX_LOGIC_OP & GL_LOGIC_OP) got merged? or replaced with GL_COLOR_LOGIC_OP
323     GET_ENUM(GL_LOGIC_OP_MODE, 1);
324
325     GET_BOOL(GL_MAP1_COLOR_4, 1);
326     GET_FLOAT(GL_MAP1_GRID_DOMAIN, 2);
327     GET_INT(GL_MAP1_GRID_SEGMENTS, 1);
328     GET_BOOL(GL_MAP1_INDEX, 1);
329     GET_BOOL(GL_MAP1_NORMAL, 1);
330     GET_BOOL(GL_MAP1_TEXTURE_COORD_1, 1);
331     GET_BOOL(GL_MAP1_TEXTURE_COORD_2, 1);
332     GET_BOOL(GL_MAP1_TEXTURE_COORD_3, 1);
333     GET_BOOL(GL_MAP1_TEXTURE_COORD_4, 1);
334     GET_BOOL(GL_MAP1_VERTEX_3, 1);
335     GET_BOOL(GL_MAP1_VERTEX_4, 1);
336     GET_BOOL(GL_MAP2_COLOR_4, 1);
337     GET_FLOAT(GL_MAP2_GRID_DOMAIN, 4);
338     GET_INT(GL_MAP2_GRID_SEGMENTS, 2);
339     GET_BOOL(GL_MAP2_INDEX, 1);
340     GET_BOOL(GL_MAP2_NORMAL, 1);
341     GET_BOOL(GL_MAP2_TEXTURE_COORD_1, 1);
342     GET_BOOL(GL_MAP2_TEXTURE_COORD_2, 1);
343     GET_BOOL(GL_MAP2_TEXTURE_COORD_3, 1);
344     GET_BOOL(GL_MAP2_TEXTURE_COORD_4, 1);
345     GET_BOOL(GL_MAP2_VERTEX_3, 1);
346     GET_BOOL(GL_MAP2_VERTEX_4, 1);
347     GET_BOOL(GL_MAP_COLOR, 1);
348     GET_BOOL(GL_MAP_STENCIL, 1);
349     GET_ENUM(GL_MATRIX_MODE, 1);
350
351     GET_INT(GL_MAX_3D_TEXTURE_SIZE, 1);
352
353     GET_INT(GL_MAX_ARRAY_TEXTURE_LAYERS, 1);
354     GET_INT(GL_MAX_ATTRIB_STACK_DEPTH, 1);
355     GET_INT(GL_MAX_CLIENT_ATTRIB_STACK_DEPTH, 1);
356     GET_INT(GL_MAX_CLIP_PLANES, 1); // aka GL_MAX_CLIP_DISTANCES
357     GET_INT(GL_MAX_CLIP_DISTANCES, 1); // alias to GL_MAX_CLIP_PLANES
358     GET_INT(GL_MAX_COLOR_ATTACHMENTS, 1);
359     GET_INT(GL_MAX_COLOR_MATRIX_STACK_DEPTH, 1);
360     GET_INT(GL_MAX_COLOR_TEXTURE_SAMPLES, 1);
361     GET_INT(GL_MAX_COMBINED_ATOMIC_COUNTERS, 1);
362     GET_INT(GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS, 1);
363     GET_INT(GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS, 1);
364     GET_INT(GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS, 1);
365     GET_INT(GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS, 1);
366     GET_INT(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, 1);
367     GET_INT(GL_MAX_COMBINED_UNIFORM_BLOCKS, 1);
368     GET_INT(GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS, 1);
369     GET_INT(GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS, 1);
370     GET_INT(GL_MAX_COMPUTE_ATOMIC_COUNTERS, 1);
371     GET_INT(GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS, 1);
372     GET_INT(GL_MAX_COMPUTE_UNIFORM_BLOCKS, 1);
373     GET_INT(GL_MAX_COMPUTE_UNIFORM_COMPONENTS, 1);
374     GET_INT(GL_MAX_COMPUTE_WORK_GROUP_COUNT, 1);
375     GET_INT(GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS, 1);
376     GET_INT(GL_MAX_COMPUTE_WORK_GROUP_SIZE, 1);
377     GET_INT(GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS, 1);
378     GET_INT(GL_MAX_CUBE_MAP_TEXTURE_SIZE, 1);
379     GET_INT(GL_MAX_DEBUG_GROUP_STACK_DEPTH, 1);
380     GET_INT(GL_MAX_DEPTH_TEXTURE_SAMPLES, 1);
381     GET_INT(GL_MAX_DRAW_BUFFERS, 1);
382     GET_INT(GL_MAX_DUAL_SOURCE_DRAW_BUFFERS, 1);
383
384     GET_INT(GL_MAX_ELEMENT_INDEX, 1);
385     GET_INT(GL_MAX_ELEMENTS_INDICES, 1);
386     GET_INT(GL_MAX_ELEMENTS_VERTICES, 1);
387     GET_INT(GL_MAX_EVAL_ORDER, 1);
388     GET_INT(GL_MAX_FRAGMENT_ATOMIC_COUNTERS, 1);
389     GET_INT(GL_MAX_FRAGMENT_INPUT_COMPONENTS, 1);
390     GET_INT(GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS, 1);
391     GET_INT(GL_MAX_FRAGMENT_UNIFORM_BLOCKS, 1);
392     GET_INT(GL_MAX_FRAGMENT_UNIFORM_COMPONENTS, 1);
393     GET_INT(GL_MAX_FRAGMENT_UNIFORM_VECTORS, 1);
394     GET_INT(GL_MAX_FRAMEBUFFER_HEIGHT, 1);
395     GET_INT(GL_MAX_FRAMEBUFFER_LAYERS, 1);
396     GET_INT(GL_MAX_FRAMEBUFFER_SAMPLES, 1);
397     GET_INT(GL_MAX_FRAMEBUFFER_WIDTH, 1);
398     GET_INT(GL_MAX_GEOMETRY_ATOMIC_COUNTERS, 1);
399     GET_INT(GL_MAX_GEOMETRY_INPUT_COMPONENTS, 1);
400     GET_INT(GL_MAX_GEOMETRY_OUTPUT_COMPONENTS, 1);
401     GET_INT(GL_MAX_GEOMETRY_OUTPUT_VERTICES, 1);
402     GET_INT(GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS, 1);
403     GET_INT(GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS, 1);
404     GET_INT(GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS, 1);
405     GET_INT(GL_MAX_GEOMETRY_UNIFORM_BLOCKS, 1);
406     GET_INT(GL_MAX_GEOMETRY_UNIFORM_COMPONENTS, 1);
407     GET_INT(GL_MAX_INTEGER_SAMPLES, 1);
408
409     GET_INT(GL_MAX_LABEL_LENGTH, 1);
410     GET_INT(GL_MAX_LIGHTS, 1);
411     GET_INT(GL_MAX_LIST_NESTING, 1);
412     GET_INT(GL_MAX_MODELVIEW_STACK_DEPTH, 1);
413     GET_INT(GL_MAX_NAME_STACK_DEPTH, 1);
414     GET_INT(GL_MAX_PIXEL_MAP_TABLE, 1);
415     GET_FLOAT(GL_MAX_PROGRAM_TEXEL_OFFSET, 1);
416     GET_FLOAT(GL_MIN_PROGRAM_TEXEL_OFFSET, 1);
417     GET_INT(GL_MAX_PROJECTION_STACK_DEPTH, 1);
418     GET_INT(GL_MAX_RECTANGLE_TEXTURE_SIZE, 1);
419     GET_INT(GL_MAX_RENDERBUFFER_SIZE, 1);
420     GET_INT(GL_MAX_SAMPLE_MASK_WORDS, 1);
421     GET_INT(GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS, 1);
422     GET_INT(GL_MAX_SERVER_WAIT_TIMEOUT, 1);
423     GET_INT(GL_MAX_TEXTURE_BUFFER_SIZE, 1);
424     GET_INT(GL_MAX_TEXTURE_COORDS, 1);
425     GET_INT(GL_MAX_TEXTURE_IMAGE_UNITS, 1);
426     GET_FLOAT(GL_MAX_TEXTURE_LOD_BIAS, 1);
427     GET_INT(GL_MAX_TEXTURE_SIZE, 1);
428     GET_INT(GL_MAX_TEXTURE_STACK_DEPTH, 1);
429     GET_INT(GL_MAX_TEXTURE_UNITS, 1);
430     GET_INT(GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS, 1);
431     GET_INT(GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS, 1);
432     GET_INT(GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS, 1);
433     GET_INT(GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS, 1);
434     GET_INT(GL_MAX_UNIFORM_BLOCK_SIZE, 1);
435     GET_INT(GL_MAX_UNIFORM_BUFFER_BINDINGS, 1);
436     GET_INT(GL_MAX_UNIFORM_LOCATIONS, 1);
437     GET_INT(GL_MAX_VARYING_VECTORS, 1);
438     GET_INT(GL_MAX_VERTEX_ATOMIC_COUNTERS, 1);
439     GET_INT(GL_MAX_VERTEX_ATTRIBS, 1);
440     GET_INT(GL_MAX_VERTEX_ATTRIB_BINDINGS, 1);
441     GET_INT(GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET, 1);
442     GET_INT(GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS, 1);
443     GET_INT(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS, 1);
444     GET_INT(GL_MAX_VERTEX_UNIFORM_BLOCKS, 1);
445     GET_INT(GL_MAX_VERTEX_UNIFORM_COMPONENTS, 1);
446     GET_INT(GL_MAX_VERTEX_UNIFORM_VECTORS, 1);
447     GET_INT(GL_MAX_VARYING_COMPONENTS, 1); // alias of GL_MAX_VARYING_FLOATS from GL2
448     GET_INT(GL_MAX_VARYING_FLOATS, 1);
449     GET_INT(GL_MAX_VERTEX_OUTPUT_COMPONENTS, 1);
450     GET_INT(GL_MAX_VIEWPORTS, 1);
451     GET_FLOAT(GL_MAX_VIEWPORT_DIMS, 2);
452     GET_FLOAT(GL_MIN_SAMPLE_SHADING_VALUE, 1);
453     GET_INT(GL_MIN_MAP_BUFFER_ALIGNMENT, 1);
454
455     GET_INT(GL_MAJOR_VERSION, 1);
456     GET_INT(GL_MINOR_VERSION, 1);
457
458     GET_MATRIX(GL_MODELVIEW_MATRIX, 16);
459     GET_INT(GL_MODELVIEW_STACK_DEPTH, 1);
460     GET_BOOL(GL_MULTISAMPLE, 1);
461     GET_BOOL(GL_MINMAX, 1);
462
463
464     GET_INT(GL_NAME_STACK_DEPTH, 1);
465     GET_BOOL(GL_NORMAL_ARRAY, 1);
466     GET_INT(GL_NORMAL_ARRAY_BUFFER_BINDING, 1);
467     GET_PTR(GL_NORMAL_ARRAY_POINTER, 1);
468     GET_INT(GL_NORMAL_ARRAY_STRIDE, 1);
469     GET_ENUM(GL_NORMAL_ARRAY_TYPE, 1);
470     GET_BOOL(GL_NORMALIZE, 1);
471     GET_INT(GL_NUM_EXTENSIONS, 1);
472     GET_INT(GL_NUM_PROGRAM_BINARY_FORMATS, 1);
473     GET_INT(GL_NUM_SHADER_BINARY_FORMATS, 1);
474
475     GET_INT(GL_PACK_ALIGNMENT, 1);
476     GET_INT(GL_PACK_IMAGE_HEIGHT, 1);
477     GET_BOOL(GL_PACK_LSB_FIRST, 1);
478     GET_INT(GL_PACK_ROW_LENGTH, 1);
479     GET_INT(GL_PACK_SKIP_IMAGES, 1);
480     GET_INT(GL_PACK_SKIP_PIXELS, 1);
481     GET_INT(GL_PACK_SKIP_ROWS, 1);
482     GET_BOOL(GL_PACK_SWAP_BYTES, 1);
483
484     GET_FLOAT(GL_POINT_SIZE, 1);
485     GET_FLOAT(GL_POINT_SIZE_GRANULARITY, 1);
486     GET_FLOAT(GL_POINT_SIZE_RANGE, 2);
487     GET_BOOL(GL_POLYGON_SMOOTH, 1);
488     GET_ENUM(GL_POLYGON_SMOOTH_HINT, 1);
489     GET_ENUM(GL_PERSPECTIVE_CORRECTION_HINT, 1);
490     GET_INT(GL_PIXEL_MAP_A_TO_A_SIZE, 1);
491     GET_INT(GL_PIXEL_MAP_B_TO_B_SIZE, 1);
492     GET_INT(GL_PIXEL_MAP_G_TO_G_SIZE, 1);
493     GET_INT(GL_PIXEL_MAP_I_TO_A_SIZE, 1);
494     GET_INT(GL_PIXEL_MAP_I_TO_B_SIZE, 1);
495     GET_INT(GL_PIXEL_MAP_I_TO_G_SIZE, 1);
496     GET_INT(GL_PIXEL_MAP_I_TO_I_SIZE, 1);
497     GET_INT(GL_PIXEL_MAP_I_TO_R_SIZE, 1);
498     GET_INT(GL_PIXEL_MAP_R_TO_R_SIZE, 1);
499     GET_INT(GL_PIXEL_MAP_S_TO_S_SIZE, 1);
500     GET_INT(GL_PIXEL_PACK_BUFFER_BINDING, 1);
501     GET_INT(GL_PIXEL_UNPACK_BUFFER_BINDING, 1);
502     GET_BOOL(GL_POINT_SMOOTH, 1);
503     GET_ENUM(GL_POINT_SMOOTH_HINT, 1);
504     GET_ENUM(GL_POLYGON_MODE, 2);
505     GET_FLOAT(GL_POLYGON_OFFSET_FACTOR, 1);
506     GET_BOOL(GL_POLYGON_OFFSET_FILL, 1);
507     GET_BOOL(GL_POLYGON_OFFSET_LINE, 1);
508     GET_BOOL(GL_POLYGON_OFFSET_POINT, 1);
509     GET_FLOAT(GL_POLYGON_OFFSET_UNITS, 1);
510     GET_BOOL(GL_POLYGON_STIPPLE, 1);
511     GET_FLOAT(GL_POINT_SIZE_MAX, 1);
512     GET_FLOAT(GL_POINT_SIZE_MIN, 1);
513     GET_FLOAT(GL_POINT_DISTANCE_ATTENUATION, 3);
514     GET_FLOAT(GL_POINT_FADE_THRESHOLD_SIZE, 1);
515     GET_BOOL(GL_POINT_SPRITE, 1);
516     GET_FLOAT(GL_POST_COLOR_MATRIX_ALPHA_BIAS, 1);
517     GET_FLOAT(GL_POST_COLOR_MATRIX_ALPHA_SCALE, 1);
518     GET_FLOAT(GL_POST_COLOR_MATRIX_BLUE_BIAS, 1);
519     GET_FLOAT(GL_POST_COLOR_MATRIX_BLUE_SCALE, 1);
520     GET_INT(GL_POST_COLOR_MATRIX_COLOR_TABLE, 1);
521     GET_FLOAT(GL_POST_COLOR_MATRIX_GREEN_BIAS, 1);
522     GET_FLOAT(GL_POST_COLOR_MATRIX_GREEN_SCALE, 1);
523     GET_FLOAT(GL_POST_COLOR_MATRIX_RED_BIAS, 1);
524     GET_FLOAT(GL_POST_COLOR_MATRIX_RED_SCALE, 1);
525     GET_FLOAT(GL_POST_CONVOLUTION_ALPHA_BIAS, 1);
526     GET_FLOAT(GL_POST_CONVOLUTION_ALPHA_SCALE, 1);
527     GET_FLOAT(GL_POST_CONVOLUTION_BLUE_BIAS, 1);
528     GET_FLOAT(GL_POST_CONVOLUTION_BLUE_SCALE, 1);
529     GET_INT(GL_POST_CONVOLUTION_COLOR_TABLE, 1);
530     GET_FLOAT(GL_POST_CONVOLUTION_GREEN_BIAS, 1);
531     GET_FLOAT(GL_POST_CONVOLUTION_GREEN_SCALE, 1);
532     GET_FLOAT(GL_POST_CONVOLUTION_RED_BIAS, 1);
533     GET_FLOAT(GL_POST_CONVOLUTION_RED_SCALE, 1);
534     GET_BOOL(GL_PRIMITIVE_RESTART, 1);
535     GET_INT(GL_PRIMITIVE_RESTART_INDEX, 1);
536     GET_MATRIX(GL_PROJECTION_MATRIX, 16);
537     GET_INT(GL_PROJECTION_STACK_DEPTH, 1);
538     GET_INT(GL_PROGRAM_BINARY_FORMATS, 1);
539     GET_INT(GL_PROGRAM_PIPELINE_BINDING, 1);
540     GET_BOOL(GL_PROGRAM_POINT_SIZE, 1);  // alias of GL_VERTEX_PROGRAM_POINT_SIZE from GL2
541     GET_ENUM(GL_PROVOKING_VERTEX, 1);
542
543     GET_ENUM(GL_READ_BUFFER, 1);
544     GET_INT(GL_READ_FRAMEBUFFER_BINDING, 1);
545     GET_FLOAT(GL_RED_BIAS, 1);
546     GET_INT(GL_RED_BITS, 1);
547     GET_FLOAT(GL_RED_SCALE, 1);
548     GET_INT(GL_RENDERBUFFER_BINDING, 1);
549     GET_ENUM(GL_RENDER_MODE, 1);
550     GET_BOOL(GL_RESCALE_NORMAL, 1);
551     GET_BOOL(GL_RGBA_MODE, 1);
552
553     GET_INT(GL_SAMPLES, 1);
554     GET_INT(GL_SAMPLE_BUFFERS, 1);
555     GET_BOOL(GL_SAMPLE_COVERAGE_INVERT, 1);
556     GET_FLOAT(GL_SAMPLE_COVERAGE_VALUE, 1);
557     GET_BOOL(GL_SAMPLE_ALPHA_TO_COVERAGE, 1);
558     GET_BOOL(GL_SAMPLE_ALPHA_TO_ONE, 1);
559     GET_BOOL(GL_SAMPLE_COVERAGE, 1);
560     GET_BOOL(GL_SAMPLE_MASK, 1);
561     GET_BOOL(GL_SAMPLE_SHADING, 1);
562     GET_INT(GL_SCISSOR_BOX, 4);
563     GET_BOOL(GL_SCISSOR_TEST, 1);
564     GET_INT(GL_SECONDARY_COLOR_ARRAY_SIZE, 1);
565     GET_INT(GL_SECONDARY_COLOR_ARRAY_STRIDE, 1);
566     GET_ENUM(GL_SECONDARY_COLOR_ARRAY_TYPE, 1);
567     GET_PTR(GL_SECONDARY_COLOR_ARRAY_POINTER, 1);
568     GET_INT(GL_SECONDARY_COLOR_ARRAY, 1);
569     GET_INT(GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING, 1);
570     GET_PTR(GL_SELECTION_BUFFER_POINTER, 1);
571     GET_INT(GL_SELECTION_BUFFER_SIZE, 1);
572     GET_BOOL(GL_SEPARABLE_2D, 1);
573     GET_ENUM(GL_SHADE_MODEL, 1);
574     GET_BOOL(GL_SHADER_COMPILER, 1);
575     GET_INT(GL_SHADER_STORAGE_BUFFER_BINDING, 1);
576     GET_INT(GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT, 1);
577     GET_INT(GL_SHADER_STORAGE_BUFFER_SIZE, 1);
578     GET_INT(GL_SHADER_STORAGE_BUFFER_START, 1);
579     GET_FLOAT(GL_SMOOTH_POINT_SIZE_GRANULARITY, 1);
580     GET_FLOAT(GL_SMOOTH_POINT_SIZE_RANGE, 2);
581     GET_FLOAT(GL_SMOOTH_LINE_WIDTH_GRANULARITY, 1);
582     GET_FLOAT(GL_SMOOTH_LINE_WIDTH_RANGE, 2);
583     GET_ENUM(GL_STENCIL_BACK_FAIL, 1);
584     GET_ENUM(GL_STENCIL_BACK_FUNC, 1);
585     GET_ENUM(GL_STENCIL_BACK_PASS_DEPTH_FAIL, 1);
586     GET_ENUM(GL_STENCIL_BACK_PASS_DEPTH_PASS, 1);
587     GET_ENUM(GL_STENCIL_BACK_REF, 1);
588     GET_ENUM(GL_STENCIL_BACK_VALUE_MASK, 1);
589     GET_ENUM(GL_STENCIL_BACK_WRITEMASK, 1);
590     GET_INT(GL_STENCIL_BITS, 1);
591     GET_INT(GL_STENCIL_CLEAR_VALUE, 1);
592     GET_ENUM(GL_STENCIL_FAIL, 1);
593     GET_ENUM(GL_STENCIL_FUNC, 1);
594     GET_ENUM(GL_STENCIL_PASS_DEPTH_FAIL, 1);
595     GET_ENUM(GL_STENCIL_PASS_DEPTH_PASS, 1);
596     GET_INT(GL_STENCIL_REF, 1);
597     GET_BOOL(GL_STENCIL_TEST, 1);
598     GET_ENUM(GL_STENCIL_VALUE_MASK, 1);
599     GET_ENUM(GL_STENCIL_WRITEMASK, 1);
600     GET_BOOL(GL_STEREO, 1);
601     GET_INT(GL_SUBPIXEL_BITS, 1);
602
603 #define GET_TC_BOOL(name, index, num) if (generalState.get<bool>(name, index, bVals, num)) { vogleditor_stateTreeStateVecBoolItem* pBoolItem = new vogleditor_stateTreeStateVecBoolItem(#name, name, index, generalState, bVals, num, false, pTexUnitNode); this->m_diffableItems.push_back(pBoolItem); pTexUnitNode->appendChild(pBoolItem); }
604 #define GET_TC_INT(name, index, num) if (generalState.get<int>(name, index, iVals, num)) { vogleditor_stateTreeStateVecIntItem* pIntItem = new vogleditor_stateTreeStateVecIntItem(#name, name, index, generalState, iVals, num, false, pTexUnitNode); this->m_diffableItems.push_back(pIntItem); pTexUnitNode->appendChild(pIntItem); }
605 #define GET_TC_FLOAT(name, index, num) if (generalState.get<float>(name, index, fVals, num)) { vogleditor_stateTreeStateVecFloatItem* pFloatItem = new vogleditor_stateTreeStateVecFloatItem(#name, name, index, generalState, fVals, num, false, pTexUnitNode); this->m_diffableItems.push_back(pFloatItem); pTexUnitNode->appendChild(pFloatItem); }
606
607     const uint max_texture_unit = info.get_max_texture_image_units();
608     for (unsigned int texcoord_index = 0; texcoord_index < max_texture_unit; texcoord_index++)
609     {
610         vogleditor_stateTreeItem* pTexUnitNode = new vogleditor_stateTreeItem(tmp.sprintf("GL_TEXTURE%u", texcoord_index), "", this);
611         this->appendChild(pTexUnitNode);
612
613         GET_TC_INT(GL_SAMPLER_BINDING, texcoord_index, 1);
614         GET_TC_BOOL(GL_TEXTURE_1D, texcoord_index, 1);
615         GET_TC_INT(GL_TEXTURE_BINDING_1D, texcoord_index, 1);
616         GET_TC_BOOL(GL_TEXTURE_2D, texcoord_index, 1);
617         GET_TC_INT(GL_TEXTURE_BINDING_2D, texcoord_index, 1);
618         GET_TC_BOOL(GL_TEXTURE_3D, texcoord_index, 1);
619         GET_TC_INT(GL_TEXTURE_BINDING_3D, texcoord_index, 1);
620         GET_TC_BOOL(GL_TEXTURE_CUBE_MAP, texcoord_index, 1);
621         GET_TC_INT(GL_TEXTURE_BINDING_CUBE_MAP, texcoord_index, 1);
622         GET_TC_INT(GL_TEXTURE_BINDING_CUBE_MAP_ARRAY, texcoord_index, 1);
623         GET_TC_BOOL(GL_TEXTURE_RECTANGLE, texcoord_index, 1);
624         GET_TC_INT(GL_TEXTURE_BINDING_RECTANGLE, texcoord_index, 1);
625         GET_TC_INT(GL_TEXTURE_BINDING_BUFFER, texcoord_index, 1);
626
627         GET_TC_INT(GL_TEXTURE_BINDING_1D_ARRAY, texcoord_index, 1);
628         GET_TC_INT(GL_TEXTURE_BINDING_2D_ARRAY, texcoord_index, 1);
629         GET_TC_INT(GL_TEXTURE_BINDING_2D_MULTISAMPLE, texcoord_index, 1);
630         GET_TC_INT(GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY, texcoord_index, 1);
631
632         GET_TC_FLOAT(GL_CURRENT_RASTER_TEXTURE_COORDS, texcoord_index, 4);
633         GET_TC_FLOAT(GL_CURRENT_TEXTURE_COORDS, texcoord_index, 4);
634         GET_TC_BOOL(GL_TEXTURE_GEN_Q, texcoord_index, 1);
635         GET_TC_BOOL(GL_TEXTURE_GEN_R, texcoord_index, 1);
636         GET_TC_BOOL(GL_TEXTURE_GEN_S, texcoord_index, 1);
637         GET_TC_BOOL(GL_TEXTURE_GEN_T, texcoord_index, 1);
638     }
639
640 #undef GET_TC_BOOL
641 #undef GET_TC_INT
642 #undef GET_TC_FLOAT
643
644     GET_INT(GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT, 1);
645     GET_BOOL(GL_TEXTURE_CUBE_MAP_SEAMLESS, 1);
646
647     GET_ENUM(GL_TEXTURE_COMPRESSION_HINT, 1);
648     GET_BOOL(GL_TEXTURE_COORD_ARRAY, 1);
649     GET_INT(GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING, 1);
650     GET_PTR(GL_TEXTURE_COORD_ARRAY_POINTER, 1);
651     GET_INT(GL_TEXTURE_COORD_ARRAY_STRIDE, 1);
652     GET_INT(GL_TEXTURE_COORD_ARRAY_SIZE, 1);
653     GET_ENUM(GL_TEXTURE_COORD_ARRAY_TYPE, 1);
654     GET_FLOAT(GL_TEXTURE_ENV_COLOR, 4);
655     GET_ENUM(GL_TEXTURE_ENV_MODE, 1);
656     GET_MATRIX(GL_TEXTURE_MATRIX, 16);
657     GET_INT(GL_TEXTURE_STACK_DEPTH, 1);
658     GET_INT(GL_TIMESTAMP, 1);
659     GET_INT(GL_TRANSFORM_FEEDBACK_BUFFER_BINDING, 1);
660     GET_MATRIX(GL_TRANSPOSE_COLOR_MATRIX, 16);
661     GET_MATRIX(GL_TRANSPOSE_MODELVIEW_MATRIX, 16);
662     GET_MATRIX(GL_TRANSPOSE_PROJECTION_MATRIX, 16);
663     GET_MATRIX(GL_TRANSPOSE_TEXTURE_MATRIX, 16);
664     int max_transform_feedback_separate_attribs = info.get_max_transform_feedback_separate_attribs();
665     GET_INDEXED_INT(GL_TRANSFORM_FEEDBACK_BUFFER_BINDING, 1, max_transform_feedback_separate_attribs);
666     GET_INDEXED_INT(GL_TRANSFORM_FEEDBACK_BUFFER_SIZE, 1, max_transform_feedback_separate_attribs);
667     GET_INDEXED_INT(GL_TRANSFORM_FEEDBACK_BUFFER_START, 1, max_transform_feedback_separate_attribs);
668
669     GET_INT(GL_UNPACK_ALIGNMENT, 1);
670     GET_BOOL(GL_UNPACK_LSB_FIRST, 1);
671     GET_INT(GL_UNPACK_ROW_LENGTH, 1);
672     GET_INT(GL_UNPACK_SKIP_PIXELS, 1);
673     GET_INT(GL_UNPACK_SKIP_ROWS, 1);
674     GET_BOOL(GL_UNPACK_SWAP_BYTES, 1);
675     GET_INT(GL_UNPACK_IMAGE_HEIGHT, 1);
676     GET_INT(GL_UNPACK_SKIP_IMAGES, 1);
677     GET_INT(GL_UNIFORM_BUFFER_BINDING, 1);
678     int max_uniform_buffer_bindings = info.get_max_uniform_buffer_bindings();
679     GET_INDEXED_INT(GL_UNIFORM_BUFFER_BINDING, 1, max_uniform_buffer_bindings)
680     GET_INDEXED_INT(GL_UNIFORM_BUFFER_START, 1, max_uniform_buffer_bindings)
681     GET_INDEXED_INT(GL_UNIFORM_BUFFER_SIZE, 1, max_uniform_buffer_bindings)
682     GET_INT(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, 1);
683
684     GET_BOOL(GL_VERTEX_ARRAY, 1);
685     GET_INT(GL_VERTEX_ARRAY_BINDING, 1);
686     GET_INT(GL_VERTEX_ARRAY_BUFFER_BINDING, 1);
687     GET_PTR(GL_VERTEX_ARRAY_POINTER, 1);
688     GET_INT(GL_VERTEX_ARRAY_SIZE, 1);
689     GET_INT(GL_VERTEX_ARRAY_STRIDE, 1);
690     GET_ENUM(GL_VERTEX_ARRAY_TYPE, 1);
691     GET_INT(GL_VERTEX_BINDING_DIVISOR, 1);
692     GET_INT(GL_VERTEX_BINDING_OFFSET, 1);
693     GET_INT(GL_VERTEX_BINDING_STRIDE, 1);
694     GET_BOOL(GL_VERTEX_PROGRAM_ARB, 1);
695     GET_BOOL(GL_VERTEX_PROGRAM_POINT_SIZE, 1); // aka GL_PROGRAM_POINT_SIZE
696     GET_BOOL(GL_VERTEX_PROGRAM_TWO_SIDE, 1);
697     GET_FLOAT(GL_VERTEX_PROGRAM_POINT_SIZE_ARB, 1);
698     GET_BOOL(GL_VERTEX_PROGRAM_TWO_SIDE_ARB, 1);
699     GET_INT(GL_VIEWPORT, 4);
700     GET_FLOAT(GL_VIEWPORT_BOUNDS_RANGE, 2);
701     GET_ENUM(GL_VIEWPORT_INDEX_PROVOKING_VERTEX, 1);
702     GET_INT(GL_VIEWPORT_SUBPIXEL_BITS, 1);
703
704     GET_FLOAT(GL_ZOOM_X, 1);
705     GET_FLOAT(GL_ZOOM_Y, 1);
706
707 #undef STR_INT
708
709 #undef GET_PTR
710 #undef GET_BOOL
711 #undef GET_INT
712 #undef GET_ENUM
713 #undef GET_FLOAT
714 #undef GET_MATRIX
715 #undef GET_INDEXED_INT
716 #undef GET_INDEXED_BOOL
717 }