• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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