]> git.cworth.org Git - apitrace/blob - glstate.py
Basic state dumping.
[apitrace] / glstate.py
1 ##########################################################################
2 #
3 # Copyright 2011 Jose Fonseca
4 # All Rights Reserved.
5 #
6 # Permission is hereby granted, free of charge, to any person obtaining a copy
7 # of this software and associated documentation files (the "Software"), to deal
8 # in the Software without restriction, including without limitation the rights
9 # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10 # copies of the Software, and to permit persons to whom the Software is
11 # furnished to do so, subject to the following conditions:
12 #
13 # The above copyright notice and this permission notice shall be included in
14 # all copies or substantial portions of the Software.
15 #
16 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19 # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22 # THE SOFTWARE.
23 #
24 ##########################################################################/
25
26
27 from stdapi import *
28
29 from glenum import GLenum
30
31
32
33 I = Int
34 F = Float
35
36 parameters = [
37     (F, 1,      "GL_POINT_SIZE"),       # 0x0B11
38     (F, 2,      "GL_POINT_SIZE_RANGE"), # 0x0B12
39     (F, 1,      "GL_POINT_SIZE_GRANULARITY"),   # 0x0B13
40     (I, 1,      "GL_LINE_SMOOTH"),      # 0x0B20
41     (F, 1,      "GL_LINE_WIDTH"),       # 0x0B21
42     (F, 2,      "GL_LINE_WIDTH_RANGE"), # 0x0B22
43     (F, 1,      "GL_LINE_WIDTH_GRANULARITY"),   # 0x0B23
44     (I, 1,      "GL_POLYGON_SMOOTH"),   # 0x0B41
45     (I, 1,      "GL_CULL_FACE"),        # 0x0B44
46     (I, 1,      "GL_CULL_FACE_MODE"),   # 0x0B45
47     (I, 1,      "GL_FRONT_FACE"),       # 0x0B46
48     (F, 2,      "GL_DEPTH_RANGE"),      # 0x0B70
49     (I, 1,      "GL_DEPTH_TEST"),       # 0x0B71
50     (I, 1,      "GL_DEPTH_WRITEMASK"),  # 0x0B72
51     (F, 1,      "GL_DEPTH_CLEAR_VALUE"),        # 0x0B73
52     (I, 1,      "GL_DEPTH_FUNC"),       # 0x0B74
53     (I, 1,      "GL_STENCIL_TEST"),     # 0x0B90
54     (I, 1,      "GL_STENCIL_CLEAR_VALUE"),      # 0x0B91
55     (I, 1,      "GL_STENCIL_FUNC"),     # 0x0B92
56     (I, 1,      "GL_STENCIL_VALUE_MASK"),       # 0x0B93
57     (I, 1,      "GL_STENCIL_FAIL"),     # 0x0B94
58     (I, 1,      "GL_STENCIL_PASS_DEPTH_FAIL"),  # 0x0B95
59     (I, 1,      "GL_STENCIL_PASS_DEPTH_PASS"),  # 0x0B96
60     (I, 1,      "GL_STENCIL_REF"),      # 0x0B97
61     (I, 1,      "GL_STENCIL_WRITEMASK"),        # 0x0B98
62     (I, 4,      "GL_VIEWPORT"), # 0x0BA2
63     (I, 1,      "GL_DITHER"),   # 0x0BD0
64     (I, 1,      "GL_BLEND_DST"),        # 0x0BE0
65     (I, 1,      "GL_BLEND_SRC"),        # 0x0BE1
66     (I, 1,      "GL_BLEND"),    # 0x0BE2
67     (I, 1,      "GL_LOGIC_OP_MODE"),    # 0x0BF0
68     (I, 1,      "GL_COLOR_LOGIC_OP"),   # 0x0BF2
69     (I, 1,      "GL_DRAW_BUFFER"),      # 0x0C01
70     (I, 1,      "GL_READ_BUFFER"),      # 0x0C02
71     (I, 4,      "GL_SCISSOR_BOX"),      # 0x0C10
72     (I, 1,      "GL_SCISSOR_TEST"),     # 0x0C11
73     (F, 4,      "GL_COLOR_CLEAR_VALUE"),        # 0x0C22
74     (I, 4,      "GL_COLOR_WRITEMASK"),  # 0x0C23
75     (I, 1,      "GL_DOUBLEBUFFER"),     # 0x0C32
76     (I, 1,      "GL_STEREO"),   # 0x0C33
77     (I, 1,      "GL_LINE_SMOOTH_HINT"), # 0x0C52
78     (I, 1,      "GL_POLYGON_SMOOTH_HINT"),      # 0x0C53
79     (I, 1,      "GL_UNPACK_SWAP_BYTES"),        # 0x0CF0
80     (I, 1,      "GL_UNPACK_LSB_FIRST"), # 0x0CF1
81     (I, 1,      "GL_UNPACK_ROW_LENGTH"),        # 0x0CF2
82     (I, 1,      "GL_UNPACK_SKIP_ROWS"), # 0x0CF3
83     (I, 1,      "GL_UNPACK_SKIP_PIXELS"),       # 0x0CF4
84     (I, 1,      "GL_UNPACK_ALIGNMENT"), # 0x0CF5
85     (I, 1,      "GL_PACK_SWAP_BYTES"),  # 0x0D00
86     (I, 1,      "GL_PACK_LSB_FIRST"),   # 0x0D01
87     (I, 1,      "GL_PACK_ROW_LENGTH"),  # 0x0D02
88     (I, 1,      "GL_PACK_SKIP_ROWS"),   # 0x0D03
89     (I, 1,      "GL_PACK_SKIP_PIXELS"), # 0x0D04
90     (I, 1,      "GL_PACK_ALIGNMENT"),   # 0x0D05
91     (I, 1,      "GL_MAX_TEXTURE_SIZE"), # 0x0D33
92     (F, 2,      "GL_MAX_VIEWPORT_DIMS"),        # 0x0D3A
93     (I, 1,      "GL_SUBPIXEL_BITS"),    # 0x0D50
94     (I, 1,      "GL_TEXTURE_1D"),       # 0x0DE0
95     (I, 1,      "GL_TEXTURE_2D"),       # 0x0DE1
96     (F, 1,      "GL_POLYGON_OFFSET_UNITS"),     # 0x2A00
97     (I, 1,      "GL_POLYGON_OFFSET_POINT"),     # 0x2A01
98     (I, 1,      "GL_POLYGON_OFFSET_LINE"),      # 0x2A02
99     (I, 1,      "GL_POLYGON_OFFSET_FILL"),      # 0x8037
100     (F, 1,      "GL_POLYGON_OFFSET_FACTOR"),    # 0x8038
101     (I, 1,      "GL_TEXTURE_BINDING_1D"),       # 0x8068
102     (I, 1,      "GL_TEXTURE_BINDING_2D"),       # 0x8069
103     (F, 4,      "GL_CURRENT_COLOR"),    # 0x0B00
104     (F, 1,      "GL_CURRENT_INDEX"),    # 0x0B01
105     (F, 3,      "GL_CURRENT_NORMAL"),   # 0x0B02
106     (F, 4,      "GL_CURRENT_TEXTURE_COORDS"),   # 0x0B03
107     (F, 4,      "GL_CURRENT_RASTER_COLOR"),     # 0x0B04
108     (F, 1,      "GL_CURRENT_RASTER_INDEX"),     # 0x0B05
109     (F, 4,      "GL_CURRENT_RASTER_TEXTURE_COORDS"),    # 0x0B06
110     (F, 4,      "GL_CURRENT_RASTER_POSITION"),  # 0x0B07
111     (I, 1,      "GL_CURRENT_RASTER_POSITION_VALID"),    # 0x0B08
112     (F, 1,      "GL_CURRENT_RASTER_DISTANCE"),  # 0x0B09
113     (I, 1,      "GL_POINT_SMOOTH"),     # 0x0B10
114     (I, 1,      "GL_LINE_STIPPLE"),     # 0x0B24
115     (I, 1,      "GL_LINE_STIPPLE_PATTERN"),     # 0x0B25
116     (I, 1,      "GL_LINE_STIPPLE_REPEAT"),      # 0x0B26
117     (I, 1,      "GL_LIST_MODE"),        # 0x0B30
118     (I, 1,      "GL_MAX_LIST_NESTING"), # 0x0B31
119     (I, 1,      "GL_LIST_BASE"),        # 0x0B32
120     (I, 1,      "GL_LIST_INDEX"),       # 0x0B33
121     (I, 2,      "GL_POLYGON_MODE"),     # 0x0B40
122     (I, 1,      "GL_POLYGON_STIPPLE"),  # 0x0B42
123     (I, 1,      "GL_EDGE_FLAG"),        # 0x0B43
124     (I, 1,      "GL_LIGHTING"), # 0x0B50
125     (I, 1,      "GL_LIGHT_MODEL_LOCAL_VIEWER"), # 0x0B51
126     (I, 1,      "GL_LIGHT_MODEL_TWO_SIDE"),     # 0x0B52
127     (F, 4,      "GL_LIGHT_MODEL_AMBIENT"),      # 0x0B53
128     (I, 1,      "GL_SHADE_MODEL"),      # 0x0B54
129     (I, 1,      "GL_COLOR_MATERIAL_FACE"),      # 0x0B55
130     (I, 1,      "GL_COLOR_MATERIAL_PARAMETER"), # 0x0B56
131     (I, 1,      "GL_COLOR_MATERIAL"),   # 0x0B57
132     (I, 1,      "GL_FOG"),      # 0x0B60
133     (I, 1,      "GL_FOG_INDEX"),        # 0x0B61
134     (F, 1,      "GL_FOG_DENSITY"),      # 0x0B62
135     (F, 1,      "GL_FOG_START"),        # 0x0B63
136     (F, 1,      "GL_FOG_END"),  # 0x0B64
137     (I, 1,      "GL_FOG_MODE"), # 0x0B65
138     (F, 4,      "GL_FOG_COLOR"),        # 0x0B66
139     (F, 4,      "GL_ACCUM_CLEAR_VALUE"),        # 0x0B80
140     (I, 1,      "GL_MATRIX_MODE"),      # 0x0BA0
141     (I, 1,      "GL_NORMALIZE"),        # 0x0BA1
142     (I, 1,      "GL_MODELVIEW_STACK_DEPTH"),    # 0x0BA3
143     (I, 1,      "GL_PROJECTION_STACK_DEPTH"),   # 0x0BA4
144     (I, 1,      "GL_TEXTURE_STACK_DEPTH"),      # 0x0BA5
145     (F, 16,     "GL_MODELVIEW_MATRIX"), # 0x0BA6
146     (F, 16,     "GL_PROJECTION_MATRIX"),        # 0x0BA7
147     (F, 16,     "GL_TEXTURE_MATRIX"),   # 0x0BA8
148     (I, 1,      "GL_ATTRIB_STACK_DEPTH"),       # 0x0BB0
149     (I, 1,      "GL_CLIENT_ATTRIB_STACK_DEPTH"),        # 0x0BB1
150     (I, 1,      "GL_ALPHA_TEST"),       # 0x0BC0
151     (I, 1,      "GL_ALPHA_TEST_FUNC"),  # 0x0BC1
152     (F, 1,      "GL_ALPHA_TEST_REF"),   # 0x0BC2
153     (I, 1,      "GL_INDEX_LOGIC_OP"),   # 0x0BF1
154     (I, 1,      "GL_LOGIC_OP"), # 0x0BF1
155     (I, 1,      "GL_AUX_BUFFERS"),      # 0x0C00
156     (I, 1,      "GL_INDEX_CLEAR_VALUE"),        # 0x0C20
157     (I, 1,      "GL_INDEX_WRITEMASK"),  # 0x0C21
158     (I, 1,      "GL_INDEX_MODE"),       # 0x0C30
159     (I, 1,      "GL_RGBA_MODE"),        # 0x0C31
160     (I, 1,      "GL_RENDER_MODE"),      # 0x0C40
161     (I, 1,      "GL_PERSPECTIVE_CORRECTION_HINT"),      # 0x0C50
162     (I, 1,      "GL_POINT_SMOOTH_HINT"),        # 0x0C51
163     (I, 1,      "GL_FOG_HINT"), # 0x0C54
164     (I, 1,      "GL_TEXTURE_GEN_S"),    # 0x0C60
165     (I, 1,      "GL_TEXTURE_GEN_T"),    # 0x0C61
166     (I, 1,      "GL_TEXTURE_GEN_R"),    # 0x0C62
167     (I, 1,      "GL_TEXTURE_GEN_Q"),    # 0x0C63
168     (I, 1,      "GL_PIXEL_MAP_I_TO_I_SIZE"),    # 0x0CB0
169     (I, 1,      "GL_PIXEL_MAP_S_TO_S_SIZE"),    # 0x0CB1
170     (I, 1,      "GL_PIXEL_MAP_I_TO_R_SIZE"),    # 0x0CB2
171     (I, 1,      "GL_PIXEL_MAP_I_TO_G_SIZE"),    # 0x0CB3
172     (I, 1,      "GL_PIXEL_MAP_I_TO_B_SIZE"),    # 0x0CB4
173     (I, 1,      "GL_PIXEL_MAP_I_TO_A_SIZE"),    # 0x0CB5
174     (I, 1,      "GL_PIXEL_MAP_R_TO_R_SIZE"),    # 0x0CB6
175     (I, 1,      "GL_PIXEL_MAP_G_TO_G_SIZE"),    # 0x0CB7
176     (I, 1,      "GL_PIXEL_MAP_B_TO_B_SIZE"),    # 0x0CB8
177     (I, 1,      "GL_PIXEL_MAP_A_TO_A_SIZE"),    # 0x0CB9
178     (I, 1,      "GL_MAP_COLOR"),        # 0x0D10
179     (I, 1,      "GL_MAP_STENCIL"),      # 0x0D11
180     (I, 1,      "GL_INDEX_SHIFT"),      # 0x0D12
181     (I, 1,      "GL_INDEX_OFFSET"),     # 0x0D13
182     (F, 1,      "GL_RED_SCALE"),        # 0x0D14
183     (F, 1,      "GL_RED_BIAS"), # 0x0D15
184     (F, 1,      "GL_ZOOM_X"),   # 0x0D16
185     (F, 1,      "GL_ZOOM_Y"),   # 0x0D17
186     (F, 1,      "GL_GREEN_SCALE"),      # 0x0D18
187     (F, 1,      "GL_GREEN_BIAS"),       # 0x0D19
188     (F, 1,      "GL_BLUE_SCALE"),       # 0x0D1A
189     (F, 1,      "GL_BLUE_BIAS"),        # 0x0D1B
190     (F, 1,      "GL_ALPHA_SCALE"),      # 0x0D1C
191     (F, 1,      "GL_ALPHA_BIAS"),       # 0x0D1D
192     (F, 1,      "GL_DEPTH_SCALE"),      # 0x0D1E
193     (F, 1,      "GL_DEPTH_BIAS"),       # 0x0D1F
194     (I, 1,      "GL_MAX_EVAL_ORDER"),   # 0x0D30
195     (I, 1,      "GL_MAX_LIGHTS"),       # 0x0D31
196     (I, 1,      "GL_MAX_CLIP_PLANES"),  # 0x0D32
197     (I, 1,      "GL_MAX_PIXEL_MAP_TABLE"),      # 0x0D34
198     (I, 1,      "GL_MAX_ATTRIB_STACK_DEPTH"),   # 0x0D35
199     (I, 1,      "GL_MAX_MODELVIEW_STACK_DEPTH"),        # 0x0D36
200     (I, 1,      "GL_MAX_NAME_STACK_DEPTH"),     # 0x0D37
201     (I, 1,      "GL_MAX_PROJECTION_STACK_DEPTH"),       # 0x0D38
202     (I, 1,      "GL_MAX_TEXTURE_STACK_DEPTH"),  # 0x0D39
203     (I, 1,      "GL_MAX_CLIENT_ATTRIB_STACK_DEPTH"),    # 0x0D3B
204     (I, 1,      "GL_INDEX_BITS"),       # 0x0D51
205     (I, 1,      "GL_RED_BITS"), # 0x0D52
206     (I, 1,      "GL_GREEN_BITS"),       # 0x0D53
207     (I, 1,      "GL_BLUE_BITS"),        # 0x0D54
208     (I, 1,      "GL_ALPHA_BITS"),       # 0x0D55
209     (I, 1,      "GL_DEPTH_BITS"),       # 0x0D56
210     (I, 1,      "GL_STENCIL_BITS"),     # 0x0D57
211     (I, 1,      "GL_ACCUM_RED_BITS"),   # 0x0D58
212     (I, 1,      "GL_ACCUM_GREEN_BITS"), # 0x0D59
213     (I, 1,      "GL_ACCUM_BLUE_BITS"),  # 0x0D5A
214     (I, 1,      "GL_ACCUM_ALPHA_BITS"), # 0x0D5B
215     (I, 1,      "GL_NAME_STACK_DEPTH"), # 0x0D70
216     (I, 1,      "GL_AUTO_NORMAL"),      # 0x0D80
217     (I, 1,      "GL_MAP1_COLOR_4"),     # 0x0D90
218     (I, 1,      "GL_MAP1_INDEX"),       # 0x0D91
219     (I, 1,      "GL_MAP1_NORMAL"),      # 0x0D92
220     (I, 1,      "GL_MAP1_TEXTURE_COORD_1"),     # 0x0D93
221     (I, 1,      "GL_MAP1_TEXTURE_COORD_2"),     # 0x0D94
222     (I, 1,      "GL_MAP1_TEXTURE_COORD_3"),     # 0x0D95
223     (I, 1,      "GL_MAP1_TEXTURE_COORD_4"),     # 0x0D96
224     (I, 1,      "GL_MAP1_VERTEX_3"),    # 0x0D97
225     (I, 1,      "GL_MAP1_VERTEX_4"),    # 0x0D98
226     (I, 1,      "GL_MAP2_COLOR_4"),     # 0x0DB0
227     (I, 1,      "GL_MAP2_INDEX"),       # 0x0DB1
228     (I, 1,      "GL_MAP2_NORMAL"),      # 0x0DB2
229     (I, 1,      "GL_MAP2_TEXTURE_COORD_1"),     # 0x0DB3
230     (I, 1,      "GL_MAP2_TEXTURE_COORD_2"),     # 0x0DB4
231     (I, 1,      "GL_MAP2_TEXTURE_COORD_3"),     # 0x0DB5
232     (I, 1,      "GL_MAP2_TEXTURE_COORD_4"),     # 0x0DB6
233     (I, 1,      "GL_MAP2_VERTEX_3"),    # 0x0DB7
234     (I, 1,      "GL_MAP2_VERTEX_4"),    # 0x0DB8
235     (F, 2,      "GL_MAP1_GRID_DOMAIN"), # 0x0DD0
236     (I, 1,      "GL_MAP1_GRID_SEGMENTS"),       # 0x0DD1
237     (F, 4,      "GL_MAP2_GRID_DOMAIN"), # 0x0DD2
238     (I, 2,      "GL_MAP2_GRID_SEGMENTS"),       # 0x0DD3
239     (I, 1,      "GL_FEEDBACK_BUFFER_SIZE"),     # 0x0DF1
240     (I, 1,      "GL_FEEDBACK_BUFFER_TYPE"),     # 0x0DF2
241     (I, 1,      "GL_SELECTION_BUFFER_SIZE"),    # 0x0DF4
242     (I, 1,      "GL_VERTEX_ARRAY"),     # 0x8074
243     (I, 1,      "GL_NORMAL_ARRAY"),     # 0x8075
244     (I, 1,      "GL_COLOR_ARRAY"),      # 0x8076
245     (I, 1,      "GL_INDEX_ARRAY"),      # 0x8077
246     (I, 1,      "GL_TEXTURE_COORD_ARRAY"),      # 0x8078
247     (I, 1,      "GL_EDGE_FLAG_ARRAY"),  # 0x8079
248     (I, 1,      "GL_VERTEX_ARRAY_SIZE"),        # 0x807A
249     (I, 1,      "GL_VERTEX_ARRAY_TYPE"),        # 0x807B
250     (I, 1,      "GL_VERTEX_ARRAY_STRIDE"),      # 0x807C
251     (I, 1,      "GL_NORMAL_ARRAY_TYPE"),        # 0x807E
252     (I, 1,      "GL_NORMAL_ARRAY_STRIDE"),      # 0x807F
253     (I, 1,      "GL_COLOR_ARRAY_SIZE"), # 0x8081
254     (I, 1,      "GL_COLOR_ARRAY_TYPE"), # 0x8082
255     (I, 1,      "GL_COLOR_ARRAY_STRIDE"),       # 0x8083
256     (I, 1,      "GL_INDEX_ARRAY_TYPE"), # 0x8085
257     (I, 1,      "GL_INDEX_ARRAY_STRIDE"),       # 0x8086
258     (I, 1,      "GL_TEXTURE_COORD_ARRAY_SIZE"), # 0x8088
259     (I, 1,      "GL_TEXTURE_COORD_ARRAY_TYPE"), # 0x8089
260     (I, 1,      "GL_TEXTURE_COORD_ARRAY_STRIDE"),       # 0x808A
261     (I, 1,      "GL_EDGE_FLAG_ARRAY_STRIDE"),   # 0x808C
262 ]
263
264
265 class StateDumper:
266
267     def __init__(self):
268         self.level = 0
269
270     def dump(self):
271         print '#include <string.h>'
272         print
273         print '#include "json.hpp"'
274         print '#include "glimports.hpp"'
275         print '#include "glstate.hpp"'
276         print
277         print 'void state_dump(std::ostream &os)'
278         print '{'
279         print '    JSONWriter json(os);'
280         self.dump_parameters()
281
282         print '}'
283         print
284
285     def dump_parameters(self):
286         print '    GLint iparams[16];'
287         print '    GLfloat fparams[16];'
288         print '    json.beginMember("parameters");'
289         print '    json.beginObject();'
290         for type, count, name in parameters:
291             print '    json.beginMember("%s");' % name
292             if type is I:
293                 print '    memset(iparams, 0, %u * sizeof *iparams);' % count
294                 print '    glGetIntegerv(%s, iparams);' % name
295                 if count == 1:
296                     print '    json.writeNumber(iparams[0]);'
297                 else:
298                     print '    json.beginArray();'
299                     for i in range(count):
300                         print '    json.writeNumber(iparams[%u]);' % i
301                     print '    json.endArray();'
302             else:
303                 print '    memset(fparams, 0, %u * sizeof *fparams);' % count
304                 print '    glGetFloatv(%s, fparams);' % name
305                 if count == 1:
306                     print '    json.writeNumber(fparams[0]);'
307                 else:
308                     print '    json.beginArray();'
309                     for i in range(count):
310                         print '    json.writeNumber(fparams[%u]);' % i
311                     print '    json.endArray();'
312             print '    json.endMember();'
313         print '    json.endObject();'
314         print '    json.endMember(); // parameters'
315         print
316             
317     def write_line(s):
318         self.write('  '*self.level + s + '\n')
319
320     def write(self, s):
321         sys.stdout.write(s)
322
323     def indent(self):
324         self.level += 1
325
326     def dedent(self):
327         self.level -= 1
328
329
330
331 if __name__ == '__main__':
332     StateDumper().dump()