• 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 
StubGLDiscardFramebuffer(GLenum target,GLsizei numAttachments,const GLenum * attachments)190 GLvoid StubGLDiscardFramebuffer(GLenum target, GLsizei numAttachments,
191                                 const GLenum *attachments) {
192   glDiscardFramebufferEXT(target, numAttachments, attachments);
193 }
194 
StubGLDrawArrays(GLenum mode,GLint first,GLsizei count)195 GLvoid StubGLDrawArrays(GLenum mode, GLint first, GLsizei count) {
196   glDrawArrays(mode, first, count);
197 }
198 
StubGLDrawBuffer(GLenum mode)199 GLvoid StubGLDrawBuffer(GLenum mode) {
200   glDrawBuffer(mode);
201 }
202 
StubGLDrawBuffers(GLsizei n,const GLenum * bufs)203 GLvoid StubGLDrawBuffers(GLsizei n, const GLenum* bufs) {
204   glDrawBuffersARB(n, bufs);
205 }
206 
StubGLDrawElements(GLenum mode,GLsizei count,GLenum type,const void * indices)207 GLvoid StubGLDrawElements(GLenum mode, GLsizei count, GLenum type,
208                           const void* indices) {
209   glDrawElements(mode, count, type, indices);
210 }
211 
StubGLEnable(GLenum cap)212 GLvoid StubGLEnable(GLenum cap) {
213   glEnable(cap);
214 }
215 
StubGLEnableVertexAttribArray(GLuint index)216 GLvoid StubGLEnableVertexAttribArray(GLuint index) {
217   glEnableVertexAttribArray(index);
218 }
219 
StubGLEndQuery(GLenum target)220 GLvoid StubGLEndQuery(GLenum target) {
221   glEndQuery(target);
222 }
223 
StubGLFinish()224 GLvoid StubGLFinish() {
225   glFinish();
226 }
227 
StubGLFlush()228 GLvoid StubGLFlush() {
229   glFlush();
230 }
231 
StubGLFramebufferRenderbuffer(GLenum target,GLenum attachment,GLenum renderbuffertarget,GLuint renderbuffer)232 GLvoid StubGLFramebufferRenderbuffer(GLenum target, GLenum attachment,
233                                      GLenum renderbuffertarget,
234                                      GLuint renderbuffer) {
235   glFramebufferRenderbufferEXT(target, attachment, renderbuffertarget,
236                                renderbuffer);
237 }
238 
StubGLFramebufferTexture2D(GLenum target,GLenum attachment,GLenum textarget,GLuint texture,GLint level)239 GLvoid StubGLFramebufferTexture2D(GLenum target, GLenum attachment,
240                                   GLenum textarget, GLuint texture,
241                                   GLint level) {
242   glFramebufferTexture2DEXT(target, attachment, textarget, texture, level);
243 }
244 
StubGLFramebufferTexture2DMultisample(GLenum target,GLenum attachment,GLenum textarget,GLuint texture,GLint level,GLsizei samples)245 GLvoid StubGLFramebufferTexture2DMultisample(GLenum target, GLenum attachment,
246                                   GLenum textarget, GLuint texture,
247                                   GLint level, GLsizei samples) {
248   glFramebufferTexture2DMultisampleEXT(target, attachment, textarget, texture,
249       level, samples);
250 }
251 
StubGLFrontFace(GLenum mode)252 GLvoid StubGLFrontFace(GLenum mode) {
253   glFrontFace(mode);
254 }
255 
StubGLGenBuffers(GLsizei n,GLuint * buffers)256 GLvoid StubGLGenBuffers(GLsizei n, GLuint* buffers) {
257   glGenBuffersARB(n, buffers);
258 }
259 
StubGLGenFramebuffers(GLsizei n,GLuint * framebuffers)260 GLvoid StubGLGenFramebuffers(GLsizei n, GLuint* framebuffers) {
261   glGenFramebuffersEXT(n, framebuffers);
262 }
263 
StubGLGenQueries(GLsizei n,GLuint * ids)264 GLvoid StubGLGenQueries(GLsizei n, GLuint* ids) {
265   glGenQueries(n, ids);
266 }
267 
StubGLGenRenderbuffers(GLsizei n,GLuint * renderbuffers)268 GLvoid StubGLGenRenderbuffers(GLsizei n, GLuint* renderbuffers) {
269   glGenRenderbuffersEXT(n, renderbuffers);
270 }
271 
StubGLGenTextures(GLsizei n,GLuint * textures)272 GLvoid StubGLGenTextures(GLsizei n, GLuint* textures) {
273   glGenTextures(n, textures);
274 }
275 
StubGLGenVertexArrays(GLsizei n,GLuint * arrays)276 GLvoid StubGLGenVertexArrays(GLsizei n, GLuint* arrays) {
277   glGenVertexArraysOES(n, arrays);
278 }
279 
StubGLGetBufferParameteriv(GLenum target,GLenum pname,GLint * params)280 GLvoid StubGLGetBufferParameteriv(GLenum target, GLenum pname, GLint* params) {
281   glGetBufferParameteriv(target, pname, params);
282 }
283 
StubGLGetFramebufferAttachmentParameteriv(GLenum target,GLenum attachment,GLenum pname,GLint * params)284 GLvoid StubGLGetFramebufferAttachmentParameteriv(GLenum target,
285                                                  GLenum attachment,
286                                                  GLenum pname, GLint* params) {
287   glGetFramebufferAttachmentParameterivEXT(target, attachment, pname, params);
288 }
289 
StubGLGetError()290 GLenum StubGLGetError() {
291   return glGetError();
292 }
293 
StubGLGetIntegerv(GLenum pname,GLint * params)294 GLvoid StubGLGetIntegerv(GLenum pname, GLint* params) {
295   glGetIntegerv(pname, params);
296 }
297 
StubGLGetProgramInfoLog(GLuint program,GLsizei bufsize,GLsizei * length,char * infolog)298 GLvoid StubGLGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length,
299                                char* infolog) {
300   glGetProgramInfoLog(program, bufsize, length, infolog);
301 }
302 
StubGLGetProgramiv(GLuint program,GLenum pname,GLint * params)303 GLvoid StubGLGetProgramiv(GLuint program, GLenum pname, GLint* params) {
304   glGetProgramiv(program, pname, params);
305 }
306 
StubGLGetRenderbufferParameteriv(GLenum target,GLenum pname,GLint * params)307 GLvoid StubGLGetRenderbufferParameteriv(GLenum target,
308                                         GLenum pname, GLint* params) {
309   glGetRenderbufferParameterivEXT(target, pname, params);
310 }
311 
StubGLGetShaderInfoLog(GLuint shader,GLsizei bufsize,GLsizei * length,char * infolog)312 GLvoid StubGLGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length,
313                               char* infolog) {
314   glGetShaderInfoLog(shader, bufsize, length, infolog);
315 }
316 
StubGLGetShaderiv(GLuint shader,GLenum pname,GLint * params)317 GLvoid StubGLGetShaderiv(GLuint shader, GLenum pname, GLint* params) {
318   glGetShaderiv(shader, pname, params);
319 }
320 
StubGLGetString(GLenum name)321 const GLubyte* StubGLGetString(GLenum name) {
322   return glGetString(name);
323 }
324 
StubGLGetQueryiv(GLenum target,GLenum pname,GLint * params)325 GLvoid StubGLGetQueryiv(GLenum target, GLenum pname, GLint* params) {
326   glGetQueryiv(target, pname, params);
327 }
328 
StubGLGetQueryObjecti64v(GLuint id,GLenum pname,GLint64 * params)329 GLvoid StubGLGetQueryObjecti64v(GLuint id, GLenum pname, GLint64* params) {
330   glGetQueryObjecti64v(id, pname, params);
331 }
332 
StubGLGetQueryObjectiv(GLuint id,GLenum pname,GLint * params)333 GLvoid StubGLGetQueryObjectiv(GLuint id, GLenum pname, GLint* params) {
334   glGetQueryObjectiv(id, pname, params);
335 }
336 
StubGLGetQueryObjectui64v(GLuint id,GLenum pname,GLuint64 * params)337 GLvoid StubGLGetQueryObjectui64v(GLuint id, GLenum pname, GLuint64* params) {
338   glGetQueryObjectui64v(id, pname, params);
339 }
340 
StubGLGetQueryObjectuiv(GLuint id,GLenum pname,GLuint * params)341 GLvoid StubGLGetQueryObjectuiv(GLuint id, GLenum pname, GLuint* params) {
342   glGetQueryObjectuiv(id, pname, params);
343 }
344 
StubGLGetTexLevelParameteriv(GLenum target,GLint level,GLenum pname,GLint * params)345 GLvoid StubGLGetTexLevelParameteriv(GLenum target, GLint level,
346                                     GLenum pname, GLint* params) {
347   glGetTexLevelParameteriv(target, level, pname, params);
348 }
349 
StubGLGetUniformLocation(GLuint program,const char * name)350 GLint StubGLGetUniformLocation(GLuint program, const char* name) {
351   return glGetUniformLocation(program, name);
352 }
353 
StubGLInsertEventMarker(GLsizei length,const char * marker)354 GLvoid StubGLInsertEventMarker(GLsizei length, const char* marker) {
355   glInsertEventMarkerEXT(length, marker);
356 }
357 
StubGLLineWidth(GLfloat width)358 GLvoid StubGLLineWidth(GLfloat width) {
359   glLineWidth(width);
360 }
361 
StubGLLinkProgram(GLuint program)362 GLvoid StubGLLinkProgram(GLuint program) {
363   glLinkProgram(program);
364 }
365 
StubGLMapBuffer(GLenum target,GLenum access)366 void* StubGLMapBuffer(GLenum target, GLenum access) {
367   return glMapBuffer(target, access);
368 }
369 
StubGLPixelStorei(GLenum pname,GLint param)370 GLvoid StubGLPixelStorei(GLenum pname, GLint param) {
371   glPixelStorei(pname, param);
372 }
373 
StubGLPopGroupMarker()374 GLvoid StubGLPopGroupMarker() {
375   glPopGroupMarkerEXT();
376 }
377 
StubGLPushGroupMarker(GLsizei length,const char * marker)378 GLvoid StubGLPushGroupMarker(GLsizei length, const char* marker) {
379   glPushGroupMarkerEXT(length, marker);
380 }
381 
StubGLQueryCounter(GLuint id,GLenum target)382 GLvoid StubGLQueryCounter(GLuint id, GLenum target) {
383   glQueryCounter(id, target);
384 }
385 
StubGLReadBuffer(GLenum src)386 GLvoid StubGLReadBuffer(GLenum src) {
387   glReadBuffer(src);
388 }
389 
StubGLReadPixels(GLint x,GLint y,GLsizei width,GLsizei height,GLenum format,GLenum type,void * pixels)390 GLvoid StubGLReadPixels(GLint x, GLint y, GLsizei width, GLsizei height,
391                         GLenum format, GLenum type, void* pixels) {
392   glReadPixels(x, y, width, height, format, type, pixels);
393 }
394 
StubGLRenderbufferStorage(GLenum target,GLenum internalformat,GLsizei width,GLsizei height)395 GLvoid StubGLRenderbufferStorage(GLenum target, GLenum internalformat,
396                                  GLsizei width, GLsizei height) {
397   glRenderbufferStorageEXT(target, internalformat, width, height);
398 }
399 
StubGLRenderbufferStorageMultisample(GLenum target,GLsizei samples,GLenum internalformat,GLsizei width,GLsizei height)400 GLvoid StubGLRenderbufferStorageMultisample(GLenum target, GLsizei samples,
401                                             GLenum internalformat,
402                                             GLsizei width, GLsizei height) {
403   glRenderbufferStorageMultisampleEXT(target, samples, internalformat, width,
404                                       height);
405 }
406 
StubGLScissor(GLint x,GLint y,GLsizei width,GLsizei height)407 GLvoid StubGLScissor(GLint x, GLint y, GLsizei width, GLsizei height) {
408   glScissor(x, y, width, height);
409 }
410 
StubGLShaderSource(GLuint shader,GLsizei count,const char * const * str,const GLint * length)411 GLvoid StubGLShaderSource(GLuint shader, GLsizei count, const char* const* str,
412                           const GLint* length) {
413   glShaderSource(shader, count, str, length);
414 }
415 
StubGLStencilFunc(GLenum func,GLint ref,GLuint mask)416 GLvoid StubGLStencilFunc(GLenum func, GLint ref, GLuint mask) {
417   glStencilFunc(func, ref, mask);
418 }
419 
StubGLStencilFuncSeparate(GLenum face,GLenum func,GLint ref,GLuint mask)420 GLvoid StubGLStencilFuncSeparate(GLenum face, GLenum func, GLint ref,
421                                  GLuint mask) {
422   glStencilFuncSeparate(face, func, ref, mask);
423 }
424 
StubGLStencilMask(GLuint mask)425 GLvoid StubGLStencilMask(GLuint mask) {
426   glStencilMask(mask);
427 }
428 
StubGLStencilMaskSeparate(GLenum face,GLuint mask)429 GLvoid StubGLStencilMaskSeparate(GLenum face, GLuint mask) {
430   glStencilMaskSeparate(face, mask);
431 }
432 
StubGLStencilOp(GLenum fail,GLenum zfail,GLenum zpass)433 GLvoid StubGLStencilOp(GLenum fail, GLenum zfail, GLenum zpass) {
434   glStencilOp(fail, zfail, zpass);
435 }
436 
StubGLStencilOpSeparate(GLenum face,GLenum fail,GLenum zfail,GLenum zpass)437 GLvoid StubGLStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail,
438                                GLenum zpass) {
439   glStencilOpSeparate(face, fail, zfail, zpass);
440 }
441 
StubGLTexImage2D(GLenum target,GLint level,GLint internalformat,GLsizei width,GLsizei height,GLint border,GLenum format,GLenum type,const void * pixels)442 GLvoid StubGLTexImage2D(GLenum target, GLint level, GLint internalformat,
443                         GLsizei width, GLsizei height, GLint border,
444                         GLenum format, GLenum type, const void* pixels) {
445   glTexImage2D(target, level, internalformat, width, height, border, format,
446                type, pixels);
447 }
448 
StubGLTexParameteri(GLenum target,GLenum pname,GLint param)449 GLvoid StubGLTexParameteri(GLenum target, GLenum pname, GLint param) {
450   glTexParameteri(target, pname, param);
451 }
452 
StubGLTexParameteriv(GLenum target,GLenum pname,const GLint * params)453 GLvoid StubGLTexParameteriv(GLenum target, GLenum pname, const GLint* params) {
454   glTexParameteriv(target, pname, params);
455 }
456 
StubGLTexStorage2D(GLenum target,GLsizei levels,GLenum internalFormat,GLsizei width,GLsizei height)457 GLvoid StubGLTexStorage2D(GLenum target, GLsizei levels, GLenum internalFormat,
458                           GLsizei width, GLsizei height) {
459   glTexStorage2DEXT(target, levels, internalFormat, width, height);
460 }
461 
StubGLTexSubImage2D(GLenum target,GLint level,GLint xoffset,GLint yoffset,GLsizei width,GLsizei height,GLenum format,GLenum type,const void * pixels)462 GLvoid StubGLTexSubImage2D(GLenum target, GLint level, GLint xoffset,
463                            GLint yoffset, GLsizei width, GLsizei height,
464                            GLenum format, GLenum type, const void* pixels) {
465   glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type,
466                   pixels);
467 }
468 
StubGLUniform1f(GLint location,GLfloat v)469 GLvoid StubGLUniform1f(GLint location, GLfloat v) {
470   glUniform1i(location, v);
471 }
472 
StubGLUniform1i(GLint location,GLint v)473 GLvoid StubGLUniform1i(GLint location, GLint v) {
474   glUniform1i(location, v);
475 }
476 
StubGLUniform1fv(GLint location,GLsizei count,const GLfloat * v)477 GLvoid StubGLUniform1fv(GLint location, GLsizei count, const GLfloat* v) {
478   glUniform1fv(location, count, v);
479 }
480 
StubGLUniform1iv(GLint location,GLsizei count,const GLint * v)481 GLvoid StubGLUniform1iv(GLint location, GLsizei count, const GLint* v) {
482   glUniform1iv(location, count, v);
483 }
484 
StubGLUniform2f(GLint location,GLfloat v0,GLfloat v1)485 GLvoid StubGLUniform2f(GLint location, GLfloat v0, GLfloat v1) {
486   glUniform2i(location, v0, v1);
487 }
488 
StubGLUniform2i(GLint location,GLint v0,GLint v1)489 GLvoid StubGLUniform2i(GLint location, GLint v0, GLint v1) {
490   glUniform2i(location, v0, v1);
491 }
492 
StubGLUniform2fv(GLint location,GLsizei count,const GLfloat * v)493 GLvoid StubGLUniform2fv(GLint location, GLsizei count, const GLfloat* v) {
494   glUniform2fv(location, count, v);
495 }
496 
StubGLUniform2iv(GLint location,GLsizei count,const GLint * v)497 GLvoid StubGLUniform2iv(GLint location, GLsizei count, const GLint* v) {
498   glUniform2iv(location, count, v);
499 }
500 
StubGLUniform3f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2)501 GLvoid StubGLUniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2) {
502   glUniform3i(location, v0, v1, v2);
503 }
504 
StubGLUniform3i(GLint location,GLint v0,GLint v1,GLint v2)505 GLvoid StubGLUniform3i(GLint location, GLint v0, GLint v1, GLint v2) {
506   glUniform3i(location, v0, v1, v2);
507 }
508 
StubGLUniform3fv(GLint location,GLsizei count,const GLfloat * v)509 GLvoid StubGLUniform3fv(GLint location, GLsizei count, const GLfloat* v) {
510   glUniform3fv(location, count, v);
511 }
512 
StubGLUniform3iv(GLint location,GLsizei count,const GLint * v)513 GLvoid StubGLUniform3iv(GLint location, GLsizei count, const GLint* v) {
514   glUniform3iv(location, count, v);
515 }
516 
StubGLUniform4f(GLint location,GLfloat v0,GLfloat v1,GLfloat v2,GLfloat v3)517 GLvoid StubGLUniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2,
518                        GLfloat v3) {
519   glUniform4i(location, v0, v1, v2, v3);
520 }
521 
StubGLUniform4i(GLint location,GLint v0,GLint v1,GLint v2,GLint v3)522 GLvoid StubGLUniform4i(GLint location, GLint v0, GLint v1, GLint v2,
523                        GLint v3) {
524   glUniform4i(location, v0, v1, v2, v3);
525 }
526 
StubGLUniform4fv(GLint location,GLsizei count,const GLfloat * v)527 GLvoid StubGLUniform4fv(GLint location, GLsizei count, const GLfloat* v) {
528   glUniform4fv(location, count, v);
529 }
530 
StubGLUniform4iv(GLint location,GLsizei count,const GLint * v)531 GLvoid StubGLUniform4iv(GLint location, GLsizei count, const GLint* v) {
532   glUniform4iv(location, count, v);
533 }
534 
StubGLUniformMatrix2fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)535 GLvoid StubGLUniformMatrix2fv(GLint location, GLsizei count,
536                               GLboolean transpose, const GLfloat* value) {
537   glUniformMatrix2fv(location, count, transpose, value);
538 }
539 
StubGLUniformMatrix3fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)540 GLvoid StubGLUniformMatrix3fv(GLint location, GLsizei count,
541                               GLboolean transpose, const GLfloat* value) {
542   glUniformMatrix3fv(location, count, transpose, value);
543 }
544 
StubGLUniformMatrix4fv(GLint location,GLsizei count,GLboolean transpose,const GLfloat * value)545 GLvoid StubGLUniformMatrix4fv(GLint location, GLsizei count,
546                               GLboolean transpose, const GLfloat* value) {
547   glUniformMatrix4fv(location, count, transpose, value);
548 }
549 
StubGLUnmapBuffer(GLenum target)550 GLboolean StubGLUnmapBuffer(GLenum target) {
551   return glUnmapBuffer(target);
552 }
553 
StubGLUseProgram(GLuint program)554 GLvoid StubGLUseProgram(GLuint program) {
555   glUseProgram(program);
556 }
557 
StubGLVertexAttrib4fv(GLuint indx,const GLfloat * values)558 GLvoid StubGLVertexAttrib4fv(GLuint indx, const GLfloat* values) {
559   glVertexAttrib4fv(indx, values);
560 }
561 
StubGLVertexAttribPointer(GLuint indx,GLint size,GLenum type,GLboolean normalized,GLsizei stride,const void * ptr)562 GLvoid StubGLVertexAttribPointer(GLuint indx, GLint size, GLenum type,
563                                  GLboolean normalized, GLsizei stride,
564                                  const void* ptr) {
565   glVertexAttribPointer(indx, size, type, normalized, stride, ptr);
566 }
567 
StubGLViewport(GLint x,GLint y,GLsizei width,GLsizei height)568 GLvoid StubGLViewport(GLint x, GLint y, GLsizei width, GLsizei height) {
569   glViewport(x, y, width, height);
570 }
571 }  // extern "C"
572 }  // namespace
573 
574 namespace gfx {
575 
CreateInProcessSkiaGLBinding()576 GrGLInterface* CreateInProcessSkiaGLBinding() {
577   GrGLStandard standard;
578   switch (gfx::GetGLImplementation()) {
579     case gfx::kGLImplementationNone:
580       NOTREACHED();
581       return NULL;
582     case gfx::kGLImplementationDesktopGL:
583     case gfx::kGLImplementationAppleGL:
584       standard = kGL_GrGLStandard;
585       break;
586     case gfx::kGLImplementationOSMesaGL:
587       standard = kGL_GrGLStandard;
588       break;
589     case gfx::kGLImplementationEGLGLES2:
590       standard = kGLES_GrGLStandard;
591       break;
592     case gfx::kGLImplementationMockGL:
593       NOTREACHED();
594       return NULL;
595     default:
596       NOTREACHED();
597       return NULL;
598   }
599 
600   GrGLInterface* interface = new GrGLInterface;
601   interface->fStandard = standard;
602   interface->fExtensions.init(standard,
603                               StubGLGetString,
604                               NULL,
605                               StubGLGetIntegerv);
606 
607   GrGLInterface::Functions* functions = &interface->fFunctions;
608   functions->fActiveTexture = StubGLActiveTexture;
609   functions->fAttachShader = StubGLAttachShader;
610   functions->fBeginQuery = StubGLBeginQuery;
611   functions->fBindAttribLocation = StubGLBindAttribLocation;
612   functions->fBindBuffer = StubGLBindBuffer;
613   functions->fBindFragDataLocation = StubGLBindFragDataLocation;
614   functions->fBindTexture = StubGLBindTexture;
615   functions->fBindVertexArray = StubGLBindVertexArray;
616   functions->fBlendColor = StubGLBlendColor;
617   functions->fBlendFunc = StubGLBlendFunc;
618   functions->fBufferData = StubGLBufferData;
619   functions->fBufferSubData = StubGLBufferSubData;
620   functions->fClear = StubGLClear;
621   functions->fClearColor = StubGLClearColor;
622   functions->fClearStencil = StubGLClearStencil;
623   functions->fColorMask = StubGLColorMask;
624   functions->fCompileShader = StubGLCompileShader;
625   functions->fCompressedTexImage2D = StubGLCompressedTexImage2D;
626   functions->fCopyTexSubImage2D = StubGLCopyTexSubImage2D;
627   functions->fCreateProgram = StubGLCreateProgram;
628   functions->fCreateShader = StubGLCreateShader;
629   functions->fCullFace = StubGLCullFace;
630   functions->fDeleteBuffers = StubGLDeleteBuffers;
631   functions->fDeleteProgram = StubGLDeleteProgram;
632   functions->fDeleteQueries = StubGLDeleteQueries;
633   functions->fDeleteShader = StubGLDeleteShader;
634   functions->fDeleteTextures = StubGLDeleteTextures;
635   functions->fDeleteVertexArrays = StubGLDeleteVertexArrays;
636   functions->fDepthMask = StubGLDepthMask;
637   functions->fDisable = StubGLDisable;
638   functions->fDisableVertexAttribArray = StubGLDisableVertexAttribArray;
639   functions->fDiscardFramebuffer = StubGLDiscardFramebuffer;
640   functions->fDrawArrays = StubGLDrawArrays;
641   functions->fDrawBuffer = StubGLDrawBuffer;
642   functions->fDrawBuffers = StubGLDrawBuffers;
643   functions->fDrawElements = StubGLDrawElements;
644   functions->fEnable = StubGLEnable;
645   functions->fEnableVertexAttribArray = StubGLEnableVertexAttribArray;
646   functions->fEndQuery = StubGLEndQuery;
647   functions->fFinish = StubGLFinish;
648   functions->fFlush = StubGLFlush;
649   functions->fFrontFace = StubGLFrontFace;
650   functions->fGenBuffers = StubGLGenBuffers;
651   functions->fGenQueries = StubGLGenQueries;
652   functions->fGenTextures = StubGLGenTextures;
653   functions->fGenVertexArrays = StubGLGenVertexArrays;
654   functions->fGetBufferParameteriv = StubGLGetBufferParameteriv;
655   functions->fGetError = StubGLGetError;
656   functions->fGetIntegerv = StubGLGetIntegerv;
657   functions->fGetQueryiv = StubGLGetQueryiv;
658   functions->fGetQueryObjecti64v = StubGLGetQueryObjecti64v;
659   functions->fGetQueryObjectiv = StubGLGetQueryObjectiv;
660   functions->fGetQueryObjectui64v = StubGLGetQueryObjectui64v;
661   functions->fGetQueryObjectuiv = StubGLGetQueryObjectuiv;
662   functions->fGetProgramInfoLog = StubGLGetProgramInfoLog;
663   functions->fGetProgramiv = StubGLGetProgramiv;
664   functions->fGetShaderInfoLog = StubGLGetShaderInfoLog;
665   functions->fGetShaderiv = StubGLGetShaderiv;
666   functions->fGetString = StubGLGetString;
667   functions->fGetTexLevelParameteriv = StubGLGetTexLevelParameteriv;
668   functions->fGetUniformLocation = StubGLGetUniformLocation;
669   functions->fInsertEventMarker = StubGLInsertEventMarker;
670   functions->fLineWidth = StubGLLineWidth;
671   functions->fLinkProgram = StubGLLinkProgram;
672   functions->fPixelStorei = StubGLPixelStorei;
673   functions->fPopGroupMarker = StubGLPopGroupMarker;
674   functions->fPushGroupMarker = StubGLPushGroupMarker;
675   functions->fQueryCounter = StubGLQueryCounter;
676   functions->fReadBuffer = StubGLReadBuffer;
677   functions->fReadPixels = StubGLReadPixels;
678   functions->fScissor = StubGLScissor;
679   functions->fShaderSource = StubGLShaderSource;
680   functions->fStencilFunc = StubGLStencilFunc;
681   functions->fStencilFuncSeparate = StubGLStencilFuncSeparate;
682   functions->fStencilMask = StubGLStencilMask;
683   functions->fStencilMaskSeparate = StubGLStencilMaskSeparate;
684   functions->fStencilOp = StubGLStencilOp;
685   functions->fStencilOpSeparate = StubGLStencilOpSeparate;
686   functions->fTexImage2D = StubGLTexImage2D;
687   functions->fTexParameteri = StubGLTexParameteri;
688   functions->fTexParameteriv = StubGLTexParameteriv;
689   functions->fTexSubImage2D = StubGLTexSubImage2D;
690   functions->fTexStorage2D = StubGLTexStorage2D;
691   functions->fUniform1f = StubGLUniform1f;
692   functions->fUniform1i = StubGLUniform1i;
693   functions->fUniform1fv = StubGLUniform1fv;
694   functions->fUniform1iv = StubGLUniform1iv;
695   functions->fUniform2f = StubGLUniform2f;
696   functions->fUniform2i = StubGLUniform2i;
697   functions->fUniform2fv = StubGLUniform2fv;
698   functions->fUniform2iv = StubGLUniform2iv;
699   functions->fUniform3f = StubGLUniform3f;
700   functions->fUniform3i = StubGLUniform3i;
701   functions->fUniform3fv = StubGLUniform3fv;
702   functions->fUniform3iv = StubGLUniform3iv;
703   functions->fUniform4f = StubGLUniform4f;
704   functions->fUniform4i = StubGLUniform4i;
705   functions->fUniform4fv = StubGLUniform4fv;
706   functions->fUniform4iv = StubGLUniform4iv;
707   functions->fUniformMatrix2fv = StubGLUniformMatrix2fv;
708   functions->fUniformMatrix3fv = StubGLUniformMatrix3fv;
709   functions->fUniformMatrix4fv = StubGLUniformMatrix4fv;
710   functions->fUseProgram = StubGLUseProgram;
711   functions->fVertexAttrib4fv = StubGLVertexAttrib4fv;
712   functions->fVertexAttribPointer = StubGLVertexAttribPointer;
713   functions->fViewport = StubGLViewport;
714   functions->fBindFramebuffer = StubGLBindFramebuffer;
715   functions->fBindRenderbuffer = StubGLBindRenderbuffer;
716   functions->fCheckFramebufferStatus = StubGLCheckFramebufferStatus;
717   functions->fDeleteFramebuffers = StubGLDeleteFramebuffers;
718   functions->fDeleteRenderbuffers = StubGLDeleteRenderbuffers;
719   functions->fFramebufferRenderbuffer = StubGLFramebufferRenderbuffer;
720   functions->fFramebufferTexture2D = StubGLFramebufferTexture2D;
721   functions->fFramebufferTexture2DMultisample =
722     StubGLFramebufferTexture2DMultisample;
723   functions->fGenFramebuffers = StubGLGenFramebuffers;
724   functions->fGenRenderbuffers = StubGLGenRenderbuffers;
725   functions->fGetFramebufferAttachmentParameteriv =
726     StubGLGetFramebufferAttachmentParameteriv;
727   functions->fGetRenderbufferParameteriv = StubGLGetRenderbufferParameteriv;
728   functions->fRenderbufferStorage = StubGLRenderbufferStorage;
729   functions->fRenderbufferStorageMultisample =
730     StubGLRenderbufferStorageMultisample;
731   functions->fBlitFramebuffer = StubGLBlitFramebuffer;
732   functions->fMapBuffer = StubGLMapBuffer;
733   functions->fUnmapBuffer = StubGLUnmapBuffer;
734   functions->fBindFragDataLocationIndexed =
735     StubGLBindFragDataLocationIndexed;
736 
737   return interface;
738 }
739 
740 }  // namespace gfx
741