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