1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5
6 #include "ui/gl/gl_bindings_skia_in_process.h"
7
8 #include "base/logging.h"
9 #include "third_party/skia/include/gpu/gl/GrGLInterface.h"
10 #include "ui/gl/gl_bindings.h"
11 #include "ui/gl/gl_implementation.h"
12
13 namespace {
14
15 extern "C" {
16 // The following stub functions are required because the glXXX routines exported
17 // via gl_bindings.h use call-type GL_BINDING_CALL, which on Windows is stdcall.
18 // Skia has been built such that its GrGLInterface GL pointers are __cdecl.
19
StubGLActiveTexture(GLenum texture)20 GLvoid StubGLActiveTexture(GLenum texture) {
21 glActiveTexture(texture);
22 }
23
StubGLAttachShader(GLuint program,GLuint shader)24 GLvoid StubGLAttachShader(GLuint program, GLuint shader) {
25 glAttachShader(program, shader);
26 }
27
StubGLBeginQuery(GLenum target,GLuint id)28 GLvoid StubGLBeginQuery(GLenum target, GLuint id) {
29 glBeginQuery(target, id);
30 }
31
StubGLBindAttribLocation(GLuint program,GLuint index,const char * name)32 GLvoid StubGLBindAttribLocation(GLuint program, GLuint index,
33 const char* name) {
34 glBindAttribLocation(program, index, name);
35 }
36
StubGLBindBuffer(GLenum target,GLuint buffer)37 GLvoid StubGLBindBuffer(GLenum target, GLuint buffer) {
38 glBindBuffer(target, buffer);
39 }
40
StubGLBindFragDataLocation(GLuint program,GLuint colorNumber,const GLchar * name)41 GLvoid StubGLBindFragDataLocation(GLuint program, GLuint colorNumber,
42 const GLchar * name) {
43 glBindFragDataLocation(program, colorNumber, name);
44 }
45
StubGLBindFragDataLocationIndexed(GLuint program,GLuint colorNumber,GLuint index,const GLchar * name)46 GLvoid StubGLBindFragDataLocationIndexed(GLuint program, GLuint colorNumber,
47 GLuint index, const GLchar * name) {
48 glBindFragDataLocationIndexed(program, colorNumber, index, name);
49 }
50
StubGLBindFramebuffer(GLenum target,GLuint framebuffer)51 GLvoid StubGLBindFramebuffer(GLenum target, GLuint framebuffer) {
52 glBindFramebufferEXT(target, framebuffer);
53 }
54
StubGLBindRenderbuffer(GLenum target,GLuint renderbuffer)55 GLvoid StubGLBindRenderbuffer(GLenum target, GLuint renderbuffer) {
56 glBindRenderbufferEXT(target, renderbuffer);
57 }
58
StubGLBindTexture(GLenum target,GLuint texture)59 GLvoid StubGLBindTexture(GLenum target, GLuint texture) {
60 glBindTexture(target, texture);
61 }
62
StubGLBindVertexArray(GLuint array)63 GLvoid StubGLBindVertexArray(GLuint array) {
64 glBindVertexArrayOES(array);
65 }
66
StubGLBlendColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)67 GLvoid StubGLBlendColor(GLclampf red, GLclampf green, GLclampf blue,
68 GLclampf alpha) {
69 glBlendColor(red, green, blue, alpha);
70 }
71
StubGLBlendFunc(GLenum sfactor,GLenum dfactor)72 GLvoid StubGLBlendFunc(GLenum sfactor, GLenum dfactor) {
73 glBlendFunc(sfactor, dfactor);
74 }
75
StubGLBlitFramebuffer(GLint srcX0,GLint srcY0,GLint srcX1,GLint srcY1,GLint dstX0,GLint dstY0,GLint dstX1,GLint dstY1,GLbitfield mask,GLenum filter)76 GLvoid StubGLBlitFramebuffer(GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
77 GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
78 GLbitfield mask, GLenum filter) {
79 glBlitFramebufferEXT(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1,
80 mask, filter);
81 }
82
StubGLBufferData(GLenum target,GLsizeiptr size,const void * data,GLenum usage)83 GLvoid StubGLBufferData(GLenum target, GLsizeiptr size, const void* data,
84 GLenum usage) {
85 glBufferData(target, size, data, usage);
86 }
87
StubGLBufferSubData(GLenum target,GLintptr offset,GLsizeiptr size,const void * data)88 GLvoid StubGLBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size,
89 const void* data) {
90 glBufferSubData(target, offset, size, data);
91 }
92
StubGLCheckFramebufferStatus(GLenum target)93 GLenum StubGLCheckFramebufferStatus(GLenum target) {
94 return glCheckFramebufferStatusEXT(target);
95 }
96
StubGLClear(GLbitfield mask)97 GLvoid StubGLClear(GLbitfield mask) {
98 glClear(mask);
99 }
100
StubGLClearColor(GLclampf red,GLclampf green,GLclampf blue,GLclampf alpha)101 GLvoid StubGLClearColor(GLclampf red, GLclampf green, GLclampf blue,
102 GLclampf alpha) {
103 glClearColor(red, green, blue, alpha);
104 }
105
StubGLClearStencil(GLint s)106 GLvoid StubGLClearStencil(GLint s) {
107 glClearStencil(s);
108 }
109
StubGLColorMask(GLboolean red,GLboolean green,GLboolean blue,GLboolean alpha)110 GLvoid StubGLColorMask(GLboolean red, GLboolean green, GLboolean blue,
111 GLboolean alpha) {
112 glColorMask(red, green, blue, alpha);
113 }
114
StubGLCompileShader(GLuint shader)115 GLvoid StubGLCompileShader(GLuint shader) {
116 glCompileShader(shader);
117 }
118
StubGLCompressedTexImage2D(GLenum target,GLint level,GLenum internalformat,GLsizei width,GLsizei height,GLint border,GLsizei imageSize,const void * data)119 GLvoid StubGLCompressedTexImage2D(GLenum target, GLint level,
120 GLenum internalformat, GLsizei width,
121 GLsizei height, GLint border,
122 GLsizei imageSize, const void* data) {
123 glCompressedTexImage2D(target, level, internalformat, width, height, border,
124 imageSize, data);
125 }
126
StubGLCopyTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLint x,GLint y,GLsizei width,GLsizei height)127 GLvoid StubGLCopyTexSubImage2D(GLenum target, GLint level,
128 GLint xoffset, GLint yoffset,
129 GLint x, GLint y,
130 GLsizei width, GLsizei height) {
131 glCopyTexSubImage2D(target, level, xoffset, yoffset, x, y, width, height);
132 }
133
StubGLCreateProgram(void)134 GLuint StubGLCreateProgram(void) {
135 return glCreateProgram();
136 }
137
StubGLCreateShader(GLenum type)138 GLuint StubGLCreateShader(GLenum type) {
139 return glCreateShader(type);
140 }
141
StubGLCullFace(GLenum mode)142 GLvoid StubGLCullFace(GLenum mode) {
143 glCullFace(mode);
144 }
145
StubGLDeleteBuffers(GLsizei n,const GLuint * buffers)146 GLvoid StubGLDeleteBuffers(GLsizei n, const GLuint* buffers) {
147 glDeleteBuffersARB(n, buffers);
148 }
149
StubGLDeleteFramebuffers(GLsizei n,const GLuint * framebuffers)150 GLvoid StubGLDeleteFramebuffers(GLsizei n, const GLuint* framebuffers) {
151 glDeleteFramebuffersEXT(n, framebuffers);
152 }
153
StubGLDeleteQueries(GLsizei n,const GLuint * ids)154 GLvoid StubGLDeleteQueries(GLsizei n, const GLuint* ids) {
155 glDeleteQueries(n, ids);
156 }
157
StubGLDeleteProgram(GLuint program)158 GLvoid StubGLDeleteProgram(GLuint program) {
159 glDeleteProgram(program);
160 }
161
StubGLDeleteRenderbuffers(GLsizei n,const GLuint * renderbuffers)162 GLvoid StubGLDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers) {
163 glDeleteRenderbuffersEXT(n, renderbuffers);
164 }
165
StubGLDeleteShader(GLuint shader)166 GLvoid StubGLDeleteShader(GLuint shader) {
167 glDeleteShader(shader);
168 }
169
StubGLDeleteTextures(GLsizei n,const GLuint * textures)170 GLvoid StubGLDeleteTextures(GLsizei n, const GLuint* textures) {
171 glDeleteTextures(n, textures);
172 }
173
StubGLDeleteVertexArrays(GLsizei n,const GLuint * arrays)174 GLvoid StubGLDeleteVertexArrays(GLsizei n, const GLuint* arrays) {
175 glDeleteVertexArraysOES(n, arrays);
176 }
177
StubGLDepthMask(GLboolean flag)178 GLvoid StubGLDepthMask(GLboolean flag) {
179 glDepthMask(flag);
180 }
181
StubGLDisable(GLenum cap)182 GLvoid StubGLDisable(GLenum cap) {
183 glDisable(cap);
184 }
185
StubGLDisableVertexAttribArray(GLuint index)186 GLvoid StubGLDisableVertexAttribArray(GLuint index) {
187 glDisableVertexAttribArray(index);
188 }
189
StubGLDrawArrays(GLenum mode,GLint first,GLsizei count)190 GLvoid StubGLDrawArrays(GLenum mode, GLint first, GLsizei count) {
191 glDrawArrays(mode, first, count);
192 }
193
StubGLDrawBuffer(GLenum mode)194 GLvoid StubGLDrawBuffer(GLenum mode) {
195 glDrawBuffer(mode);
196 }
197
StubGLDrawBuffers(GLsizei n,const GLenum * bufs)198 GLvoid StubGLDrawBuffers(GLsizei n, const GLenum* bufs) {
199 glDrawBuffersARB(n, bufs);
200 }
201
StubGLDrawElements(GLenum mode,GLsizei count,GLenum type,const void * indices)202 GLvoid StubGLDrawElements(GLenum mode, GLsizei count, GLenum type,
203 const void* indices) {
204 glDrawElements(mode, count, type, indices);
205 }
206
StubGLEnable(GLenum cap)207 GLvoid StubGLEnable(GLenum cap) {
208 glEnable(cap);
209 }
210
StubGLEnableVertexAttribArray(GLuint index)211 GLvoid StubGLEnableVertexAttribArray(GLuint index) {
212 glEnableVertexAttribArray(index);
213 }
214
StubGLEndQuery(GLenum target)215 GLvoid StubGLEndQuery(GLenum target) {
216 glEndQuery(target);
217 }
218
StubGLFinish()219 GLvoid StubGLFinish() {
220 glFinish();
221 }
222
StubGLFlush()223 GLvoid StubGLFlush() {
224 glFlush();
225 }
226
StubGLFramebufferRenderbuffer(GLenum target,GLenum attachment,GLenum renderbuffertarget,GLuint renderbuffer)227 GLvoid StubGLFramebufferRenderbuffer(GLenum target, GLenum attachment,
228 GLenum renderbuffertarget,
229 GLuint renderbuffer) {
230 glFramebufferRenderbufferEXT(target, attachment, renderbuffertarget,
231 renderbuffer);
232 }
233
StubGLFramebufferTexture2D(GLenum target,GLenum attachment,GLenum textarget,GLuint texture,GLint level)234 GLvoid StubGLFramebufferTexture2D(GLenum target, GLenum attachment,
235 GLenum textarget, GLuint texture,
236 GLint level) {
237 glFramebufferTexture2DEXT(target, attachment, textarget, texture, level);
238 }
239
StubGLFramebufferTexture2DMultisample(GLenum target,GLenum attachment,GLenum textarget,GLuint texture,GLint level,GLsizei samples)240 GLvoid StubGLFramebufferTexture2DMultisample(GLenum target, GLenum attachment,
241 GLenum textarget, GLuint texture,
242 GLint level, GLsizei samples) {
243 glFramebufferTexture2DMultisampleEXT(target, attachment, textarget, texture,
244 level, samples);
245 }
246
StubGLFrontFace(GLenum mode)247 GLvoid StubGLFrontFace(GLenum mode) {
248 glFrontFace(mode);
249 }
250
StubGLGenBuffers(GLsizei n,GLuint * buffers)251 GLvoid StubGLGenBuffers(GLsizei n, GLuint* buffers) {
252 glGenBuffersARB(n, buffers);
253 }
254
StubGLGenFramebuffers(GLsizei n,GLuint * framebuffers)255 GLvoid StubGLGenFramebuffers(GLsizei n, GLuint* framebuffers) {
256 glGenFramebuffersEXT(n, framebuffers);
257 }
258
StubGLGenQueries(GLsizei n,GLuint * ids)259 GLvoid StubGLGenQueries(GLsizei n, GLuint* ids) {
260 glGenQueries(n, ids);
261 }
262
StubGLGenRenderbuffers(GLsizei n,GLuint * renderbuffers)263 GLvoid StubGLGenRenderbuffers(GLsizei n, GLuint* renderbuffers) {
264 glGenRenderbuffersEXT(n, renderbuffers);
265 }
266
StubGLGenTextures(GLsizei n,GLuint * textures)267 GLvoid StubGLGenTextures(GLsizei n, GLuint* textures) {
268 glGenTextures(n, textures);
269 }
270
StubGLGenVertexArrays(GLsizei n,GLuint * arrays)271 GLvoid StubGLGenVertexArrays(GLsizei n, GLuint* arrays) {
272 glGenVertexArraysOES(n, arrays);
273 }
274
StubGLGetBufferParameteriv(GLenum target,GLenum pname,GLint * params)275 GLvoid StubGLGetBufferParameteriv(GLenum target, GLenum pname, GLint* params) {
276 glGetBufferParameteriv(target, pname, params);
277 }
278
StubGLGetFramebufferAttachmentParameteriv(GLenum target,GLenum attachment,GLenum pname,GLint * params)279 GLvoid StubGLGetFramebufferAttachmentParameteriv(GLenum target,
280 GLenum attachment,
281 GLenum pname, GLint* params) {
282 glGetFramebufferAttachmentParameterivEXT(target, attachment, pname, params);
283 }
284
StubGLGetError()285 GLenum StubGLGetError() {
286 return glGetError();
287 }
288
StubGLGetIntegerv(GLenum pname,GLint * params)289 GLvoid StubGLGetIntegerv(GLenum pname, GLint* params) {
290 glGetIntegerv(pname, params);
291 }
292
StubGLGetProgramInfoLog(GLuint program,GLsizei bufsize,GLsizei * length,char * infolog)293 GLvoid StubGLGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length,
294 char* infolog) {
295 glGetProgramInfoLog(program, bufsize, length, infolog);
296 }
297
StubGLGetProgramiv(GLuint program,GLenum pname,GLint * params)298 GLvoid StubGLGetProgramiv(GLuint program, GLenum pname, GLint* params) {
299 glGetProgramiv(program, pname, params);
300 }
301
StubGLGetRenderbufferParameteriv(GLenum target,GLenum pname,GLint * params)302 GLvoid StubGLGetRenderbufferParameteriv(GLenum target,
303 GLenum pname, GLint* params) {
304 glGetRenderbufferParameterivEXT(target, pname, params);
305 }
306
StubGLGetShaderInfoLog(GLuint shader,GLsizei bufsize,GLsizei * length,char * infolog)307 GLvoid StubGLGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length,
308 char* infolog) {
309 glGetShaderInfoLog(shader, bufsize, length, infolog);
310 }
311
StubGLGetShaderiv(GLuint shader,GLenum pname,GLint * params)312 GLvoid StubGLGetShaderiv(GLuint shader, GLenum pname, GLint* params) {
313 glGetShaderiv(shader, pname, params);
314 }
315
StubGLGetString(GLenum name)316 const GLubyte* StubGLGetString(GLenum name) {
317 return glGetString(name);
318 }
319
StubGLGetQueryiv(GLenum target,GLenum pname,GLint * params)320 GLvoid StubGLGetQueryiv(GLenum target, GLenum pname, GLint* params) {
321 glGetQueryiv(target, pname, params);
322 }
323
StubGLGetQueryObjecti64v(GLuint id,GLenum pname,GLint64 * params)324 GLvoid StubGLGetQueryObjecti64v(GLuint id, GLenum pname, GLint64* params) {
325 glGetQueryObjecti64v(id, pname, params);
326 }
327
StubGLGetQueryObjectiv(GLuint id,GLenum pname,GLint * params)328 GLvoid StubGLGetQueryObjectiv(GLuint id, GLenum pname, GLint* params) {
329 glGetQueryObjectiv(id, pname, params);
330 }
331
StubGLGetQueryObjectui64v(GLuint id,GLenum pname,GLuint64 * params)332 GLvoid StubGLGetQueryObjectui64v(GLuint id, GLenum pname, GLuint64* params) {
333 glGetQueryObjectui64v(id, pname, params);
334 }
335
StubGLGetQueryObjectuiv(GLuint id,GLenum pname,GLuint * params)336 GLvoid StubGLGetQueryObjectuiv(GLuint id, GLenum pname, GLuint* params) {
337 glGetQueryObjectuiv(id, pname, params);
338 }
339
StubGLGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint * params)340 GLvoid StubGLGetTexLevelParameteriv(GLenum target, GLint level,
341 GLenum pname, GLint* params) {
342 glGetTexLevelParameteriv(target, level, pname, params);
343 }
344
StubGLGetUniformLocation(GLuint program,const char * name)345 GLint StubGLGetUniformLocation(GLuint program, const char* name) {
346 return glGetUniformLocation(program, name);
347 }
348
StubGLLineWidth(GLfloat width)349 GLvoid StubGLLineWidth(GLfloat width) {
350 glLineWidth(width);
351 }
352
StubGLLinkProgram(GLuint program)353 GLvoid StubGLLinkProgram(GLuint program) {
354 glLinkProgram(program);
355 }
356
StubGLMapBuffer(GLenum target,GLenum access)357 void* StubGLMapBuffer(GLenum target, GLenum access) {
358 return glMapBuffer(target, access);
359 }
360
StubGLPixelStorei(GLenum pname,GLint param)361 GLvoid StubGLPixelStorei(GLenum pname, GLint param) {
362 glPixelStorei(pname, param);
363 }
364
StubGLQueryCounter(GLuint id,GLenum target)365 GLvoid StubGLQueryCounter(GLuint id, GLenum target) {
366 glQueryCounter(id, target);
367 }
368
StubGLReadBuffer(GLenum src)369 GLvoid StubGLReadBuffer(GLenum src) {
370 glReadBuffer(src);
371 }
372
StubGLReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,void * pixels)373 GLvoid StubGLReadPixels(GLint x, GLint y, GLsizei width, GLsizei height,
374 GLenum format, GLenum type, void* pixels) {
375 glReadPixels(x, y, width, height, format, type, pixels);
376 }
377
StubGLRenderbufferStorage(GLenum target,GLenum internalformat,GLsizei width,GLsizei height)378 GLvoid StubGLRenderbufferStorage(GLenum target, GLenum internalformat,
379 GLsizei width, GLsizei height) {
380 glRenderbufferStorageEXT(target, internalformat, width, height);
381 }
382
StubGLRenderbufferStorageMultisample(GLenum target,GLsizei samples,GLenum internalformat,GLsizei width,GLsizei height)383 GLvoid StubGLRenderbufferStorageMultisample(GLenum target, GLsizei samples,
384 GLenum internalformat,
385 GLsizei width, GLsizei height) {
386 glRenderbufferStorageMultisampleEXT(target, samples, internalformat, width,
387 height);
388 }
389
StubGLScissor(GLint x,GLint y,GLsizei width,GLsizei height)390 GLvoid StubGLScissor(GLint x, GLint y, GLsizei width, GLsizei height) {
391 glScissor(x, y, width, height);
392 }
393
StubGLShaderSource(GLuint shader,GLsizei count,const char * const * str,const GLint * length)394 GLvoid StubGLShaderSource(GLuint shader, GLsizei count, const char* const* str,
395 const GLint* length) {
396 glShaderSource(shader, count, str, length);
397 }
398
StubGLStencilFunc(GLenum func,GLint ref,GLuint mask)399 GLvoid StubGLStencilFunc(GLenum func, GLint ref, GLuint mask) {
400 glStencilFunc(func, ref, mask);
401 }
402
StubGLStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)403 GLvoid StubGLStencilFuncSeparate(GLenum face, GLenum func, GLint ref,
404 GLuint mask) {
405 glStencilFuncSeparate(face, func, ref, mask);
406 }
407
StubGLStencilMask(GLuint mask)408 GLvoid StubGLStencilMask(GLuint mask) {
409 glStencilMask(mask);
410 }
411
StubGLStencilMaskSeparate(GLenum face,GLuint mask)412 GLvoid StubGLStencilMaskSeparate(GLenum face, GLuint mask) {
413 glStencilMaskSeparate(face, mask);
414 }
415
StubGLStencilOp(GLenum fail,GLenum zfail,GLenum zpass)416 GLvoid StubGLStencilOp(GLenum fail, GLenum zfail, GLenum zpass) {
417 glStencilOp(fail, zfail, zpass);
418 }
419
StubGLStencilOpSeparate(GLenum face,GLenum fail,GLenum zfail,GLenum zpass)420 GLvoid StubGLStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail,
421 GLenum zpass) {
422 glStencilOpSeparate(face, fail, zfail, zpass);
423 }
424
StubGLTexImage2D(GLenum target,GLint level,GLint internalformat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const void * pixels)425 GLvoid StubGLTexImage2D(GLenum target, GLint level, GLint internalformat,
426 GLsizei width, GLsizei height, GLint border,
427 GLenum format, GLenum type, const void* pixels) {
428 glTexImage2D(target, level, internalformat, width, height, border, format,
429 type, pixels);
430 }
431
StubGLTexParameteri(GLenum target,GLenum pname,GLint param)432 GLvoid StubGLTexParameteri(GLenum target, GLenum pname, GLint param) {
433 glTexParameteri(target, pname, param);
434 }
435
StubGLTexParameteriv(GLenum target,GLenum pname,const GLint * params)436 GLvoid StubGLTexParameteriv(GLenum target, GLenum pname, const GLint* params) {
437 glTexParameteriv(target, pname, params);
438 }
439
StubGLTexStorage2D(GLenum target,GLsizei levels,GLenum internalFormat,GLsizei width,GLsizei height)440 GLvoid StubGLTexStorage2D(GLenum target, GLsizei levels, GLenum internalFormat,
441 GLsizei width, GLsizei height) {
442 glTexStorage2DEXT(target, levels, internalFormat, width, height);
443 }
444
StubGLTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const void * pixels)445 GLvoid StubGLTexSubImage2D(GLenum target, GLint level, GLint xoffset,
446 GLint yoffset, GLsizei width, GLsizei height,
447 GLenum format, GLenum type, const void* pixels) {
448 glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type,
449 pixels);
450 }
451
StubGLUniform1f(GLint location,GLfloat v)452 GLvoid StubGLUniform1f(GLint location, GLfloat v) {
453 glUniform1i(location, v);
454 }
455
StubGLUniform1i(GLint location,GLint v)456 GLvoid StubGLUniform1i(GLint location, GLint v) {
457 glUniform1i(location, v);
458 }
459
StubGLUniform1fv(GLint location,GLsizei count,const GLfloat * v)460 GLvoid StubGLUniform1fv(GLint location, GLsizei count, const GLfloat* v) {
461 glUniform1fv(location, count, v);
462 }
463
StubGLUniform1iv(GLint location,GLsizei count,const GLint * v)464 GLvoid StubGLUniform1iv(GLint location, GLsizei count, const GLint* v) {
465 glUniform1iv(location, count, v);
466 }
467
StubGLUniform2f(GLint location,GLfloat v0,GLfloat v1)468 GLvoid StubGLUniform2f(GLint location, GLfloat v0, GLfloat v1) {
469 glUniform2i(location, v0, v1);
470 }
471
StubGLUniform2i(GLint location,GLint v0,GLint v1)472 GLvoid StubGLUniform2i(GLint location, GLint v0, GLint v1) {
473 glUniform2i(location, v0, v1);
474 }
475
StubGLUniform2fv(GLint location,GLsizei count,const GLfloat * v)476 GLvoid StubGLUniform2fv(GLint location, GLsizei count, const GLfloat* v) {
477 glUniform2fv(location, count, v);
478 }
479
StubGLUniform2iv(GLint location,GLsizei count,const GLint * v)480 GLvoid StubGLUniform2iv(GLint location, GLsizei count, const GLint* v) {
481 glUniform2iv(location, count, v);
482 }
483
StubGLUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)484 GLvoid StubGLUniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2) {
485 glUniform3i(location, v0, v1, v2);
486 }
487
StubGLUniform3i(GLint location,GLint v0,GLint v1,GLint v2)488 GLvoid StubGLUniform3i(GLint location, GLint v0, GLint v1, GLint v2) {
489 glUniform3i(location, v0, v1, v2);
490 }
491
StubGLUniform3fv(GLint location,GLsizei count,const GLfloat * v)492 GLvoid StubGLUniform3fv(GLint location, GLsizei count, const GLfloat* v) {
493 glUniform3fv(location, count, v);
494 }
495
StubGLUniform3iv(GLint location,GLsizei count,const GLint * v)496 GLvoid StubGLUniform3iv(GLint location, GLsizei count, const GLint* v) {
497 glUniform3iv(location, count, v);
498 }
499
StubGLUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)500 GLvoid StubGLUniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2,
501 GLfloat v3) {
502 glUniform4i(location, v0, v1, v2, v3);
503 }
504
StubGLUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)505 GLvoid StubGLUniform4i(GLint location, GLint v0, GLint v1, GLint v2,
506 GLint v3) {
507 glUniform4i(location, v0, v1, v2, v3);
508 }
509
StubGLUniform4fv(GLint location,GLsizei count,const GLfloat * v)510 GLvoid StubGLUniform4fv(GLint location, GLsizei count, const GLfloat* v) {
511 glUniform4fv(location, count, v);
512 }
513
StubGLUniform4iv(GLint location,GLsizei count,const GLint * v)514 GLvoid StubGLUniform4iv(GLint location, GLsizei count, const GLint* v) {
515 glUniform4iv(location, count, v);
516 }
517
StubGLUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)518 GLvoid StubGLUniformMatrix2fv(GLint location, GLsizei count,
519 GLboolean transpose, const GLfloat* value) {
520 glUniformMatrix2fv(location, count, transpose, value);
521 }
522
StubGLUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)523 GLvoid StubGLUniformMatrix3fv(GLint location, GLsizei count,
524 GLboolean transpose, const GLfloat* value) {
525 glUniformMatrix3fv(location, count, transpose, value);
526 }
527
StubGLUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)528 GLvoid StubGLUniformMatrix4fv(GLint location, GLsizei count,
529 GLboolean transpose, const GLfloat* value) {
530 glUniformMatrix4fv(location, count, transpose, value);
531 }
532
StubGLUnmapBuffer(GLenum target)533 GLboolean StubGLUnmapBuffer(GLenum target) {
534 return glUnmapBuffer(target);
535 }
536
StubGLUseProgram(GLuint program)537 GLvoid StubGLUseProgram(GLuint program) {
538 glUseProgram(program);
539 }
540
StubGLVertexAttrib4fv(GLuint indx,const GLfloat * values)541 GLvoid StubGLVertexAttrib4fv(GLuint indx, const GLfloat* values) {
542 glVertexAttrib4fv(indx, values);
543 }
544
StubGLVertexAttribPointer(GLuint indx,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const void * ptr)545 GLvoid StubGLVertexAttribPointer(GLuint indx, GLint size, GLenum type,
546 GLboolean normalized, GLsizei stride,
547 const void* ptr) {
548 glVertexAttribPointer(indx, size, type, normalized, stride, ptr);
549 }
550
StubGLViewport(GLint x,GLint y,GLsizei width,GLsizei height)551 GLvoid StubGLViewport(GLint x, GLint y, GLsizei width, GLsizei height) {
552 glViewport(x, y, width, height);
553 }
554 } // extern "C"
555 } // namespace
556
557 namespace gfx {
558
CreateInProcessSkiaGLBinding()559 GrGLInterface* CreateInProcessSkiaGLBinding() {
560 GrGLBinding binding;
561 switch (gfx::GetGLImplementation()) {
562 case gfx::kGLImplementationNone:
563 NOTREACHED();
564 return NULL;
565 case gfx::kGLImplementationDesktopGL:
566 case gfx::kGLImplementationAppleGL:
567 binding = kDesktop_GrGLBinding;
568 break;
569 case gfx::kGLImplementationOSMesaGL:
570 binding = kDesktop_GrGLBinding;
571 break;
572 case gfx::kGLImplementationEGLGLES2:
573 binding = kES2_GrGLBinding;
574 break;
575 case gfx::kGLImplementationMockGL:
576 NOTREACHED();
577 return NULL;
578 default:
579 NOTREACHED();
580 return NULL;
581 }
582
583 GrGLInterface* interface = new GrGLInterface;
584
585 interface->fBindingsExported = binding;
586 interface->fActiveTexture = StubGLActiveTexture;
587 interface->fAttachShader = StubGLAttachShader;
588 interface->fBeginQuery = StubGLBeginQuery;
589 interface->fBindAttribLocation = StubGLBindAttribLocation;
590 interface->fBindBuffer = StubGLBindBuffer;
591 interface->fBindFragDataLocation = StubGLBindFragDataLocation;
592 interface->fBindTexture = StubGLBindTexture;
593 interface->fBindVertexArray = StubGLBindVertexArray;
594 interface->fBlendColor = StubGLBlendColor;
595 interface->fBlendFunc = StubGLBlendFunc;
596 interface->fBufferData = StubGLBufferData;
597 interface->fBufferSubData = StubGLBufferSubData;
598 interface->fClear = StubGLClear;
599 interface->fClearColor = StubGLClearColor;
600 interface->fClearStencil = StubGLClearStencil;
601 interface->fColorMask = StubGLColorMask;
602 interface->fCompileShader = StubGLCompileShader;
603 interface->fCompressedTexImage2D = StubGLCompressedTexImage2D;
604 interface->fCopyTexSubImage2D = StubGLCopyTexSubImage2D;
605 interface->fCreateProgram = StubGLCreateProgram;
606 interface->fCreateShader = StubGLCreateShader;
607 interface->fCullFace = StubGLCullFace;
608 interface->fDeleteBuffers = StubGLDeleteBuffers;
609 interface->fDeleteProgram = StubGLDeleteProgram;
610 interface->fDeleteQueries = StubGLDeleteQueries;
611 interface->fDeleteShader = StubGLDeleteShader;
612 interface->fDeleteTextures = StubGLDeleteTextures;
613 interface->fDeleteVertexArrays = StubGLDeleteVertexArrays;
614 interface->fDepthMask = StubGLDepthMask;
615 interface->fDisable = StubGLDisable;
616 interface->fDisableVertexAttribArray = StubGLDisableVertexAttribArray;
617 interface->fDrawArrays = StubGLDrawArrays;
618 interface->fDrawBuffer = StubGLDrawBuffer;
619 interface->fDrawBuffers = StubGLDrawBuffers;
620 interface->fDrawElements = StubGLDrawElements;
621 interface->fEnable = StubGLEnable;
622 interface->fEnableVertexAttribArray = StubGLEnableVertexAttribArray;
623 interface->fEndQuery = StubGLEndQuery;
624 interface->fFinish = StubGLFinish;
625 interface->fFlush = StubGLFlush;
626 interface->fFrontFace = StubGLFrontFace;
627 interface->fGenBuffers = StubGLGenBuffers;
628 interface->fGenQueries = StubGLGenQueries;
629 interface->fGenTextures = StubGLGenTextures;
630 interface->fGenVertexArrays = StubGLGenVertexArrays;
631 interface->fGetBufferParameteriv = StubGLGetBufferParameteriv;
632 interface->fGetError = StubGLGetError;
633 interface->fGetIntegerv = StubGLGetIntegerv;
634 interface->fGetQueryiv = StubGLGetQueryiv;
635 interface->fGetQueryObjecti64v = StubGLGetQueryObjecti64v;
636 interface->fGetQueryObjectiv = StubGLGetQueryObjectiv;
637 interface->fGetQueryObjectui64v = StubGLGetQueryObjectui64v;
638 interface->fGetQueryObjectuiv = StubGLGetQueryObjectuiv;
639 interface->fGetProgramInfoLog = StubGLGetProgramInfoLog;
640 interface->fGetProgramiv = StubGLGetProgramiv;
641 interface->fGetShaderInfoLog = StubGLGetShaderInfoLog;
642 interface->fGetShaderiv = StubGLGetShaderiv;
643 interface->fGetString = StubGLGetString;
644 interface->fGetTexLevelParameteriv = StubGLGetTexLevelParameteriv;
645 interface->fGetUniformLocation = StubGLGetUniformLocation;
646 interface->fLineWidth = StubGLLineWidth;
647 interface->fLinkProgram = StubGLLinkProgram;
648 interface->fPixelStorei = StubGLPixelStorei;
649 interface->fQueryCounter = StubGLQueryCounter;
650 interface->fReadBuffer = StubGLReadBuffer;
651 interface->fReadPixels = StubGLReadPixels;
652 interface->fScissor = StubGLScissor;
653 interface->fShaderSource = StubGLShaderSource;
654 interface->fStencilFunc = StubGLStencilFunc;
655 interface->fStencilFuncSeparate = StubGLStencilFuncSeparate;
656 interface->fStencilMask = StubGLStencilMask;
657 interface->fStencilMaskSeparate = StubGLStencilMaskSeparate;
658 interface->fStencilOp = StubGLStencilOp;
659 interface->fStencilOpSeparate = StubGLStencilOpSeparate;
660 interface->fTexImage2D = StubGLTexImage2D;
661 interface->fTexParameteri = StubGLTexParameteri;
662 interface->fTexParameteriv = StubGLTexParameteriv;
663 interface->fTexSubImage2D = StubGLTexSubImage2D;
664 interface->fTexStorage2D = StubGLTexStorage2D;
665 interface->fUniform1f = StubGLUniform1f;
666 interface->fUniform1i = StubGLUniform1i;
667 interface->fUniform1fv = StubGLUniform1fv;
668 interface->fUniform1iv = StubGLUniform1iv;
669 interface->fUniform2f = StubGLUniform2f;
670 interface->fUniform2i = StubGLUniform2i;
671 interface->fUniform2fv = StubGLUniform2fv;
672 interface->fUniform2iv = StubGLUniform2iv;
673 interface->fUniform3f = StubGLUniform3f;
674 interface->fUniform3i = StubGLUniform3i;
675 interface->fUniform3fv = StubGLUniform3fv;
676 interface->fUniform3iv = StubGLUniform3iv;
677 interface->fUniform4f = StubGLUniform4f;
678 interface->fUniform4i = StubGLUniform4i;
679 interface->fUniform4fv = StubGLUniform4fv;
680 interface->fUniform4iv = StubGLUniform4iv;
681 interface->fUniformMatrix2fv = StubGLUniformMatrix2fv;
682 interface->fUniformMatrix3fv = StubGLUniformMatrix3fv;
683 interface->fUniformMatrix4fv = StubGLUniformMatrix4fv;
684 interface->fUseProgram = StubGLUseProgram;
685 interface->fVertexAttrib4fv = StubGLVertexAttrib4fv;
686 interface->fVertexAttribPointer = StubGLVertexAttribPointer;
687 interface->fViewport = StubGLViewport;
688 interface->fBindFramebuffer = StubGLBindFramebuffer;
689 interface->fBindRenderbuffer = StubGLBindRenderbuffer;
690 interface->fCheckFramebufferStatus = StubGLCheckFramebufferStatus;
691 interface->fDeleteFramebuffers = StubGLDeleteFramebuffers;
692 interface->fDeleteRenderbuffers = StubGLDeleteRenderbuffers;
693 interface->fFramebufferRenderbuffer = StubGLFramebufferRenderbuffer;
694 interface->fFramebufferTexture2D = StubGLFramebufferTexture2D;
695 interface->fFramebufferTexture2DMultisample =
696 StubGLFramebufferTexture2DMultisample;
697 interface->fGenFramebuffers = StubGLGenFramebuffers;
698 interface->fGenRenderbuffers = StubGLGenRenderbuffers;
699 interface->fGetFramebufferAttachmentParameteriv =
700 StubGLGetFramebufferAttachmentParameteriv;
701 interface->fGetRenderbufferParameteriv = StubGLGetRenderbufferParameteriv;
702 interface->fRenderbufferStorage = StubGLRenderbufferStorage;
703 interface->fRenderbufferStorageMultisample =
704 StubGLRenderbufferStorageMultisample;
705 interface->fBlitFramebuffer = StubGLBlitFramebuffer;
706 interface->fMapBuffer = StubGLMapBuffer;
707 interface->fUnmapBuffer = StubGLUnmapBuffer;
708 interface->fBindFragDataLocationIndexed =
709 StubGLBindFragDataLocationIndexed;
710 return interface;
711 }
712
713 } // namespace gfx
714