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