Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(112)

Side by Side Diff: ui/gfx/gl/generate_bindings.py

Issue 8872001: Refactor generete_bindings.py so per function logging code and be added. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: GPU_ -> GL_ Created 9 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | ui/gfx/gl/gl_bindings.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """code generator for GL/GLES extension wrangler.""" 6 """code generator for GL/GLES extension wrangler."""
7 7
8 import os 8 import os
9 import collections 9 import collections
10 import re 10 import re
11 import sys 11 import sys
12 12
13 GL_FUNCTIONS = [ 13 GL_FUNCTIONS = [
14 ['void', ['glActiveTexture'], 'GLenum texture'], 14 { 'return_type': 'void',
15 ['void', ['glAttachShader'], 'GLuint program, GLuint shader'], 15 'names': ['glActiveTexture'],
16 ['void', ['glBeginQuery'], 'GLenum target, GLuint id'], 16 'arguments': 'GLenum texture', },
17 ['void', ['glBindAttribLocation'], 17 { 'return_type': 'void',
18 'GLuint program, GLuint index, const char* name'], 18 'names': ['glAttachShader'],
19 ['void', ['glBindBuffer'], 'GLenum target, GLuint buffer'], 19 'arguments': 'GLuint program, GLuint shader', },
20 ['void', ['glBindFragDataLocation'], 20 { 'return_type': 'void',
21 'GLuint program, GLuint colorNumber, const char* name'], 21 'names': ['glBeginQuery'],
22 ['void', ['glBindFragDataLocationIndexed'], 22 'arguments': 'GLenum target, GLuint id', },
23 'GLuint program, GLuint colorNumber, GLuint index, const char* name'], 23 { 'return_type': 'void',
24 ['void', ['glBindFramebufferEXT', 'glBindFramebuffer'], 24 'names': ['glBindAttribLocation'],
25 'GLenum target, GLuint framebuffer'], 25 'arguments': 'GLuint program, GLuint index, const char* name', },
26 ['void', ['glBindRenderbufferEXT', 'glBindRenderbuffer'], 26 { 'return_type': 'void',
27 'GLenum target, GLuint renderbuffer'], 27 'names': ['glBindBuffer'],
28 ['void', ['glBindTexture'], 'GLenum target, GLuint texture'], 28 'arguments': 'GLenum target, GLuint buffer', },
29 ['void', ['glBlendColor'], 29 { 'return_type': 'void',
30 'GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha'], 30 'names': ['glBindFragDataLocation'],
31 ['void', ['glBlendEquation'], ' GLenum mode '], 31 'arguments': 'GLuint program, GLuint colorNumber, const char* name', },
32 ['void', ['glBlendEquationSeparate'], 'GLenum modeRGB, GLenum modeAlpha'], 32 { 'return_type': 'void',
33 ['void', ['glBlendFunc'], 'GLenum sfactor, GLenum dfactor'], 33 'names': ['glBindFragDataLocationIndexed'],
34 ['void', ['glBlendFuncSeparate'], 34 'arguments':
35 'GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha'], 35 'GLuint program, GLuint colorNumber, GLuint index, const char* name', },
36 ['void', ['glBlitFramebufferEXT', 'glBlitFramebuffer'], 36 { 'return_type': 'void',
37 'GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, ' 37 'names': ['glBindFramebufferEXT', 'glBindFramebuffer'],
38 'GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, ' 38 'arguments': 'GLenum target, GLuint framebuffer', },
39 'GLbitfield mask, GLenum filter'], 39 { 'return_type': 'void',
40 ['void', ['glBlitFramebufferANGLE', 'glBlitFramebuffer'], 40 'names': ['glBindRenderbufferEXT', 'glBindRenderbuffer'],
41 'GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, ' 41 'arguments': 'GLenum target, GLuint renderbuffer', },
42 'GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, ' 42 { 'return_type': 'void',
43 'GLbitfield mask, GLenum filter'], 43 'names': ['glBindTexture'],
44 ['void', ['glBufferData'], 44 'arguments': 'GLenum target, GLuint texture', },
45 'GLenum target, GLsizei size, const void* data, GLenum usage'], 45 { 'return_type': 'void',
46 ['void', ['glBufferSubData'], 46 'names': ['glBlendColor'],
47 'GLenum target, GLint offset, GLsizei size, const void* data'], 47 'arguments': 'GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha', },
48 ['GLenum', ['glCheckFramebufferStatusEXT', 48 { 'return_type': 'void',
49 'glCheckFramebufferStatus'], 'GLenum target'], 49 'names': ['glBlendEquation'],
50 ['void', ['glClear'], 'GLbitfield mask'], 50 'arguments': ' GLenum mode ', },
51 ['void', ['glClearColor'], 51 { 'return_type': 'void',
52 'GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha'], 52 'names': ['glBlendEquationSeparate'],
53 ['void', ['glClearDepth'], 'GLclampd depth'], 53 'arguments': 'GLenum modeRGB, GLenum modeAlpha', },
54 ['void', ['glClearDepthf'], 'GLclampf depth'], 54 { 'return_type': 'void',
55 ['void', ['glClearStencil'], 'GLint s'], 55 'names': ['glBlendFunc'],
56 ['void', ['glColorMask'], 56 'arguments': 'GLenum sfactor, GLenum dfactor', },
57 'GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha'], 57 { 'return_type': 'void',
58 ['void', ['glCompileShader'], 'GLuint shader'], 58 'names': ['glBlendFuncSeparate'],
59 ['void', ['glCompressedTexImage2D'], 59 'arguments':
60 'GLenum target, GLint level, GLenum internalformat, GLsizei width, ' 60 'GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha', },
61 'GLsizei height, GLint border, GLsizei imageSize, const void* data'], 61 { 'return_type': 'void',
62 ['void', ['glCompressedTexSubImage2D'], 62 'names': ['glBlitFramebufferEXT', 'glBlitFramebuffer'],
63 'GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, ' 63 'arguments': 'GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, '
64 'GLsizei height, GLenum format, GLsizei imageSize, const void* data'], 64 'GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, '
65 ['void', ['glCopyTexImage2D'], 65 'GLbitfield mask, GLenum filter', },
66 'GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, ' 66 { 'return_type': 'void',
67 'GLsizei width, GLsizei height, GLint border'], 67 'names': ['glBlitFramebufferANGLE', 'glBlitFramebuffer'],
68 ['void', ['glCopyTexSubImage2D'], 'GLenum target, GLint level, GLint xoffset, ' 68 'arguments': 'GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, '
69 'GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height'], 69 'GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, '
70 ['GLuint', ['glCreateProgram'], 'void'], 70 'GLbitfield mask, GLenum filter', },
71 ['GLuint', ['glCreateShader'], 'GLenum type'], 71 { 'return_type': 'void',
72 ['void', ['glCullFace'], 'GLenum mode'], 72 'names': ['glBufferData'],
73 ['void', ['glDeleteBuffersARB', 'glDeleteBuffers'], 73 'arguments': 'GLenum target, GLsizei size, const void* data, GLenum usage', },
74 'GLsizei n, const GLuint* buffers'], 74 { 'return_type': 'void',
75 ['void', ['glDeleteFramebuffersEXT', 'glDeleteFramebuffers'], 75 'names': ['glBufferSubData'],
76 'GLsizei n, const GLuint* framebuffers'], 76 'arguments': 'GLenum target, GLint offset, GLsizei size, const void* data', },
77 ['void', ['glDeleteProgram'], 'GLuint program'], 77 { 'return_type': 'GLenum',
78 ['void', ['glDeleteQueries'], 'GLsizei n, const GLuint* ids'], 78 'names': ['glCheckFramebufferStatusEXT',
79 ['void', ['glDeleteRenderbuffersEXT', 'glDeleteRenderbuffers'], 79 'glCheckFramebufferStatus'],
80 'GLsizei n, const GLuint* renderbuffers'], 80 'arguments': 'GLenum target', },
81 ['void', ['glDeleteShader'], 'GLuint shader'], 81 { 'return_type': 'void',
82 ['void', ['glDeleteTextures'], 'GLsizei n, const GLuint* textures'], 82 'names': ['glClear'],
83 ['void', ['glDepthFunc'], 'GLenum func'], 83 'arguments': 'GLbitfield mask', },
84 ['void', ['glDepthMask'], 'GLboolean flag'], 84 { 'return_type': 'void',
85 ['void', ['glDepthRange'], 'GLclampd zNear, GLclampd zFar'], 85 'names': ['glClearColor'],
86 ['void', ['glDepthRangef'], 'GLclampf zNear, GLclampf zFar'], 86 'arguments': 'GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha', },
87 ['void', ['glDetachShader'], 'GLuint program, GLuint shader'], 87 { 'return_type': 'void',
88 ['void', ['glDisable'], 'GLenum cap'], 88 'names': ['glClearDepth'],
89 ['void', ['glDisableVertexAttribArray'], 'GLuint index'], 89 'arguments': 'GLclampd depth', },
90 ['void', ['glDrawArrays'], 'GLenum mode, GLint first, GLsizei count'], 90 { 'return_type': 'void',
91 ['void', ['glDrawBuffer'], 'GLenum mode'], 91 'names': ['glClearDepthf'],
92 ['void', ['glDrawBuffersARB'], 'GLsizei n, const GLenum* bufs'], 92 'arguments': 'GLclampf depth', },
93 ['void', ['glDrawElements'], 93 { 'return_type': 'void',
94 'GLenum mode, GLsizei count, GLenum type, const void* indices'], 94 'names': ['glClearStencil'],
95 ['void', ['glEGLImageTargetTexture2DOES'], 95 'arguments': 'GLint s', },
96 'GLenum target, GLeglImageOES image'], 96 { 'return_type': 'void',
97 ['void', ['glEnable'], 'GLenum cap'], 97 'names': ['glColorMask'],
98 ['void', ['glEnableVertexAttribArray'], 'GLuint index'], 98 'arguments':
99 ['void', ['glEndQuery'], 'GLenum target'], 99 'GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha', },
100 ['void', ['glFinish'], 'void'], 100 { 'return_type': 'void',
101 ['void', ['glFlush'], 'void'], 101 'names': ['glCompileShader'],
102 ['void', ['glFramebufferRenderbufferEXT', 'glFramebufferRenderbuffer'], 102 'arguments': 'GLuint shader', },
103 'GLenum target, GLenum attachment, GLenum renderbuffertarget, ' 103 { 'return_type': 'void',
104 'GLuint renderbuffer'], 104 'names': ['glCompressedTexImage2D'],
105 ['void', ['glFramebufferTexture2DEXT', 'glFramebufferTexture2D'], 105 'arguments':
106 'GLenum target, GLenum attachment, GLenum textarget, GLuint texture, ' 106 'GLenum target, GLint level, GLenum internalformat, GLsizei width, '
107 'GLint level'], 107 'GLsizei height, GLint border, GLsizei imageSize, const void* data', },
108 ['void', ['glFrontFace'], 'GLenum mode'], 108 { 'return_type': 'void',
109 ['void', ['glGenBuffersARB', 'glGenBuffers'], 'GLsizei n, GLuint* buffers'], 109 'names': ['glCompressedTexSubImage2D'],
110 ['void', ['glGenQueries'], 'GLsizei n, GLuint* ids'], 110 'arguments':
111 ['void', ['glGenerateMipmapEXT', 'glGenerateMipmap'], 'GLenum target'], 111 'GLenum target, GLint level, GLint xoffset, GLint yoffset, '
112 ['void', ['glGenFramebuffersEXT', 'glGenFramebuffers'], 112 'GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, '
113 'GLsizei n, GLuint* framebuffers'], 113 'const void* data', },
114 ['void', ['glGenRenderbuffersEXT', 'glGenRenderbuffers'], 114 { 'return_type': 'void',
115 'GLsizei n, GLuint* renderbuffers'], 115 'names': ['glCopyTexImage2D'],
116 ['void', ['glGenTextures'], 'GLsizei n, GLuint* textures'], 116 'arguments':
117 ['void', ['glGetActiveAttrib'], 117 'GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, '
118 'GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, ' 118 'GLsizei width, GLsizei height, GLint border', },
119 'GLint* size, GLenum* type, char* name'], 119 { 'return_type': 'void',
120 ['void', ['glGetActiveUniform'], 120 'names': ['glCopyTexSubImage2D'],
121 'GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, ' 121 'arguments':
122 'GLint* size, GLenum* type, char* name'], 122 'GLenum target, GLint level, GLint xoffset, '
123 ['void', ['glGetAttachedShaders'], 123 'GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height', },
124 'GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders'], 124 { 'return_type': 'GLuint',
125 ['GLint', ['glGetAttribLocation'], 'GLuint program, const char* name'], 125 'names': ['glCreateProgram'],
126 ['void', ['glGetBooleanv'], 'GLenum pname, GLboolean* params'], 126 'arguments': 'void', },
127 ['void', ['glGetBufferParameteriv'], 127 { 'return_type': 'GLuint',
128 'GLenum target, GLenum pname, GLint* params'], 128 'names': ['glCreateShader'],
129 ['GLenum', ['glGetError'], 'void'], 129 'arguments': 'GLenum type', },
130 ['void', ['glGetFloatv'], 'GLenum pname, GLfloat* params'], 130 { 'return_type': 'void',
131 ['void', ['glGetFramebufferAttachmentParameterivEXT', 131 'names': ['glCullFace'],
132 'glGetFramebufferAttachmentParameteriv'], 'GLenum target, ' 132 'arguments': 'GLenum mode', },
133 'GLenum attachment, GLenum pname, GLint* params'], 133 { 'return_type': 'void',
134 ['GLenum', ['glGetGraphicsResetStatusARB'], 'void'], 134 'names': ['glDeleteBuffersARB', 'glDeleteBuffers'],
135 ['void', ['glGetIntegerv'], 'GLenum pname, GLint* params'], 135 'arguments': 'GLsizei n, const GLuint* buffers', },
136 ['void', ['glGetProgramiv'], 'GLuint program, GLenum pname, GLint* params'], 136 { 'return_type': 'void',
137 ['void', ['glGetProgramInfoLog'], 137 'names': ['glDeleteFramebuffersEXT', 'glDeleteFramebuffers'],
138 'GLuint program, GLsizei bufsize, GLsizei* length, char* infolog'], 138 'arguments': 'GLsizei n, const GLuint* framebuffers', },
139 ['void', ['glGetQueryiv'], 'GLenum target, GLenum pname, GLint* params'], 139 { 'return_type': 'void',
140 ['void', ['glGetQueryObjecti64v'], 'GLuint id, GLenum pname, GLint64* params'], 140 'names': ['glDeleteProgram'],
141 ['void', ['glGetQueryObjectiv'], 'GLuint id, GLenum pname, GLint* params'], 141 'arguments': 'GLuint program', },
142 ['void', ['glGetQueryObjectui64v'], 142 { 'return_type': 'void',
143 'GLuint id, GLenum pname, GLuint64* params'], 143 'names': ['glDeleteQueries'],
144 ['void', ['glGetQueryObjectuiv'], 'GLuint id, GLenum pname, GLuint* params'], 144 'arguments': 'GLsizei n, const GLuint* ids', },
145 ['void', ['glGetRenderbufferParameterivEXT', 'glGetRenderbufferParameteriv'], 145 { 'return_type': 'void',
146 'GLenum target, GLenum pname, GLint* params'], 146 'names': ['glDeleteRenderbuffersEXT', 'glDeleteRenderbuffers'],
147 ['void', ['glGetShaderiv'], 'GLuint shader, GLenum pname, GLint* params'], 147 'arguments': 'GLsizei n, const GLuint* renderbuffers', },
148 ['void', ['glGetShaderInfoLog'], 148 { 'return_type': 'void',
149 'GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog'], 149 'names': ['glDeleteShader'],
150 ['void', ['glGetShaderPrecisionFormat'], 150 'arguments': 'GLuint shader', },
151 'GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision'], 151 { 'return_type': 'void',
152 ['void', ['glGetShaderSource'], 152 'names': ['glDeleteTextures'],
153 'GLuint shader, GLsizei bufsize, GLsizei* length, char* source'], 153 'arguments': 'GLsizei n, const GLuint* textures', },
154 ['const GLubyte*', ['glGetString'], 'GLenum name'], 154 { 'return_type': 'void',
155 ['void', ['glGetTexLevelParameterfv'], 155 'names': ['glDepthFunc'],
156 'GLenum target, GLint level, GLenum pname, GLfloat* params'], 156 'arguments': 'GLenum func', },
157 ['void', ['glGetTexLevelParameteriv'], 157 { 'return_type': 'void',
158 'GLenum target, GLint level, GLenum pname, GLint* params'], 158 'names': ['glDepthMask'],
159 ['void', ['glGetTexParameterfv'], 159 'arguments': 'GLboolean flag', },
160 'GLenum target, GLenum pname, GLfloat* params'], 160 { 'return_type': 'void',
161 ['void', ['glGetTexParameteriv'], 'GLenum target, GLenum pname, GLint* params'], 161 'names': ['glDepthRange'],
162 ['void', ['glGetTranslatedShaderSourceANGLE'], 162 'arguments': 'GLclampd zNear, GLclampd zFar', },
163 'GLuint shader, GLsizei bufsize, GLsizei* length, char* source'], 163 { 'return_type': 'void',
164 ['void', ['glGetUniformfv'], 'GLuint program, GLint location, GLfloat* params'], 164 'names': ['glDepthRangef'],
165 ['void', ['glGetUniformiv'], 'GLuint program, GLint location, GLint* params'], 165 'arguments': 'GLclampf zNear, GLclampf zFar', },
166 ['GLint', ['glGetUniformLocation'], 'GLuint program, const char* name'], 166 { 'return_type': 'void',
167 ['void', ['glGetVertexAttribfv'], 167 'names': ['glDetachShader'],
168 'GLuint index, GLenum pname, GLfloat* params'], 168 'arguments': 'GLuint program, GLuint shader', },
169 ['void', ['glGetVertexAttribiv'], 'GLuint index, GLenum pname, GLint* params'], 169 { 'return_type': 'void',
170 ['void', ['glGetVertexAttribPointerv'], 170 'names': ['glDisable'],
171 'GLuint index, GLenum pname, void** pointer'], 171 'arguments': 'GLenum cap', },
172 ['void', ['glHint'], 'GLenum target, GLenum mode'], 172 { 'return_type': 'void',
173 ['GLboolean', ['glIsBuffer'], 'GLuint buffer'], 173 'names': ['glDisableVertexAttribArray'],
174 ['GLboolean', ['glIsEnabled'], 'GLenum cap'], 174 'arguments': 'GLuint index', },
175 ['GLboolean', ['glIsFramebufferEXT', 'glIsFramebuffer'], 175 { 'return_type': 'void',
176 'GLuint framebuffer'], 176 'names': ['glDrawArrays'],
177 ['GLboolean', ['glIsProgram'], 'GLuint program'], 177 'arguments': 'GLenum mode, GLint first, GLsizei count', },
178 ['GLboolean', ['glIsRenderbufferEXT', 'glIsRenderbuffer'], 178 { 'return_type': 'void',
179 'GLuint renderbuffer'], 179 'names': ['glDrawBuffer'],
180 ['GLboolean', ['glIsShader'], 'GLuint shader'], 180 'arguments': 'GLenum mode', },
181 ['GLboolean', ['glIsTexture'], 'GLuint texture'], 181 { 'return_type': 'void',
182 ['void', ['glLineWidth'], 'GLfloat width'], 182 'names': ['glDrawBuffersARB'],
183 ['void', ['glLinkProgram'], 'GLuint program'], 183 'arguments': 'GLsizei n, const GLenum* bufs', },
184 ['void*', ['glMapBuffer', 'glMapBufferOES'], 'GLenum target, GLenum access'], 184 { 'return_type': 'void',
185 ['void', ['glPixelStorei'], 'GLenum pname, GLint param'], 185 'names': ['glDrawElements'],
186 ['void', ['glPolygonOffset'], 'GLfloat factor, GLfloat units'], 186 'arguments':
187 ['void', ['glQueryCounter'], 'GLuint id, GLenum target'], 187 'GLenum mode, GLsizei count, GLenum type, const void* indices', },
188 ['void', ['glReadBuffer'], 'GLenum src'], 188 { 'return_type': 'void',
189 ['void', ['glReadPixels'], 189 'names': ['glEGLImageTargetTexture2DOES'],
190 'arguments': 'GLenum target, GLeglImageOES image', },
191 { 'return_type': 'void',
192 'names': ['glEnable'],
193 'arguments': 'GLenum cap', },
194 { 'return_type': 'void',
195 'names': ['glEnableVertexAttribArray'],
196 'arguments': 'GLuint index', },
197 { 'return_type': 'void',
198 'names': ['glEndQuery'],
199 'arguments': 'GLenum target', },
200 { 'return_type': 'void',
201 'names': ['glFinish'],
202 'arguments': 'void', },
203 { 'return_type': 'void',
204 'names': ['glFlush'],
205 'arguments': 'void', },
206 { 'return_type': 'void',
207 'names': ['glFramebufferRenderbufferEXT', 'glFramebufferRenderbuffer'],
208 'arguments': \
209 'GLenum target, GLenum attachment, GLenum renderbuffertarget, '
210 'GLuint renderbuffer', },
211 { 'return_type': 'void',
212 'names': ['glFramebufferTexture2DEXT', 'glFramebufferTexture2D'],
213 'arguments':
214 'GLenum target, GLenum attachment, GLenum textarget, GLuint texture, '
215 'GLint level', },
216 { 'return_type': 'void',
217 'names': ['glFrontFace'],
218 'arguments': 'GLenum mode', },
219 { 'return_type': 'void',
220 'names': ['glGenBuffersARB', 'glGenBuffers'],
221 'arguments': 'GLsizei n, GLuint* buffers', },
222 { 'return_type': 'void',
223 'names': ['glGenQueries'],
224 'arguments': 'GLsizei n, GLuint* ids', },
225 { 'return_type': 'void',
226 'names': ['glGenerateMipmapEXT', 'glGenerateMipmap'],
227 'arguments': 'GLenum target', },
228 { 'return_type': 'void',
229 'names': ['glGenFramebuffersEXT', 'glGenFramebuffers'],
230 'arguments': 'GLsizei n, GLuint* framebuffers', },
231 { 'return_type': 'void',
232 'names': ['glGenRenderbuffersEXT', 'glGenRenderbuffers'],
233 'arguments': 'GLsizei n, GLuint* renderbuffers', },
234 { 'return_type': 'void',
235 'names': ['glGenTextures'],
236 'arguments': 'GLsizei n, GLuint* textures', },
237 { 'return_type': 'void',
238 'names': ['glGetActiveAttrib'],
239 'arguments':
240 'GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, '
241 'GLint* size, GLenum* type, char* name', },
242 { 'return_type': 'void',
243 'names': ['glGetActiveUniform'],
244 'arguments':
245 'GLuint program, GLuint index, GLsizei bufsize, GLsizei* length, '
246 'GLint* size, GLenum* type, char* name', },
247 { 'return_type': 'void',
248 'names': ['glGetAttachedShaders'],
249 'arguments':
250 'GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders', },
251 { 'return_type': 'GLint',
252 'names': ['glGetAttribLocation'],
253 'arguments': 'GLuint program, const char* name', },
254 { 'return_type': 'void',
255 'names': ['glGetBooleanv'],
256 'arguments': 'GLenum pname, GLboolean* params', },
257 { 'return_type': 'void',
258 'names': ['glGetBufferParameteriv'],
259 'arguments': 'GLenum target, GLenum pname, GLint* params', },
260 { 'return_type': 'GLenum',
261 'names': ['glGetError'],
262 'arguments': 'void', },
263 { 'return_type': 'void',
264 'names': ['glGetFloatv'],
265 'arguments': 'GLenum pname, GLfloat* params', },
266 { 'return_type': 'void',
267 'names': ['glGetFramebufferAttachmentParameterivEXT',
268 'glGetFramebufferAttachmentParameteriv'],
269 'arguments': 'GLenum target, '
270 'GLenum attachment, GLenum pname, GLint* params', },
271 { 'return_type': 'GLenum',
272 'names': ['glGetGraphicsResetStatusARB'],
273 'arguments': 'void', },
274 { 'return_type': 'void',
275 'names': ['glGetIntegerv'],
276 'arguments': 'GLenum pname, GLint* params', },
277 { 'return_type': 'void',
278 'names': ['glGetProgramiv'],
279 'arguments': 'GLuint program, GLenum pname, GLint* params', },
280 { 'return_type': 'void',
281 'names': ['glGetProgramInfoLog'],
282 'arguments':
283 'GLuint program, GLsizei bufsize, GLsizei* length, char* infolog', },
284 { 'return_type': 'void',
285 'names': ['glGetQueryiv'],
286 'arguments': 'GLenum target, GLenum pname, GLint* params', },
287 { 'return_type': 'void',
288 'names': ['glGetQueryObjecti64v'],
289 'arguments': 'GLuint id, GLenum pname, GLint64* params', },
290 { 'return_type': 'void',
291 'names': ['glGetQueryObjectiv'],
292 'arguments': 'GLuint id, GLenum pname, GLint* params', },
293 { 'return_type': 'void',
294 'names': ['glGetQueryObjectui64v'],
295 'arguments': 'GLuint id, GLenum pname, GLuint64* params', },
296 { 'return_type': 'void',
297 'names': ['glGetQueryObjectuiv'],
298 'arguments': 'GLuint id, GLenum pname, GLuint* params', },
299 { 'return_type': 'void',
300 'names': ['glGetRenderbufferParameterivEXT', 'glGetRenderbufferParameteriv'],
301 'arguments': 'GLenum target, GLenum pname, GLint* params', },
302 { 'return_type': 'void',
303 'names': ['glGetShaderiv'],
304 'arguments': 'GLuint shader, GLenum pname, GLint* params', },
305 { 'return_type': 'void',
306 'names': ['glGetShaderInfoLog'],
307 'arguments':
308 'GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog', },
309 { 'return_type': 'void',
310 'names': ['glGetShaderPrecisionFormat'],
311 'arguments': 'GLenum shadertype, GLenum precisiontype, '
312 'GLint* range, GLint* precision', },
313 { 'return_type': 'void',
314 'names': ['glGetShaderSource'],
315 'arguments':
316 'GLuint shader, GLsizei bufsize, GLsizei* length, char* source', },
317 { 'return_type': 'const GLubyte*',
318 'names': ['glGetString'],
319 'arguments': 'GLenum name', },
320 { 'return_type': 'void',
321 'names': ['glGetTexLevelParameterfv'],
322 'arguments': 'GLenum target, GLint level, GLenum pname, GLfloat* params', },
323 { 'return_type': 'void',
324 'names': ['glGetTexLevelParameteriv'],
325 'arguments': 'GLenum target, GLint level, GLenum pname, GLint* params', },
326 { 'return_type': 'void',
327 'names': ['glGetTexParameterfv'],
328 'arguments': 'GLenum target, GLenum pname, GLfloat* params', },
329 { 'return_type': 'void',
330 'names': ['glGetTexParameteriv'],
331 'arguments': 'GLenum target, GLenum pname, GLint* params', },
332 { 'return_type': 'void',
333 'names': ['glGetTranslatedShaderSourceANGLE'],
334 'arguments':
335 'GLuint shader, GLsizei bufsize, GLsizei* length, char* source', },
336 { 'return_type': 'void',
337 'names': ['glGetUniformfv'],
338 'arguments': 'GLuint program, GLint location, GLfloat* params', },
339 { 'return_type': 'void',
340 'names': ['glGetUniformiv'],
341 'arguments': 'GLuint program, GLint location, GLint* params', },
342 { 'return_type': 'GLint',
343 'names': ['glGetUniformLocation'],
344 'arguments': 'GLuint program, const char* name', },
345 { 'return_type': 'void',
346 'names': ['glGetVertexAttribfv'],
347 'arguments': 'GLuint index, GLenum pname, GLfloat* params', },
348 { 'return_type': 'void',
349 'names': ['glGetVertexAttribiv'],
350 'arguments': 'GLuint index, GLenum pname, GLint* params', },
351 { 'return_type': 'void',
352 'names': ['glGetVertexAttribPointerv'],
353 'arguments': 'GLuint index, GLenum pname, void** pointer', },
354 { 'return_type': 'void',
355 'names': ['glHint'],
356 'arguments': 'GLenum target, GLenum mode', },
357 { 'return_type': 'GLboolean',
358 'names': ['glIsBuffer'],
359 'arguments': 'GLuint buffer', },
360 { 'return_type': 'GLboolean',
361 'names': ['glIsEnabled'],
362 'arguments': 'GLenum cap', },
363 { 'return_type': 'GLboolean',
364 'names': ['glIsFramebufferEXT', 'glIsFramebuffer'],
365 'arguments': 'GLuint framebuffer', },
366 { 'return_type': 'GLboolean',
367 'names': ['glIsProgram'],
368 'arguments': 'GLuint program', },
369 { 'return_type': 'GLboolean',
370 'names': ['glIsRenderbufferEXT', 'glIsRenderbuffer'],
371 'arguments': 'GLuint renderbuffer', },
372 { 'return_type': 'GLboolean',
373 'names': ['glIsShader'],
374 'arguments': 'GLuint shader', },
375 { 'return_type': 'GLboolean',
376 'names': ['glIsTexture'],
377 'arguments': 'GLuint texture', },
378 { 'return_type': 'void',
379 'names': ['glLineWidth'],
380 'arguments': 'GLfloat width', },
381 { 'return_type': 'void',
382 'names': ['glLinkProgram'],
383 'arguments': 'GLuint program', },
384 { 'return_type': 'void*',
385 'names': ['glMapBuffer', 'glMapBufferOES'],
386 'arguments': 'GLenum target, GLenum access', },
387 { 'return_type': 'void',
388 'names': ['glPixelStorei'],
389 'arguments': 'GLenum pname, GLint param', },
390 { 'return_type': 'void',
391 'names': ['glPolygonOffset'],
392 'arguments': 'GLfloat factor, GLfloat units', },
393 { 'return_type': 'void',
394 'names': ['glQueryCounter'],
395 'arguments': 'GLuint id, GLenum target', },
396 { 'return_type': 'void',
397 'names': ['glReadBuffer'],
398 'arguments': 'GLenum src', },
399 { 'return_type': 'void',
400 'names': ['glReadPixels'],
401 'arguments':
190 'GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, ' 402 'GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, '
191 'GLenum type, void* pixels'], 403 'GLenum type, void* pixels', },
192 ['void', ['glReleaseShaderCompiler'], 'void'], 404 { 'return_type': 'void',
193 ['void', ['glRenderbufferStorageMultisampleEXT', 405 'names': ['glReleaseShaderCompiler'],
194 'glRenderbufferStorageMultisample'], 406 'arguments': 'void', },
195 'GLenum target, GLsizei samples, GLenum internalformat, ' 407 { 'return_type': 'void',
196 'GLsizei width, GLsizei height'], 408 'names': ['glRenderbufferStorageMultisampleEXT',
197 ['void', ['glRenderbufferStorageMultisampleANGLE', 409 'glRenderbufferStorageMultisample'],
198 'glRenderbufferStorageMultisample'], 410 'arguments': 'GLenum target, GLsizei samples, GLenum internalformat, '
199 'GLenum target, GLsizei samples, GLenum internalformat, ' 411 'GLsizei width, GLsizei height', },
200 'GLsizei width, GLsizei height'], 412 { 'return_type': 'void',
201 ['void', ['glRenderbufferStorageEXT', 'glRenderbufferStorage'], 413 'names': ['glRenderbufferStorageMultisampleANGLE',
202 'GLenum target, GLenum internalformat, GLsizei width, GLsizei height'], 414 'glRenderbufferStorageMultisample'],
203 ['void', ['glSampleCoverage'], 'GLclampf value, GLboolean invert'], 415 'arguments': 'GLenum target, GLsizei samples, GLenum internalformat, '
204 ['void', ['glScissor'], 'GLint x, GLint y, GLsizei width, GLsizei height'], 416 'GLsizei width, GLsizei height', },
205 ['void', ['glShaderBinary'], 417 { 'return_type': 'void',
206 'GLsizei n, const GLuint* shaders, GLenum binaryformat, ' 418 'names': ['glRenderbufferStorageEXT', 'glRenderbufferStorage'],
207 'const void* binary, GLsizei length'], 419 'arguments':
208 ['void', ['glShaderSource'], 420 'GLenum target, GLenum internalformat, GLsizei width, GLsizei height', },
209 'GLuint shader, GLsizei count, const char** str, const GLint* length'], 421 { 'return_type': 'void',
210 ['void', ['glStencilFunc'], 'GLenum func, GLint ref, GLuint mask'], 422 'names': ['glSampleCoverage'],
211 ['void', ['glStencilFuncSeparate'], 423 'arguments': 'GLclampf value, GLboolean invert', },
212 'GLenum face, GLenum func, GLint ref, GLuint mask'], 424 { 'return_type': 'void',
213 ['void', ['glStencilMask'], 'GLuint mask'], 425 'names': ['glScissor'],
214 ['void', ['glStencilMaskSeparate'], 'GLenum face, GLuint mask'], 426 'arguments': 'GLint x, GLint y, GLsizei width, GLsizei height', },
215 ['void', ['glStencilOp'], 'GLenum fail, GLenum zfail, GLenum zpass'], 427 { 'return_type': 'void',
216 ['void', ['glStencilOpSeparate'], 428 'names': ['glShaderBinary'],
217 'GLenum face, GLenum fail, GLenum zfail, GLenum zpass'], 429 'arguments': 'GLsizei n, const GLuint* shaders, GLenum binaryformat, '
218 ['void', ['glTexImage2D'], 430 'const void* binary, GLsizei length', },
219 'GLenum target, GLint level, GLint internalformat, GLsizei width, ' 431 { 'return_type': 'void',
220 'GLsizei height, GLint border, GLenum format, GLenum type, ' 432 'names': ['glShaderSource'],
221 'const void* pixels'], 433 'arguments':
222 ['void', ['glTexParameterf'], 'GLenum target, GLenum pname, GLfloat param'], 434 'GLuint shader, GLsizei count, const char** str, const GLint* length',
223 ['void', ['glTexParameterfv'], 435 'logging_code': """
224 'GLenum target, GLenum pname, const GLfloat* params'], 436 GL_SERVICE_LOG_CODE_BLOCK({
225 ['void', ['glTexParameteri'], 'GLenum target, GLenum pname, GLint param'], 437 for (GLsizei ii = 0; ii < count; ++ii) {
226 ['void', ['glTexParameteriv'], 438 if (str[ii]) {
227 'GLenum target, GLenum pname, const GLint* params'], 439 if (length && length[ii] >= 0) {
228 ['void', ['glTexStorage2DEXT'], 440 std::string source(str[ii], length[ii]);
229 'GLenum target, GLsizei levels, GLenum internalformat, ' 441 GL_SERVICE_LOG(" " << ii << ": ---\\n" << source << "\\n---");
230 'GLsizei width, GLsizei height'], 442 } else {
231 ['void', ['glTexSubImage2D'], 443 GL_SERVICE_LOG(" " << ii << ": ---\\n" << str[ii] << "\\n---");
232 'GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, ' 444 }
233 'GLsizei height, GLenum format, GLenum type, const void* pixels'], 445 } else {
234 ['void', ['glUniform1f'], 'GLint location, GLfloat x'], 446 GL_SERVICE_LOG(" " << ii << ": NULL");
235 ['void', ['glUniform1fv'], 'GLint location, GLsizei count, const GLfloat* v'], 447 }
236 ['void', ['glUniform1i'], 'GLint location, GLint x'], 448 }
237 ['void', ['glUniform1iv'], 'GLint location, GLsizei count, const GLint* v'], 449 });
238 ['void', ['glUniform2f'], 'GLint location, GLfloat x, GLfloat y'], 450 """, },
239 ['void', ['glUniform2fv'], 'GLint location, GLsizei count, const GLfloat* v'], 451 { 'return_type': 'void',
240 ['void', ['glUniform2i'], 'GLint location, GLint x, GLint y'], 452 'names': ['glStencilFunc'],
241 ['void', ['glUniform2iv'], 'GLint location, GLsizei count, const GLint* v'], 453 'arguments': 'GLenum func, GLint ref, GLuint mask', },
242 ['void', ['glUniform3f'], 'GLint location, GLfloat x, GLfloat y, GLfloat z'], 454 { 'return_type': 'void',
243 ['void', ['glUniform3fv'], 'GLint location, GLsizei count, const GLfloat* v'], 455 'names': ['glStencilFuncSeparate'],
244 ['void', ['glUniform3i'], 'GLint location, GLint x, GLint y, GLint z'], 456 'arguments': 'GLenum face, GLenum func, GLint ref, GLuint mask', },
245 ['void', ['glUniform3iv'], 'GLint location, GLsizei count, const GLint* v'], 457 { 'return_type': 'void',
246 ['void', ['glUniform4f'], 458 'names': ['glStencilMask'],
247 'GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w'], 459 'arguments': 'GLuint mask', },
248 ['void', ['glUniform4fv'], 'GLint location, GLsizei count, const GLfloat* v'], 460 { 'return_type': 'void',
249 ['void', ['glUniform4i'], 'GLint location, GLint x, GLint y, GLint z, GLint w'], 461 'names': ['glStencilMaskSeparate'],
250 ['void', ['glUniform4iv'], 'GLint location, GLsizei count, const GLint* v'], 462 'arguments': 'GLenum face, GLuint mask', },
251 ['void', ['glUniformMatrix2fv'], 463 { 'return_type': 'void',
252 'GLint location, GLsizei count, GLboolean transpose, const GLfloat* value'], 464 'names': ['glStencilOp'],
253 ['void', ['glUniformMatrix3fv'], 465 'arguments': 'GLenum fail, GLenum zfail, GLenum zpass', },
254 'GLint location, GLsizei count, GLboolean transpose, const GLfloat* value'], 466 { 'return_type': 'void',
255 ['void', ['glUniformMatrix4fv'], 467 'names': ['glStencilOpSeparate'],
256 'GLint location, GLsizei count, GLboolean transpose, const GLfloat* value'], 468 'arguments': 'GLenum face, GLenum fail, GLenum zfail, GLenum zpass', },
257 ['GLboolean', ['glUnmapBuffer', 'glUnmapBufferOES'], 'GLenum target'], 469 { 'return_type': 'void',
258 ['void', ['glUseProgram'], 'GLuint program'], 470 'names': ['glTexImage2D'],
259 ['void', ['glValidateProgram'], 'GLuint program'], 471 'arguments':
260 ['void', ['glVertexAttrib1f'], 'GLuint indx, GLfloat x'], 472 'GLenum target, GLint level, GLint internalformat, GLsizei width, '
261 ['void', ['glVertexAttrib1fv'], 'GLuint indx, const GLfloat* values'], 473 'GLsizei height, GLint border, GLenum format, GLenum type, '
262 ['void', ['glVertexAttrib2f'], 'GLuint indx, GLfloat x, GLfloat y'], 474 'const void* pixels', },
263 ['void', ['glVertexAttrib2fv'], 'GLuint indx, const GLfloat* values'], 475 { 'return_type': 'void',
264 ['void', ['glVertexAttrib3f'], 'GLuint indx, GLfloat x, GLfloat y, GLfloat z'], 476 'names': ['glTexParameterf'],
265 ['void', ['glVertexAttrib3fv'], 'GLuint indx, const GLfloat* values'], 477 'arguments': 'GLenum target, GLenum pname, GLfloat param', },
266 ['void', ['glVertexAttrib4f'], 478 { 'return_type': 'void',
267 'GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w'], 479 'names': ['glTexParameterfv'],
268 ['void', ['glVertexAttrib4fv'], 'GLuint indx, const GLfloat* values'], 480 'arguments': 'GLenum target, GLenum pname, const GLfloat* params', },
269 ['void', ['glVertexAttribPointer'], 481 { 'return_type': 'void',
270 'GLuint indx, GLint size, GLenum type, GLboolean normalized, ' 482 'names': ['glTexParameteri'],
271 'GLsizei stride, const void* ptr'], 483 'arguments': 'GLenum target, GLenum pname, GLint param', },
272 ['void', ['glViewport'], 'GLint x, GLint y, GLsizei width, GLsizei height'], 484 { 'return_type': 'void',
273 ['void', ['glGenFencesNV'], 'GLsizei n, GLuint* fences'], 485 'names': ['glTexParameteriv'],
274 ['void', ['glDeleteFencesNV'], 'GLsizei n, const GLuint* fences'], 486 'arguments': 'GLenum target, GLenum pname, const GLint* params', },
275 ['void', ['glSetFenceNV'], 'GLuint fence, GLenum condition'], 487 { 'return_type': 'void',
276 ['GLboolean', ['glTestFenceNV'], 'GLuint fence'], 488 'names': ['glTexStorage2DEXT'],
277 ['void', ['glFinishFenceNV'], 'GLuint fence'], 489 'arguments': 'GLenum target, GLsizei levels, GLenum internalformat, '
278 ['GLboolean', ['glIsFenceNV'], 'GLuint fence'], 490 'GLsizei width, GLsizei height', },
279 ['void', ['glGetFenceivNV'], 'GLuint fence, GLenum pname, GLint* params'] 491 { 'return_type': 'void',
492 'names': ['glTexSubImage2D'],
493 'arguments':
494 'GLenum target, GLint level, GLint xoffset, GLint yoffset, '
495 'GLsizei width, GLsizei height, GLenum format, GLenum type, '
496 'const void* pixels', },
497 { 'return_type': 'void',
498 'names': ['glUniform1f'],
499 'arguments': 'GLint location, GLfloat x', },
500 { 'return_type': 'void',
501 'names': ['glUniform1fv'],
502 'arguments': 'GLint location, GLsizei count, const GLfloat* v', },
503 { 'return_type': 'void',
504 'names': ['glUniform1i'],
505 'arguments': 'GLint location, GLint x', },
506 { 'return_type': 'void',
507 'names': ['glUniform1iv'],
508 'arguments': 'GLint location, GLsizei count, const GLint* v', },
509 { 'return_type': 'void',
510 'names': ['glUniform2f'],
511 'arguments': 'GLint location, GLfloat x, GLfloat y', },
512 { 'return_type': 'void',
513 'names': ['glUniform2fv'],
514 'arguments': 'GLint location, GLsizei count, const GLfloat* v', },
515 { 'return_type': 'void',
516 'names': ['glUniform2i'],
517 'arguments': 'GLint location, GLint x, GLint y', },
518 { 'return_type': 'void',
519 'names': ['glUniform2iv'],
520 'arguments': 'GLint location, GLsizei count, const GLint* v', },
521 { 'return_type': 'void',
522 'names': ['glUniform3f'],
523 'arguments': 'GLint location, GLfloat x, GLfloat y, GLfloat z', },
524 { 'return_type': 'void',
525 'names': ['glUniform3fv'],
526 'arguments': 'GLint location, GLsizei count, const GLfloat* v', },
527 { 'return_type': 'void',
528 'names': ['glUniform3i'],
529 'arguments': 'GLint location, GLint x, GLint y, GLint z', },
530 { 'return_type': 'void',
531 'names': ['glUniform3iv'],
532 'arguments': 'GLint location, GLsizei count, const GLint* v', },
533 { 'return_type': 'void',
534 'names': ['glUniform4f'],
535 'arguments': 'GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w', },
536 { 'return_type': 'void',
537 'names': ['glUniform4fv'],
538 'arguments': 'GLint location, GLsizei count, const GLfloat* v', },
539 { 'return_type': 'void',
540 'names': ['glUniform4i'],
541 'arguments': 'GLint location, GLint x, GLint y, GLint z, GLint w', },
542 { 'return_type': 'void',
543 'names': ['glUniform4iv'],
544 'arguments': 'GLint location, GLsizei count, const GLint* v', },
545 { 'return_type': 'void',
546 'names': ['glUniformMatrix2fv'],
547 'arguments': 'GLint location, GLsizei count, '
548 'GLboolean transpose, const GLfloat* value', },
549 { 'return_type': 'void',
550 'names': ['glUniformMatrix3fv'],
551 'arguments': 'GLint location, GLsizei count, '
552 'GLboolean transpose, const GLfloat* value', },
553 { 'return_type': 'void',
554 'names': ['glUniformMatrix4fv'],
555 'arguments': 'GLint location, GLsizei count, '
556 'GLboolean transpose, const GLfloat* value', },
557 { 'return_type': 'GLboolean',
558 'names': ['glUnmapBuffer', 'glUnmapBufferOES'],
559 'arguments': 'GLenum target', },
560 { 'return_type': 'void',
561 'names': ['glUseProgram'],
562 'arguments': 'GLuint program', },
563 { 'return_type': 'void',
564 'names': ['glValidateProgram'],
565 'arguments': 'GLuint program', },
566 { 'return_type': 'void',
567 'names': ['glVertexAttrib1f'],
568 'arguments': 'GLuint indx, GLfloat x', },
569 { 'return_type': 'void',
570 'names': ['glVertexAttrib1fv'],
571 'arguments': 'GLuint indx, const GLfloat* values', },
572 { 'return_type': 'void',
573 'names': ['glVertexAttrib2f'],
574 'arguments': 'GLuint indx, GLfloat x, GLfloat y', },
575 { 'return_type': 'void',
576 'names': ['glVertexAttrib2fv'],
577 'arguments': 'GLuint indx, const GLfloat* values', },
578 { 'return_type': 'void',
579 'names': ['glVertexAttrib3f'],
580 'arguments': 'GLuint indx, GLfloat x, GLfloat y, GLfloat z', },
581 { 'return_type': 'void',
582 'names': ['glVertexAttrib3fv'],
583 'arguments': 'GLuint indx, const GLfloat* values', },
584 { 'return_type': 'void',
585 'names': ['glVertexAttrib4f'],
586 'arguments': 'GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w', },
587 { 'return_type': 'void',
588 'names': ['glVertexAttrib4fv'],
589 'arguments': 'GLuint indx, const GLfloat* values', },
590 { 'return_type': 'void',
591 'names': ['glVertexAttribPointer'],
592 'arguments': 'GLuint indx, GLint size, GLenum type, GLboolean normalized, '
593 'GLsizei stride, const void* ptr', },
594 { 'return_type': 'void',
595 'names': ['glViewport'],
596 'arguments': 'GLint x, GLint y, GLsizei width, GLsizei height', },
597 { 'return_type': 'void',
598 'names': ['glGenFencesNV'],
599 'arguments': 'GLsizei n, GLuint* fences', },
600 { 'return_type': 'void',
601 'names': ['glDeleteFencesNV'],
602 'arguments': 'GLsizei n, const GLuint* fences', },
603 { 'return_type': 'void',
604 'names': ['glSetFenceNV'],
605 'arguments': 'GLuint fence, GLenum condition', },
606 { 'return_type': 'GLboolean',
607 'names': ['glTestFenceNV'],
608 'arguments': 'GLuint fence', },
609 { 'return_type': 'void',
610 'names': ['glFinishFenceNV'],
611 'arguments': 'GLuint fence', },
612 { 'return_type': 'GLboolean',
613 'names': ['glIsFenceNV'],
614 'arguments': 'GLuint fence', },
615 { 'return_type': 'void',
616 'names': ['glGetFenceivNV'],
617 'arguments': 'GLuint fence, GLenum pname, GLint* params', }
280 ] 618 ]
281 619
282 OSMESA_FUNCTIONS = [ 620 OSMESA_FUNCTIONS = [
283 ['OSMesaContext', ['OSMesaCreateContext'], 621 { 'return_type': 'OSMesaContext',
284 'GLenum format, OSMesaContext sharelist'], 622 'names': ['OSMesaCreateContext'],
285 ['OSMesaContext', ['OSMesaCreateContextExt'], 623 'arguments': 'GLenum format, OSMesaContext sharelist', },
286 'GLenum format, GLint depthBits, GLint stencilBits, GLint accumBits, ' 624 { 'return_type': 'OSMesaContext',
287 'OSMesaContext sharelist'], 625 'names': ['OSMesaCreateContextExt'],
288 ['void', ['OSMesaDestroyContext'], 'OSMesaContext ctx'], 626 'arguments':
289 ['GLboolean', ['OSMesaMakeCurrent'], 627 'GLenum format, GLint depthBits, GLint stencilBits, GLint accumBits, '
290 'OSMesaContext ctx, void* buffer, GLenum type, GLsizei width, ' 628 'OSMesaContext sharelist', },
291 'GLsizei height'], 629 { 'return_type': 'void',
292 ['OSMesaContext', ['OSMesaGetCurrentContext'], 'void'], 630 'names': ['OSMesaDestroyContext'],
293 ['void', ['OSMesaPixelStore'], 'GLint pname, GLint value'], 631 'arguments': 'OSMesaContext ctx', },
294 ['void', ['OSMesaGetIntegerv'], 'GLint pname, GLint* value'], 632 { 'return_type': 'GLboolean',
295 ['GLboolean', ['OSMesaGetDepthBuffer'], 633 'names': ['OSMesaMakeCurrent'],
296 'OSMesaContext c, GLint* width, GLint* height, GLint* bytesPerValue, ' 634 'arguments': 'OSMesaContext ctx, void* buffer, GLenum type, GLsizei width, '
297 'void** buffer'], 635 'GLsizei height', },
298 ['GLboolean', ['OSMesaGetColorBuffer'], 636 { 'return_type': 'OSMesaContext',
299 'OSMesaContext c, GLint* width, GLint* height, GLint* format, ' 637 'names': ['OSMesaGetCurrentContext'],
300 'void** buffer'], 638 'arguments': 'void', },
301 ['OSMESAproc', ['OSMesaGetProcAddress'], 'const char* funcName'], 639 { 'return_type': 'void',
302 ['void', ['OSMesaColorClamp'], 'GLboolean enable'], 640 'names': ['OSMesaPixelStore'],
641 'arguments': 'GLint pname, GLint value', },
642 { 'return_type': 'void',
643 'names': ['OSMesaGetIntegerv'],
644 'arguments': 'GLint pname, GLint* value', },
645 { 'return_type': 'GLboolean',
646 'names': ['OSMesaGetDepthBuffer'],
647 'arguments':
648 'OSMesaContext c, GLint* width, GLint* height, GLint* bytesPerValue, '
649 'void** buffer', },
650 { 'return_type': 'GLboolean',
651 'names': ['OSMesaGetColorBuffer'],
652 'arguments': 'OSMesaContext c, GLint* width, GLint* height, GLint* format, '
653 'void** buffer', },
654 { 'return_type': 'OSMESAproc',
655 'names': ['OSMesaGetProcAddress'],
656 'arguments': 'const char* funcName', },
657 { 'return_type': 'void',
658 'names': ['OSMesaColorClamp'],
659 'arguments': 'GLboolean enable', },
303 ] 660 ]
304 661
305 EGL_FUNCTIONS = [ 662 EGL_FUNCTIONS = [
306 ['EGLint', ['eglGetError'], 'void'], 663 { 'return_type': 'EGLint',
307 ['EGLDisplay', ['eglGetDisplay'], 'EGLNativeDisplayType display_id'], 664 'names': ['eglGetError'],
308 ['EGLBoolean', ['eglInitialize'], 665 'arguments': 'void', },
309 'EGLDisplay dpy, EGLint* major, EGLint* minor'], 666 { 'return_type': 'EGLDisplay',
310 ['EGLBoolean', ['eglTerminate'], 'EGLDisplay dpy'], 667 'names': ['eglGetDisplay'],
311 ['const char*', ['eglQueryString'], 'EGLDisplay dpy, EGLint name'], 668 'arguments': 'EGLNativeDisplayType display_id', },
312 ['EGLBoolean', ['eglGetConfigs'], 669 { 'return_type': 'EGLBoolean',
313 'EGLDisplay dpy, EGLConfig* configs, EGLint config_size, ' 670 'names': ['eglInitialize'],
314 'EGLint* num_config'], 671 'arguments': 'EGLDisplay dpy, EGLint* major, EGLint* minor', },
315 ['EGLBoolean', ['eglChooseConfig'], 672 { 'return_type': 'EGLBoolean',
316 'EGLDisplay dpy, const EGLint* attrib_list, EGLConfig* configs, ' 673 'names': ['eglTerminate'],
317 'EGLint config_size, EGLint* num_config'], 674 'arguments': 'EGLDisplay dpy', },
318 ['EGLBoolean', ['eglGetConfigAttrib'], 675 { 'return_type': 'const char*',
319 'EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint* value'], 676 'names': ['eglQueryString'],
320 ['EGLImageKHR', ['eglCreateImageKHR'], 677 'arguments': 'EGLDisplay dpy, EGLint name', },
321 'EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, ' 678 { 'return_type': 'EGLBoolean',
322 'const EGLint* attrib_list'], 679 'names': ['eglGetConfigs'],
323 ['EGLBoolean', ['eglDestroyImageKHR'], 680 'arguments': 'EGLDisplay dpy, EGLConfig* configs, EGLint config_size, '
324 'EGLDisplay dpy, EGLImageKHR image'], 681 'EGLint* num_config', },
325 ['EGLSurface', ['eglCreateWindowSurface'], 682 { 'return_type': 'EGLBoolean',
326 'EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, ' 683 'names': ['eglChooseConfig'],
327 'const EGLint* attrib_list'], 684 'arguments': 'EGLDisplay dpy, const EGLint* attrib_list, EGLConfig* configs, '
328 ['EGLSurface', ['eglCreatePbufferSurface'], 685 'EGLint config_size, EGLint* num_config', },
329 'EGLDisplay dpy, EGLConfig config, const EGLint* attrib_list'], 686 { 'return_type': 'EGLBoolean',
330 ['EGLSurface', ['eglCreatePixmapSurface'], 687 'names': ['eglGetConfigAttrib'],
331 'EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, ' 688 'arguments':
332 'const EGLint* attrib_list'], 689 'EGLDisplay dpy, EGLConfig config, EGLint attribute, EGLint* value', },
333 ['EGLBoolean', ['eglDestroySurface'], 'EGLDisplay dpy, EGLSurface surface'], 690 { 'return_type': 'EGLImageKHR',
334 ['EGLBoolean', ['eglQuerySurface'], 691 'names': ['eglCreateImageKHR'],
335 'EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint* value'], 692 'arguments':
336 ['EGLBoolean', ['eglBindAPI'], 'EGLenum api'], 693 'EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, '
337 ['EGLenum', ['eglQueryAPI'], 'void'], 694 'const EGLint* attrib_list', },
338 ['EGLBoolean', ['eglWaitClient'], 'void'], 695 { 'return_type': 'EGLBoolean',
339 ['EGLBoolean', ['eglReleaseThread'], 'void'], 696 'names': ['eglDestroyImageKHR'],
340 ['EGLSurface', ['eglCreatePbufferFromClientBuffer'], 697 'arguments': 'EGLDisplay dpy, EGLImageKHR image', },
341 'EGLDisplay dpy, EGLenum buftype, void* buffer, EGLConfig config, ' 698 { 'return_type': 'EGLSurface',
342 'const EGLint* attrib_list'], 699 'names': ['eglCreateWindowSurface'],
343 ['EGLBoolean', ['eglSurfaceAttrib'], 700 'arguments': 'EGLDisplay dpy, EGLConfig config, EGLNativeWindowType win, '
344 'EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value'], 701 'const EGLint* attrib_list', },
345 ['EGLBoolean', ['eglBindTexImage'], 702 { 'return_type': 'EGLSurface',
346 'EGLDisplay dpy, EGLSurface surface, EGLint buffer'], 703 'names': ['eglCreatePbufferSurface'],
347 ['EGLBoolean', ['eglReleaseTexImage'], 704 'arguments': 'EGLDisplay dpy, EGLConfig config, const EGLint* attrib_list', },
348 'EGLDisplay dpy, EGLSurface surface, EGLint buffer'], 705 { 'return_type': 'EGLSurface',
349 ['EGLBoolean', ['eglSwapInterval'], 'EGLDisplay dpy, EGLint interval'], 706 'names': ['eglCreatePixmapSurface'],
350 ['EGLContext', ['eglCreateContext'], 707 'arguments': 'EGLDisplay dpy, EGLConfig config, EGLNativePixmapType pixmap, '
351 'EGLDisplay dpy, EGLConfig config, EGLContext share_context, ' 708 'const EGLint* attrib_list', },
352 'const EGLint* attrib_list'], 709 { 'return_type': 'EGLBoolean',
353 ['EGLBoolean', ['eglDestroyContext'], 'EGLDisplay dpy, EGLContext ctx'], 710 'names': ['eglDestroySurface'],
354 ['EGLBoolean', ['eglMakeCurrent'], 711 'arguments': 'EGLDisplay dpy, EGLSurface surface', },
355 'EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx'], 712 { 'return_type': 'EGLBoolean',
356 ['EGLContext', ['eglGetCurrentContext'], 'void'], 713 'names': ['eglQuerySurface'],
357 ['EGLSurface', ['eglGetCurrentSurface'], 'EGLint readdraw'], 714 'arguments':
358 ['EGLDisplay', ['eglGetCurrentDisplay'], 'void'], 715 'EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint* value', },
359 ['EGLBoolean', ['eglQueryContext'], 716 { 'return_type': 'EGLBoolean',
360 'EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint* value'], 717 'names': ['eglBindAPI'],
361 ['EGLBoolean', ['eglWaitGL'], 'void'], 718 'arguments': 'EGLenum api', },
362 ['EGLBoolean', ['eglWaitNative'], 'EGLint engine'], 719 { 'return_type': 'EGLenum',
363 ['EGLBoolean', ['eglSwapBuffers'], 'EGLDisplay dpy, EGLSurface surface'], 720 'names': ['eglQueryAPI'],
364 ['EGLBoolean', ['eglCopyBuffers'], 721 'arguments': 'void', },
365 'EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target'], 722 { 'return_type': 'EGLBoolean',
366 ['__eglMustCastToProperFunctionPointerType', ['eglGetProcAddress'], 723 'names': ['eglWaitClient'],
367 'const char* procname'], 724 'arguments': 'void', },
368 ['EGLBoolean', ['eglPostSubBufferNV'], 725 { 'return_type': 'EGLBoolean',
369 'EGLDisplay dpy, EGLSurface surface, ' 726 'names': ['eglReleaseThread'],
370 'EGLint x, EGLint y, EGLint width, EGLint height'], 727 'arguments': 'void', },
371 ['EGLBoolean', ['eglQuerySurfacePointerANGLE'], 728 { 'return_type': 'EGLSurface',
372 'EGLDisplay dpy, EGLSurface surface, EGLint attribute, void** value'], 729 'names': ['eglCreatePbufferFromClientBuffer'],
730 'arguments':
731 'EGLDisplay dpy, EGLenum buftype, void* buffer, EGLConfig config, '
732 'const EGLint* attrib_list', },
733 { 'return_type': 'EGLBoolean',
734 'names': ['eglSurfaceAttrib'],
735 'arguments':
736 'EGLDisplay dpy, EGLSurface surface, EGLint attribute, EGLint value', },
737 { 'return_type': 'EGLBoolean',
738 'names': ['eglBindTexImage'],
739 'arguments': 'EGLDisplay dpy, EGLSurface surface, EGLint buffer', },
740 { 'return_type': 'EGLBoolean',
741 'names': ['eglReleaseTexImage'],
742 'arguments': 'EGLDisplay dpy, EGLSurface surface, EGLint buffer', },
743 { 'return_type': 'EGLBoolean',
744 'names': ['eglSwapInterval'],
745 'arguments': 'EGLDisplay dpy, EGLint interval', },
746 { 'return_type': 'EGLContext',
747 'names': ['eglCreateContext'],
748 'arguments': 'EGLDisplay dpy, EGLConfig config, EGLContext share_context, '
749 'const EGLint* attrib_list', },
750 { 'return_type': 'EGLBoolean',
751 'names': ['eglDestroyContext'],
752 'arguments': 'EGLDisplay dpy, EGLContext ctx', },
753 { 'return_type': 'EGLBoolean',
754 'names': ['eglMakeCurrent'],
755 'arguments':
756 'EGLDisplay dpy, EGLSurface draw, EGLSurface read, EGLContext ctx', },
757 { 'return_type': 'EGLContext',
758 'names': ['eglGetCurrentContext'],
759 'arguments': 'void', },
760 { 'return_type': 'EGLSurface',
761 'names': ['eglGetCurrentSurface'],
762 'arguments': 'EGLint readdraw', },
763 { 'return_type': 'EGLDisplay',
764 'names': ['eglGetCurrentDisplay'],
765 'arguments': 'void', },
766 { 'return_type': 'EGLBoolean',
767 'names': ['eglQueryContext'],
768 'arguments':
769 'EGLDisplay dpy, EGLContext ctx, EGLint attribute, EGLint* value', },
770 { 'return_type': 'EGLBoolean',
771 'names': ['eglWaitGL'],
772 'arguments': 'void', },
773 { 'return_type': 'EGLBoolean',
774 'names': ['eglWaitNative'],
775 'arguments': 'EGLint engine', },
776 { 'return_type': 'EGLBoolean',
777 'names': ['eglSwapBuffers'],
778 'arguments': 'EGLDisplay dpy, EGLSurface surface', },
779 { 'return_type': 'EGLBoolean',
780 'names': ['eglCopyBuffers'],
781 'arguments':
782 'EGLDisplay dpy, EGLSurface surface, EGLNativePixmapType target', },
783 { 'return_type': '__eglMustCastToProperFunctionPointerType',
784 'names': ['eglGetProcAddress'],
785 'arguments': 'const char* procname', },
786 { 'return_type': 'EGLBoolean',
787 'names': ['eglPostSubBufferNV'],
788 'arguments': 'EGLDisplay dpy, EGLSurface surface, '
789 'EGLint x, EGLint y, EGLint width, EGLint height', },
790 { 'return_type': 'EGLBoolean',
791 'names': ['eglQuerySurfacePointerANGLE'],
792 'arguments':
793 'EGLDisplay dpy, EGLSurface surface, EGLint attribute, void** value', },
373 ] 794 ]
374 795
375 WGL_FUNCTIONS = [ 796 WGL_FUNCTIONS = [
376 ['HGLRC', ['wglCreateContext'], 'HDC hdc'], 797 { 'return_type': 'HGLRC',
377 ['HGLRC', ['wglCreateLayerContext'], 'HDC hdc, int iLayerPlane'], 798 'names': ['wglCreateContext'],
378 ['BOOL', ['wglCopyContext'], 'HGLRC hglrcSrc, HGLRC hglrcDst, UINT mask'], 799 'arguments': 'HDC hdc', },
379 ['BOOL', ['wglDeleteContext'], 'HGLRC hglrc'], 800 { 'return_type': 'HGLRC',
380 ['HGLRC', ['wglGetCurrentContext'], ''], 801 'names': ['wglCreateLayerContext'],
381 ['HDC', ['wglGetCurrentDC'], ''], 802 'arguments': 'HDC hdc, int iLayerPlane', },
382 ['BOOL', ['wglMakeCurrent'], 'HDC hdc, HGLRC hglrc'], 803 { 'return_type': 'BOOL',
383 ['BOOL', ['wglShareLists'], 'HGLRC hglrc1, HGLRC hglrc2'], 804 'names': ['wglCopyContext'],
384 ['BOOL', ['wglSwapIntervalEXT'], 'int interval'], 805 'arguments': 'HGLRC hglrcSrc, HGLRC hglrcDst, UINT mask', },
385 ['BOOL', ['wglSwapLayerBuffers'], 'HDC hdc, UINT fuPlanes'], 806 { 'return_type': 'BOOL',
386 ['const char*', ['wglGetExtensionsStringARB'], 'HDC hDC'], 807 'names': ['wglDeleteContext'],
387 ['const char*', ['wglGetExtensionsStringEXT'], ''], 808 'arguments': 'HGLRC hglrc', },
388 ['BOOL', ['wglChoosePixelFormatARB'], 809 { 'return_type': 'HGLRC',
389 'HDC dc, const int* int_attrib_list, const float* float_attrib_list, ' 810 'names': ['wglGetCurrentContext'],
390 'UINT max_formats, int* formats, UINT* num_formats'], 811 'arguments': '', },
391 ['HPBUFFERARB', ['wglCreatePbufferARB'], 812 { 'return_type': 'HDC',
392 'HDC hDC, int iPixelFormat, int iWidth, int iHeight, ' 813 'names': ['wglGetCurrentDC'],
393 'const int* piAttribList'], 814 'arguments': '', },
394 ['HDC', ['wglGetPbufferDCARB'], 'HPBUFFERARB hPbuffer'], 815 { 'return_type': 'BOOL',
395 ['int', ['wglReleasePbufferDCARB'], 'HPBUFFERARB hPbuffer, HDC hDC'], 816 'names': ['wglMakeCurrent'],
396 ['BOOL', ['wglDestroyPbufferARB'], 'HPBUFFERARB hPbuffer'], 817 'arguments': 'HDC hdc, HGLRC hglrc', },
397 ['BOOL', ['wglQueryPbufferARB'], 818 { 'return_type': 'BOOL',
398 'HPBUFFERARB hPbuffer, int iAttribute, int* piValue'], 819 'names': ['wglShareLists'],
820 'arguments': 'HGLRC hglrc1, HGLRC hglrc2', },
821 { 'return_type': 'BOOL',
822 'names': ['wglSwapIntervalEXT'],
823 'arguments': 'int interval', },
824 { 'return_type': 'BOOL',
825 'names': ['wglSwapLayerBuffers'],
826 'arguments': 'HDC hdc, UINT fuPlanes', },
827 { 'return_type': 'const char*',
828 'names': ['wglGetExtensionsStringARB'],
829 'arguments': 'HDC hDC', },
830 { 'return_type': 'const char*',
831 'names': ['wglGetExtensionsStringEXT'],
832 'arguments': '', },
833 { 'return_type': 'BOOL',
834 'names': ['wglChoosePixelFormatARB'],
835 'arguments':
836 'HDC dc, const int* int_attrib_list, const float* float_attrib_list, '
837 'UINT max_formats, int* formats, UINT* num_formats', },
838 { 'return_type': 'HPBUFFERARB',
839 'names': ['wglCreatePbufferARB'],
840 'arguments': 'HDC hDC, int iPixelFormat, int iWidth, int iHeight, '
841 'const int* piAttribList', },
842 { 'return_type': 'HDC',
843 'names': ['wglGetPbufferDCARB'],
844 'arguments': 'HPBUFFERARB hPbuffer', },
845 { 'return_type': 'int',
846 'names': ['wglReleasePbufferDCARB'],
847 'arguments': 'HPBUFFERARB hPbuffer, HDC hDC', },
848 { 'return_type': 'BOOL',
849 'names': ['wglDestroyPbufferARB'],
850 'arguments': 'HPBUFFERARB hPbuffer', },
851 { 'return_type': 'BOOL',
852 'names': ['wglQueryPbufferARB'],
853 'arguments': 'HPBUFFERARB hPbuffer, int iAttribute, int* piValue', },
399 ] 854 ]
400 855
401 GLX_FUNCTIONS = [ 856 GLX_FUNCTIONS = [
402 ['XVisualInfo*', ['glXChooseVisual'], 857 { 'return_type': 'XVisualInfo*',
403 'Display* dpy, int screen, int* attribList'], 858 'names': ['glXChooseVisual'],
404 ['void', ['glXCopySubBufferMESA'], 859 'arguments': 'Display* dpy, int screen, int* attribList', },
405 'Display* dpy, GLXDrawable drawable, ' 860 { 'return_type': 'void',
406 'int x, int y, int width, int height'], 861 'names': ['glXCopySubBufferMESA'],
407 ['GLXContext', ['glXCreateContext'], 862 'arguments': 'Display* dpy, GLXDrawable drawable, '
408 'Display* dpy, XVisualInfo* vis, GLXContext shareList, int direct'], 863 'int x, int y, int width, int height', },
409 ['void', ['glXBindTexImageEXT'], 864 { 'return_type': 'GLXContext',
410 'Display* dpy, GLXDrawable drawable, int buffer, int* attribList'], 865 'names': ['glXCreateContext'],
411 ['void', ['glXReleaseTexImageEXT'], 866 'arguments':
412 'Display* dpy, GLXDrawable drawable, int buffer'], 867 'Display* dpy, XVisualInfo* vis, GLXContext shareList, int direct', },
413 ['void', ['glXDestroyContext'], 'Display* dpy, GLXContext ctx'], 868 { 'return_type': 'void',
414 ['int', ['glXMakeCurrent'], 869 'names': ['glXBindTexImageEXT'],
415 'Display* dpy, GLXDrawable drawable, GLXContext ctx'], 870 'arguments':
416 ['void', ['glXCopyContext'], 871 'Display* dpy, GLXDrawable drawable, int buffer, int* attribList', },
417 'Display* dpy, GLXContext src, GLXContext dst, unsigned long mask'], 872 { 'return_type': 'void',
418 ['void', ['glXSwapBuffers'], 'Display* dpy, GLXDrawable drawable'], 873 'names': ['glXReleaseTexImageEXT'],
419 ['GLXPixmap', ['glXCreateGLXPixmap'], 874 'arguments': 'Display* dpy, GLXDrawable drawable, int buffer', },
420 'Display* dpy, XVisualInfo* visual, Pixmap pixmap'], 875 { 'return_type': 'void',
421 ['void', ['glXDestroyGLXPixmap'], 'Display* dpy, GLXPixmap pixmap'], 876 'names': ['glXDestroyContext'],
422 ['int', ['glXQueryExtension'], 'Display* dpy, int* errorb, int* event'], 877 'arguments': 'Display* dpy, GLXContext ctx', },
423 ['int', ['glXQueryVersion'], 'Display* dpy, int* maj, int* min'], 878 { 'return_type': 'int',
424 ['int', ['glXIsDirect'], 'Display* dpy, GLXContext ctx'], 879 'names': ['glXMakeCurrent'],
425 ['int', ['glXGetConfig'], 880 'arguments': 'Display* dpy, GLXDrawable drawable, GLXContext ctx', },
426 'Display* dpy, XVisualInfo* visual, int attrib, int* value'], 881 { 'return_type': 'void',
427 ['GLXContext', ['glXGetCurrentContext'], 'void'], 882 'names': ['glXCopyContext'],
428 ['GLXDrawable', ['glXGetCurrentDrawable'], 'void'], 883 'arguments':
429 ['void', ['glXWaitGL'], 'void'], 884 'Display* dpy, GLXContext src, GLXContext dst, unsigned long mask', },
430 ['void', ['glXWaitX'], 'void'], 885 { 'return_type': 'void',
431 ['void', ['glXUseXFont'], 'Font font, int first, int count, int list'], 886 'names': ['glXSwapBuffers'],
432 ['const char*', ['glXQueryExtensionsString'], 'Display* dpy, int screen'], 887 'arguments': 'Display* dpy, GLXDrawable drawable', },
433 ['const char*', ['glXQueryServerString'], 'Display* dpy, int screen, int name'], 888 { 'return_type': 'GLXPixmap',
434 ['const char*', ['glXGetClientString'], 'Display* dpy, int name'], 889 'names': ['glXCreateGLXPixmap'],
435 ['Display*', ['glXGetCurrentDisplay'], 'void'], 890 'arguments': 'Display* dpy, XVisualInfo* visual, Pixmap pixmap', },
436 ['GLXFBConfig*', ['glXChooseFBConfig'], 891 { 'return_type': 'void',
437 'Display* dpy, int screen, const int* attribList, int* nitems'], 892 'names': ['glXDestroyGLXPixmap'],
438 ['int', ['glXGetFBConfigAttrib'], 893 'arguments': 'Display* dpy, GLXPixmap pixmap', },
439 'Display* dpy, GLXFBConfig config, int attribute, int* value'], 894 { 'return_type': 'int',
440 ['GLXFBConfig*', ['glXGetFBConfigs'], 895 'names': ['glXQueryExtension'],
441 'Display* dpy, int screen, int* nelements'], 896 'arguments': 'Display* dpy, int* errorb, int* event', },
442 ['XVisualInfo*', ['glXGetVisualFromFBConfig'], 897 { 'return_type': 'int',
443 'Display* dpy, GLXFBConfig config'], 898 'names': ['glXQueryVersion'],
444 ['GLXWindow', ['glXCreateWindow'], 899 'arguments': 'Display* dpy, int* maj, int* min', },
445 'Display* dpy, GLXFBConfig config, Window win, const int* attribList'], 900 { 'return_type': 'int',
446 ['void', ['glXDestroyWindow'], 'Display* dpy, GLXWindow window'], 901 'names': ['glXIsDirect'],
447 ['GLXPixmap', ['glXCreatePixmap'], 902 'arguments': 'Display* dpy, GLXContext ctx', },
448 'Display* dpy, GLXFBConfig config, Pixmap pixmap, const int* attribList'], 903 { 'return_type': 'int',
449 ['void', ['glXDestroyPixmap'], 'Display* dpy, GLXPixmap pixmap'], 904 'names': ['glXGetConfig'],
450 ['GLXPbuffer', ['glXCreatePbuffer'], 905 'arguments': 'Display* dpy, XVisualInfo* visual, int attrib, int* value', },
451 'Display* dpy, GLXFBConfig config, const int* attribList'], 906 { 'return_type': 'GLXContext',
452 ['void', ['glXDestroyPbuffer'], 'Display* dpy, GLXPbuffer pbuf'], 907 'names': ['glXGetCurrentContext'],
453 ['void', ['glXQueryDrawable'], 908 'arguments': 'void', },
454 'Display* dpy, GLXDrawable draw, int attribute, unsigned int* value'], 909 { 'return_type': 'GLXDrawable',
455 ['GLXContext', ['glXCreateNewContext'], 910 'names': ['glXGetCurrentDrawable'],
456 'Display* dpy, GLXFBConfig config, int renderType, ' 911 'arguments': 'void', },
457 'GLXContext shareList, int direct'], 912 { 'return_type': 'void',
458 ['int', ['glXMakeContextCurrent'], 913 'names': ['glXWaitGL'],
459 'Display* dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx'], 914 'arguments': 'void', },
460 ['GLXDrawable', ['glXGetCurrentReadDrawable'], 'void'], 915 { 'return_type': 'void',
461 ['int', ['glXQueryContext'], 916 'names': ['glXWaitX'],
462 'Display* dpy, GLXContext ctx, int attribute, int* value'], 917 'arguments': 'void', },
463 ['void', ['glXSelectEvent'], 918 { 'return_type': 'void',
464 'Display* dpy, GLXDrawable drawable, unsigned long mask'], 919 'names': ['glXUseXFont'],
465 ['void', ['glXGetSelectedEvent'], 920 'arguments': 'Font font, int first, int count, int list', },
466 'Display* dpy, GLXDrawable drawable, unsigned long* mask'], 921 { 'return_type': 'const char*',
467 ['void', ['glXSwapIntervalEXT'], 922 'names': ['glXQueryExtensionsString'],
468 'Display* dpy, GLXDrawable drawable, int interval'], 923 'arguments': 'Display* dpy, int screen', },
469 ['GLXFBConfig', ['glXGetFBConfigFromVisualSGIX'], 924 { 'return_type': 'const char*',
470 'Display* dpy, XVisualInfo* visualInfo'], 925 'names': ['glXQueryServerString'],
471 ['GLXContext', ['glXCreateContextAttribsARB'], 926 'arguments': 'Display* dpy, int screen, int name', },
472 'Display* dpy, GLXFBConfig config, GLXContext share_context, int direct, ' 927 { 'return_type': 'const char*',
473 'const int* attrib_list'], 928 'names': ['glXGetClientString'],
929 'arguments': 'Display* dpy, int name', },
930 { 'return_type': 'Display*',
931 'names': ['glXGetCurrentDisplay'],
932 'arguments': 'void', },
933 { 'return_type': 'GLXFBConfig*',
934 'names': ['glXChooseFBConfig'],
935 'arguments':
936 'Display* dpy, int screen, const int* attribList, int* nitems', },
937 { 'return_type': 'int',
938 'names': ['glXGetFBConfigAttrib'],
939 'arguments': 'Display* dpy, GLXFBConfig config, int attribute, int* value', },
940 { 'return_type': 'GLXFBConfig*',
941 'names': ['glXGetFBConfigs'],
942 'arguments': 'Display* dpy, int screen, int* nelements', },
943 { 'return_type': 'XVisualInfo*',
944 'names': ['glXGetVisualFromFBConfig'],
945 'arguments': 'Display* dpy, GLXFBConfig config', },
946 { 'return_type': 'GLXWindow',
947 'names': ['glXCreateWindow'],
948 'arguments':
949 'Display* dpy, GLXFBConfig config, Window win, const int* attribList', },
950 { 'return_type': 'void',
951 'names': ['glXDestroyWindow'],
952 'arguments': 'Display* dpy, GLXWindow window', },
953 { 'return_type': 'GLXPixmap',
954 'names': ['glXCreatePixmap'],
955 'arguments': 'Display* dpy, GLXFBConfig config, '
956 'Pixmap pixmap, const int* attribList', },
957 { 'return_type': 'void',
958 'names': ['glXDestroyPixmap'],
959 'arguments': 'Display* dpy, GLXPixmap pixmap', },
960 { 'return_type': 'GLXPbuffer',
961 'names': ['glXCreatePbuffer'],
962 'arguments': 'Display* dpy, GLXFBConfig config, const int* attribList', },
963 { 'return_type': 'void',
964 'names': ['glXDestroyPbuffer'],
965 'arguments': 'Display* dpy, GLXPbuffer pbuf', },
966 { 'return_type': 'void',
967 'names': ['glXQueryDrawable'],
968 'arguments':
969 'Display* dpy, GLXDrawable draw, int attribute, unsigned int* value', },
970 { 'return_type': 'GLXContext',
971 'names': ['glXCreateNewContext'],
972 'arguments': 'Display* dpy, GLXFBConfig config, int renderType, '
973 'GLXContext shareList, int direct', },
974 { 'return_type': 'int',
975 'names': ['glXMakeContextCurrent'],
976 'arguments':
977 'Display* dpy, GLXDrawable draw, GLXDrawable read, GLXContext ctx', },
978 { 'return_type': 'GLXDrawable',
979 'names': ['glXGetCurrentReadDrawable'],
980 'arguments': 'void', },
981 { 'return_type': 'int',
982 'names': ['glXQueryContext'],
983 'arguments': 'Display* dpy, GLXContext ctx, int attribute, int* value', },
984 { 'return_type': 'void',
985 'names': ['glXSelectEvent'],
986 'arguments': 'Display* dpy, GLXDrawable drawable, unsigned long mask', },
987 { 'return_type': 'void',
988 'names': ['glXGetSelectedEvent'],
989 'arguments': 'Display* dpy, GLXDrawable drawable, unsigned long* mask', },
990 { 'return_type': 'void',
991 'names': ['glXSwapIntervalEXT'],
992 'arguments': 'Display* dpy, GLXDrawable drawable, int interval', },
993 { 'return_type': 'GLXFBConfig',
994 'names': ['glXGetFBConfigFromVisualSGIX'],
995 'arguments': 'Display* dpy, XVisualInfo* visualInfo', },
996 { 'return_type': 'GLXContext',
997 'names': ['glXCreateContextAttribsARB'],
998 'arguments':
999 'Display* dpy, GLXFBConfig config, GLXContext share_context, int direct, '
1000 'const int* attrib_list', },
474 ] 1001 ]
475 1002
476 FUNCTION_SETS = [ 1003 FUNCTION_SETS = [
477 [GL_FUNCTIONS, 'gl', ['../../../third_party/mesa/MesaLib/include/GL/glext.h', 1004 [GL_FUNCTIONS, 'gl', ['../../../third_party/mesa/MesaLib/include/GL/glext.h',
478 '../../../third_party/khronos/GLES2/gl2ext.h']], 1005 '../../../third_party/khronos/GLES2/gl2ext.h']],
479 [OSMESA_FUNCTIONS, 'osmesa', []], 1006 [OSMESA_FUNCTIONS, 'osmesa', []],
480 [EGL_FUNCTIONS, 'egl', ['../../../third_party/khronos/EGL/eglext.h']], 1007 [EGL_FUNCTIONS, 'egl', ['../../../third_party/khronos/EGL/eglext.h']],
481 [WGL_FUNCTIONS, 'wgl', [ 1008 [WGL_FUNCTIONS, 'wgl', [
482 '../../../third_party/mesa/MesaLib/include/GL/wglext.h']], 1009 '../../../third_party/mesa/MesaLib/include/GL/wglext.h']],
483 [GLX_FUNCTIONS, 'glx', [ 1010 [GLX_FUNCTIONS, 'glx', [
(...skipping 22 matching lines...) Expand all
506 file.write('\n') 1033 file.write('\n')
507 file.write('void InitializeGLBindings%s();\n' % set_name.upper()) 1034 file.write('void InitializeGLBindings%s();\n' % set_name.upper())
508 file.write('void InitializeGLExtensionBindings%s(GLContext* context);\n' % 1035 file.write('void InitializeGLExtensionBindings%s(GLContext* context);\n' %
509 set_name.upper()) 1036 set_name.upper())
510 file.write('void InitializeDebugGLBindings%s();\n' % set_name.upper()) 1037 file.write('void InitializeDebugGLBindings%s();\n' % set_name.upper())
511 file.write('void ClearGLBindings%s();\n' % set_name.upper()) 1038 file.write('void ClearGLBindings%s();\n' % set_name.upper())
512 1039
513 # Write typedefs for function pointer types. Always use the GL name for the 1040 # Write typedefs for function pointer types. Always use the GL name for the
514 # typedef. 1041 # typedef.
515 file.write('\n') 1042 file.write('\n')
516 for [return_type, names, arguments] in functions: 1043 for func in functions:
517 file.write('typedef %s (GL_BINDING_CALL *%sProc)(%s);\n' % 1044 file.write('typedef %s (GL_BINDING_CALL *%sProc)(%s);\n' %
518 (return_type, names[0], arguments)) 1045 (func['return_type'], func['names'][0], func['arguments']))
519 1046
520 # Write declarations for booleans indicating which extensions are available. 1047 # Write declarations for booleans indicating which extensions are available.
521 file.write('\n') 1048 file.write('\n')
522 for extension, ext_functions in used_extension_functions: 1049 for extension, ext_functions in used_extension_functions:
523 file.write('GL_EXPORT extern bool g_%s;\n' % extension) 1050 file.write('GL_EXPORT extern bool g_%s;\n' % extension)
524 1051
525 # Write declarations for function pointers. Always use the GL name for the 1052 # Write declarations for function pointers. Always use the GL name for the
526 # declaration. 1053 # declaration.
527 file.write('\n') 1054 file.write('\n')
528 for [return_type, names, arguments] in functions: 1055 for func in functions:
529 file.write('GL_EXPORT extern %sProc g_%s;\n' % (names[0], names[0])) 1056 file.write('GL_EXPORT extern %sProc g_%s;\n' %
1057 (func['names'][0], func['names'][0]))
530 file.write('\n') 1058 file.write('\n')
531 file.write( '} // namespace gfx\n') 1059 file.write( '} // namespace gfx\n')
532 1060
533 # Write macros to invoke function pointers. Always use the GL name for the 1061 # Write macros to invoke function pointers. Always use the GL name for the
534 # macro. 1062 # macro.
535 file.write('\n') 1063 file.write('\n')
536 for [return_type, names, arguments] in functions: 1064 for func in functions:
537 file.write('#define %s ::gfx::g_%s\n' % 1065 file.write('#define %s ::gfx::g_%s\n' %
538 (names[0], names[0])) 1066 (func['names'][0], func['names'][0]))
539 1067
540 file.write('\n') 1068 file.write('\n')
541 file.write('#endif // UI_GFX_GL_GL_BINDINGS_AUTOGEN_%s_H_\n' % 1069 file.write('#endif // UI_GFX_GL_GL_BINDINGS_AUTOGEN_%s_H_\n' %
542 set_name.upper()) 1070 set_name.upper())
543 1071
544 1072
545 def GenerateSource(file, functions, set_name, used_extension_functions): 1073 def GenerateSource(file, functions, set_name, used_extension_functions):
546 """Generates gl_binding_autogen_x.cc""" 1074 """Generates gl_binding_autogen_x.cc"""
547 1075
548 # Write file header. 1076 # Write file header.
549 file.write('// Copyright (c) 2011 The Chromium Authors. All rights reserved.\n ') 1077 file.write('// Copyright (c) 2011 The Chromium Authors. All rights reserved.\n ')
550 file.write('// Use of this source code is governed by a BSD-style license that can be\n') 1078 file.write('// Use of this source code is governed by a BSD-style license that can be\n')
551 file.write('// found in the LICENSE file.\n') 1079 file.write('// found in the LICENSE file.\n')
552 file.write('\n') 1080 file.write('\n')
553 file.write('// This file is automatically generated.\n') 1081 file.write('// This file is automatically generated.\n')
554 file.write('\n') 1082 file.write('\n')
1083 file.write('#include <string>\n')
555 file.write('#include "ui/gfx/gl/gl_bindings.h"\n') 1084 file.write('#include "ui/gfx/gl/gl_bindings.h"\n')
556 file.write('#include "ui/gfx/gl/gl_context.h"\n') 1085 file.write('#include "ui/gfx/gl/gl_context.h"\n')
557 file.write('#include "ui/gfx/gl/gl_implementation.h"\n') 1086 file.write('#include "ui/gfx/gl/gl_implementation.h"\n')
558 1087
559 # Write definitions for booleans indicating which extensions are available. 1088 # Write definitions for booleans indicating which extensions are available.
560 file.write('\n') 1089 file.write('\n')
561 file.write('namespace gfx {\n') 1090 file.write('namespace gfx {\n')
562 file.write('\n') 1091 file.write('\n')
563 for extension, ext_functions in used_extension_functions: 1092 for extension, ext_functions in used_extension_functions:
564 file.write('bool g_%s;\n' % extension) 1093 file.write('bool g_%s;\n' % extension)
565 1094
566 # Write definitions of function pointers. 1095 # Write definitions of function pointers.
567 file.write('\n') 1096 file.write('\n')
568 file.write('static bool g_debugBindingsInitialized;\n') 1097 file.write('static bool g_debugBindingsInitialized;\n')
569 file.write('static void UpdateDebugGLExtensionBindings();\n') 1098 file.write('static void UpdateDebugGLExtensionBindings();\n')
570 file.write('\n') 1099 file.write('\n')
571 for [return_type, names, arguments] in functions: 1100 for func in functions:
572 file.write('%sProc g_%s;\n' % (names[0], names[0])) 1101 file.write('%sProc g_%s;\n' % (func['names'][0], func['names'][0]))
573 1102
574 file.write('\n') 1103 file.write('\n')
575 for [return_type, names, arguments] in functions: 1104 for func in functions:
576 file.write('static %sProc g_debug_%s;\n' % (names[0], names[0])) 1105 file.write('static %sProc g_debug_%s;\n' %
1106 (func['names'][0], func['names'][0]))
577 1107
578 # Write function to initialize the core function pointers. The code assumes 1108 # Write function to initialize the core function pointers. The code assumes
579 # any non-NULL pointer returned by GetGLCoreProcAddress() is valid, although 1109 # any non-NULL pointer returned by GetGLCoreProcAddress() is valid, although
580 # it may be overwritten by an extension function pointer later. 1110 # it may be overwritten by an extension function pointer later.
581 file.write('\n') 1111 file.write('\n')
582 file.write('void InitializeGLBindings%s() {\n' % set_name.upper()) 1112 file.write('void InitializeGLBindings%s() {\n' % set_name.upper())
583 for [return_type, names, arguments] in functions: 1113 for func in functions:
584 for i, name in enumerate(names): 1114 first_name = func['names'][0]
1115 for i, name in enumerate(func['names']):
585 if i: 1116 if i:
586 file.write(' if (!g_%s)\n ' % names[0]) 1117 file.write(' if (!g_%s)\n ' % first_name)
587 file.write( 1118 file.write(
588 ' g_%s = reinterpret_cast<%sProc>(GetGLCoreProcAddress("%s"));\n' % 1119 ' g_%s = reinterpret_cast<%sProc>(GetGLCoreProcAddress("%s"));\n' %
589 (names[0], names[0], name)) 1120 (first_name, first_name, name))
590 file.write('}\n') 1121 file.write('}\n')
591 file.write('\n') 1122 file.write('\n')
592 1123
593 # Write function to initialize the extension function pointers. This function 1124 # Write function to initialize the extension function pointers. This function
594 # uses a current context to query which extensions are actually supported. 1125 # uses a current context to query which extensions are actually supported.
595 file.write('void InitializeGLExtensionBindings%s(GLContext* context) {\n' % 1126 file.write('void InitializeGLExtensionBindings%s(GLContext* context) {\n' %
596 set_name.upper()) 1127 set_name.upper())
597 file.write(' DCHECK(context && context->IsCurrent(NULL));\n') 1128 file.write(' DCHECK(context && context->IsCurrent(NULL));\n')
598 for extension, ext_functions in used_extension_functions: 1129 for extension, ext_functions in used_extension_functions:
599 file.write(' if ((g_%s = context->HasExtension("%s"))) {\n' % 1130 file.write(' if ((g_%s = context->HasExtension("%s"))) {\n' %
(...skipping 10 matching lines...) Expand all
610 (entry_point_name, entry_point_name, function_name)) 1141 (entry_point_name, entry_point_name, function_name))
611 queried_entry_points.add(entry_point_name) 1142 queried_entry_points.add(entry_point_name)
612 file.write(' }\n') 1143 file.write(' }\n')
613 file.write(' if (g_debugBindingsInitialized)\n') 1144 file.write(' if (g_debugBindingsInitialized)\n')
614 file.write(' UpdateDebugGLExtensionBindings();\n') 1145 file.write(' UpdateDebugGLExtensionBindings();\n')
615 file.write('}\n') 1146 file.write('}\n')
616 file.write('\n') 1147 file.write('\n')
617 1148
618 # Write logging wrappers for each function. 1149 # Write logging wrappers for each function.
619 file.write('extern "C" {\n') 1150 file.write('extern "C" {\n')
620 for [return_type, names, arguments] in functions: 1151 for func in functions:
1152 names = func['names']
1153 return_type = func['return_type']
1154 arguments = func['arguments']
621 file.write('\n') 1155 file.write('\n')
622 file.write('static %s GL_BINDING_CALL Debug_%s(%s) {\n' % 1156 file.write('static %s GL_BINDING_CALL Debug_%s(%s) {\n' %
623 (return_type, names[0], arguments)) 1157 (return_type, names[0], arguments))
624 argument_names = re.sub(r'(const )?[a-zA-Z0-9_]+\** ([a-zA-Z0-9_]+)', r'\2', 1158 argument_names = re.sub(
625 arguments) 1159 r'(const )?[a-zA-Z0-9_]+\** ([a-zA-Z0-9_]+)', r'\2', arguments)
626 argument_names = re.sub(r'(const )?[a-zA-Z0-9_]+\** ([a-zA-Z0-9_]+)', r'\2', 1160 argument_names = re.sub(
627 argument_names) 1161 r'(const )?[a-zA-Z0-9_]+\** ([a-zA-Z0-9_]+)', r'\2', argument_names)
1162 log_argument_names = re.sub(
1163 r'const char\* ([a-zA-Z0-9_]+)', r'CONSTCHAR_\1', arguments)
628 log_argument_names = re.sub( 1164 log_argument_names = re.sub(
629 r'(const )?[a-zA-Z0-9_]+\* ([a-zA-Z0-9_]+)', 1165 r'(const )?[a-zA-Z0-9_]+\* ([a-zA-Z0-9_]+)',
630 r'CONSTVOID_\2', arguments) 1166 r'CONSTVOID_\2', log_argument_names)
631 log_argument_names = re.sub( 1167 log_argument_names = re.sub(
632 r'(const )?[a-zA-Z0-9_]+\** ([a-zA-Z0-9_]+)', r'\2', log_argument_names) 1168 r'(const )?[a-zA-Z0-9_]+\** ([a-zA-Z0-9_]+)', r'\2',
1169 log_argument_names)
633 log_argument_names = re.sub( 1170 log_argument_names = re.sub(
634 r'(const )?[a-zA-Z0-9_]+\** ([a-zA-Z0-9_]+)', r'\2', log_argument_names) 1171 r'(const )?[a-zA-Z0-9_]+\** ([a-zA-Z0-9_]+)', r'\2',
1172 log_argument_names)
635 log_argument_names = re.sub( 1173 log_argument_names = re.sub(
636 r'CONSTVOID_([a-zA-Z0-9_]+)', 1174 r'CONSTVOID_([a-zA-Z0-9_]+)',
637 r'static_cast<const void*>(\1)', log_argument_names); 1175 r'static_cast<const void*>(\1)', log_argument_names);
1176 log_argument_names = re.sub(
1177 r'CONSTCHAR_([a-zA-Z0-9_]+)', r'\1', log_argument_names);
638 log_argument_names = log_argument_names.replace(',', ' << ", " <<'); 1178 log_argument_names = log_argument_names.replace(',', ' << ", " <<');
639 if argument_names == 'void' or argument_names == '': 1179 if argument_names == 'void' or argument_names == '':
640 argument_names = '' 1180 argument_names = ''
641 log_argument_names = '' 1181 log_argument_names = ''
642 else: 1182 else:
643 log_argument_names = " << " + log_argument_names 1183 log_argument_names = " << " + log_argument_names
644 function_name = names[0] 1184 function_name = names[0]
645 if return_type == 'void': 1185 if return_type == 'void':
646 file.write(' GL_SERVICE_LOG("%s" << "(" %s << ")");\n' % 1186 file.write(' GL_SERVICE_LOG("%s" << "(" %s << ")");\n' %
647 (function_name, log_argument_names)) 1187 (function_name, log_argument_names))
648 file.write(' g_debug_%s(%s);\n' % 1188 file.write(' g_debug_%s(%s);\n' %
649 (function_name, argument_names)) 1189 (function_name, argument_names))
650 else: 1190 else:
651 file.write(' GL_SERVICE_LOG("%s" << "(" %s << ")");\n' % 1191 file.write(' GL_SERVICE_LOG("%s" << "(" %s << ")");\n' %
652 (function_name, log_argument_names)) 1192 (function_name, log_argument_names))
653 file.write(' %s result = g_debug_%s(%s);\n' % 1193 file.write(' %s result = g_debug_%s(%s);\n' %
654 (return_type, function_name, argument_names)) 1194 (return_type, function_name, argument_names))
655 file.write(' GL_SERVICE_LOG("GL_RESULT: " << result);\n'); 1195 file.write(' GL_SERVICE_LOG("GL_RESULT: " << result);\n');
656 file.write(' return result;\n') 1196 file.write(' return result;\n')
1197 if 'logging_code' in func:
1198 file.write("%s\n" % func['logging_code'])
657 file.write('}\n') 1199 file.write('}\n')
658 file.write('} // extern "C"\n') 1200 file.write('} // extern "C"\n')
659 1201
660 # Write function to initialize the debug function pointers. 1202 # Write function to initialize the debug function pointers.
661 file.write('\n') 1203 file.write('\n')
662 file.write('void InitializeDebugGLBindings%s() {\n' % set_name.upper()) 1204 file.write('void InitializeDebugGLBindings%s() {\n' % set_name.upper())
663 for [return_type, names, arguments] in functions: 1205 for func in functions:
664 file.write(' if (!g_debug_%s) {\n' % names[0]) 1206 first_name = func['names'][0]
665 file.write(' g_debug_%s = g_%s;\n' % (names[0], names[0])) 1207 file.write(' if (!g_debug_%s) {\n' % first_name)
666 file.write(' g_%s = Debug_%s;\n' % (names[0], names[0])) 1208 file.write(' g_debug_%s = g_%s;\n' % (first_name, first_name))
1209 file.write(' g_%s = Debug_%s;\n' % (first_name, first_name))
667 file.write(' }\n') 1210 file.write(' }\n')
668 file.write(' g_debugBindingsInitialized = true;\n') 1211 file.write(' g_debugBindingsInitialized = true;\n')
669 file.write('}\n') 1212 file.write('}\n')
670 1213
671 # Write function to update the debug function pointers to extension functions 1214 # Write function to update the debug function pointers to extension functions
672 # after the extensions have been initialized. 1215 # after the extensions have been initialized.
673 file.write('\n') 1216 file.write('\n')
674 file.write('static void UpdateDebugGLExtensionBindings() {\n') 1217 file.write('static void UpdateDebugGLExtensionBindings() {\n')
675 for extension, ext_functions in used_extension_functions: 1218 for extension, ext_functions in used_extension_functions:
676 for name, _ in ext_functions: 1219 for name, _ in ext_functions:
677 file.write(' if (g_debug_%s != g_%s &&\n' % (name, name)) 1220 file.write(' if (g_debug_%s != g_%s &&\n' % (name, name))
678 file.write(' g_%s != Debug_%s) {\n' % (name, name)) 1221 file.write(' g_%s != Debug_%s) {\n' % (name, name))
679 file.write(' g_debug_%s = g_%s;\n' % (name, name)) 1222 file.write(' g_debug_%s = g_%s;\n' % (name, name))
680 file.write(' g_%s = Debug_%s;\n' % (name, name)) 1223 file.write(' g_%s = Debug_%s;\n' % (name, name))
681 file.write(' }\n') 1224 file.write(' }\n')
682 file.write('}\n') 1225 file.write('}\n')
683 1226
684 # Write function to clear all function pointers. 1227 # Write function to clear all function pointers.
685 file.write('\n') 1228 file.write('\n')
686 file.write('void ClearGLBindings%s() {\n' % set_name.upper()) 1229 file.write('void ClearGLBindings%s() {\n' % set_name.upper())
687 # Clear the availability of GL extensions. 1230 # Clear the availability of GL extensions.
688 for extension, ext_functions in used_extension_functions: 1231 for extension, ext_functions in used_extension_functions:
689 file.write(' g_%s = false;\n' % extension) 1232 file.write(' g_%s = false;\n' % extension)
690 # Clear GL bindings. 1233 # Clear GL bindings.
691 file.write('\n') 1234 file.write('\n')
692 for [return_type, names, arguments] in functions: 1235 for func in functions:
693 file.write(' g_%s = NULL;\n' % names[0]) 1236 file.write(' g_%s = NULL;\n' % func['names'][0])
694 # Clear debug GL bindings. 1237 # Clear debug GL bindings.
695 file.write('\n') 1238 file.write('\n')
696 for [return_type, names, arguments] in functions: 1239 for func in functions:
697 file.write(' g_debug_%s = NULL;\n' % names[0]) 1240 file.write(' g_debug_%s = NULL;\n' % func['names'][0])
698 file.write(' g_debugBindingsInitialized = false;\n') 1241 file.write(' g_debugBindingsInitialized = false;\n')
699 file.write('}\n') 1242 file.write('}\n')
700 1243
701 file.write('\n') 1244 file.write('\n')
702 file.write('} // namespace gfx\n') 1245 file.write('} // namespace gfx\n')
703 1246
704 1247
705 def GenerateMockSource(file, functions): 1248 def GenerateMockSource(file, functions):
706 """Generates functions that invoke a mock GLInterface""" 1249 """Generates functions that invoke a mock GLInterface"""
707 1250
708 file.write('// Copyright (c) 2011 The Chromium Authors. All rights reserved.\n ') 1251 file.write('// Copyright (c) 2011 The Chromium Authors. All rights reserved.\n ')
709 file.write('// Use of this source code is governed by a BSD-style license that can be\n') 1252 file.write('// Use of this source code is governed by a BSD-style license that can be\n')
710 file.write('// found in the LICENSE file.\n') 1253 file.write('// found in the LICENSE file.\n')
711 file.write('\n') 1254 file.write('\n')
712 file.write('// This file is automatically generated.\n') 1255 file.write('// This file is automatically generated.\n')
713 file.write('\n') 1256 file.write('\n')
714 file.write('#include <string.h>\n') 1257 file.write('#include <string.h>\n')
715 file.write('\n') 1258 file.write('\n')
716 file.write('#include "ui/gfx/gl/gl_interface.h"\n') 1259 file.write('#include "ui/gfx/gl/gl_interface.h"\n')
717 1260
718 file.write('\n') 1261 file.write('\n')
719 file.write('namespace gfx {\n') 1262 file.write('namespace gfx {\n')
720 1263
721 # Write function that trampoline into the GLInterface. 1264 # Write function that trampoline into the GLInterface.
722 for [return_type, names, arguments] in functions: 1265 for func in functions:
723 file.write('\n') 1266 file.write('\n')
724 file.write('%s GL_BINDING_CALL Mock_%s(%s) {\n' % 1267 file.write('%s GL_BINDING_CALL Mock_%s(%s) {\n' %
725 (return_type, names[0], arguments)) 1268 (func['return_type'], func['names'][0], func['arguments']))
726 argument_names = re.sub(r'(const )?[a-zA-Z0-9]+\** ([a-zA-Z0-9]+)', r'\2', 1269 argument_names = re.sub(r'(const )?[a-zA-Z0-9]+\** ([a-zA-Z0-9]+)', r'\2',
727 arguments) 1270 func['arguments'])
728 if argument_names == 'void': 1271 if argument_names == 'void':
729 argument_names = '' 1272 argument_names = ''
730 function_name = names[0][2:] 1273 function_name = func['names'][0][2:]
731 if return_type == 'void': 1274 if func['return_type'] == 'void':
732 file.write(' GLInterface::GetGLInterface()->%s(%s);\n' % 1275 file.write(' GLInterface::GetGLInterface()->%s(%s);\n' %
733 (function_name, argument_names)) 1276 (function_name, argument_names))
734 else: 1277 else:
735 file.write(' return GLInterface::GetGLInterface()->%s(%s);\n' % 1278 file.write(' return GLInterface::GetGLInterface()->%s(%s);\n' %
736 (function_name, argument_names)) 1279 (function_name, argument_names))
737 file.write('}\n') 1280 file.write('}\n')
738 1281
739 # Write an 'invalid' function to catch code calling through uninitialized 1282 # Write an 'invalid' function to catch code calling through uninitialized
740 # function pointers or trying to interpret the return value of 1283 # function pointers or trying to interpret the return value of
741 # GLProcAddress(). 1284 # GLProcAddress().
742 file.write('\n') 1285 file.write('\n')
743 file.write('static void MockInvalidFunction() {\n') 1286 file.write('static void MockInvalidFunction() {\n')
744 file.write(' NOTREACHED();\n') 1287 file.write(' NOTREACHED();\n')
745 file.write('}\n') 1288 file.write('}\n')
746 1289
747 # Write a function to lookup a mock GL function based on its name. 1290 # Write a function to lookup a mock GL function based on its name.
748 file.write('\n') 1291 file.write('\n')
749 file.write('void* GL_BINDING_CALL GetMockGLProcAddress(const char* name) {\n') 1292 file.write('void* GL_BINDING_CALL GetMockGLProcAddress(const char* name) {\n')
750 for [return_type, names, arguments] in functions: 1293 for func in functions:
751 file.write(' if (strcmp(name, "%s") == 0)\n' % names[0]) 1294 first_name = func['names'][0]
752 file.write(' return reinterpret_cast<void*>(Mock_%s);\n' % names[0]) 1295 file.write(' if (strcmp(name, "%s") == 0)\n' % first_name)
1296 file.write(' return reinterpret_cast<void*>(Mock_%s);\n' % first_name)
753 # Always return a non-NULL pointer like some EGL implementations do. 1297 # Always return a non-NULL pointer like some EGL implementations do.
754 file.write(' return reinterpret_cast<void*>(&MockInvalidFunction);\n') 1298 file.write(' return reinterpret_cast<void*>(&MockInvalidFunction);\n')
755 file.write('}\n'); 1299 file.write('}\n');
756 1300
757 file.write('\n') 1301 file.write('\n')
758 file.write('} // namespace gfx\n') 1302 file.write('} // namespace gfx\n')
759 1303
760 1304
761 def ParseExtensionFunctionsFromHeader(header_file): 1305 def ParseExtensionFunctionsFromHeader(header_file):
762 """Parse a C extension header file and return a map from extension names to 1306 """Parse a C extension header file and return a map from extension names to
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
843 Returns: 1387 Returns:
844 List of (extension name, [function name alternatives]) sorted with least 1388 List of (extension name, [function name alternatives]) sorted with least
845 preferred extensions first. 1389 preferred extensions first.
846 """ 1390 """
847 # Parse known extensions. 1391 # Parse known extensions.
848 extensions = GetExtensionFunctions(extension_headers) 1392 extensions = GetExtensionFunctions(extension_headers)
849 functions_to_extensions = GetFunctionToExtensionMap(extensions) 1393 functions_to_extensions = GetFunctionToExtensionMap(extensions)
850 1394
851 # Collect all used extension functions. 1395 # Collect all used extension functions.
852 used_extension_functions = collections.defaultdict(lambda: []) 1396 used_extension_functions = collections.defaultdict(lambda: [])
853 for [return_type, names, arguments] in functions: 1397 for func in functions:
854 for name in names: 1398 for name in func['names']:
855 # Make sure we know about all extension functions. 1399 # Make sure we know about all extension functions.
856 if (LooksLikeExtensionFunction(name) and 1400 if (LooksLikeExtensionFunction(name) and
857 not name in functions_to_extensions): 1401 not name in functions_to_extensions):
858 raise RuntimeError('%s looks like an extension function but does not ' 1402 raise RuntimeError('%s looks like an extension function but does not '
859 'belong to any of the known extensions.' % name) 1403 'belong to any of the known extensions.' % name)
860 if name in functions_to_extensions: 1404 if name in functions_to_extensions:
861 extension = functions_to_extensions[name] 1405 extension = functions_to_extensions[name]
862 used_extension_functions[extension].append((names[0], name)) 1406 used_extension_functions[extension].append((func['names'][0], name))
863 1407
864 def ExtensionSortKey(name): 1408 def ExtensionSortKey(name):
865 # Prefer ratified extensions and EXTs. 1409 # Prefer ratified extensions and EXTs.
866 preferences = ['_ARB_', '_OES_', '_EXT_', ''] 1410 preferences = ['_ARB_', '_OES_', '_EXT_', '']
867 for i, category in enumerate(preferences): 1411 for i, category in enumerate(preferences):
868 if category in name: 1412 if category in name:
869 return -i 1413 return -i
870 used_extension_functions = sorted(used_extension_functions.items(), 1414 used_extension_functions = sorted(used_extension_functions.items(),
871 key = lambda item: ExtensionSortKey(item[0])) 1415 key = lambda item: ExtensionSortKey(item[0]))
872 return used_extension_functions 1416 return used_extension_functions
(...skipping 22 matching lines...) Expand all
895 source_file.close() 1439 source_file.close()
896 1440
897 source_file = open(os.path.join(dir, 'gl_bindings_autogen_mock.cc'), 'wb') 1441 source_file = open(os.path.join(dir, 'gl_bindings_autogen_mock.cc'), 'wb')
898 GenerateMockSource(source_file, GL_FUNCTIONS) 1442 GenerateMockSource(source_file, GL_FUNCTIONS)
899 source_file.close() 1443 source_file.close()
900 return 0 1444 return 0
901 1445
902 1446
903 if __name__ == '__main__': 1447 if __name__ == '__main__':
904 sys.exit(main(sys.argv[1:])) 1448 sys.exit(main(sys.argv[1:]))
OLDNEW
« no previous file with comments | « no previous file | ui/gfx/gl/gl_bindings.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698