Fix WindowAndroid leak in Android WebView
[chromium-blink-merge.git] / ui / gl / gl_bindings_skia_in_process.cc
blob25dd698efdf994e6ac7d3da24a91e85cba0dcbb8
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.
6 #include "ui/gl/gl_bindings_skia_in_process.h"
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"
13 namespace {
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.
20 GLvoid StubGLActiveTexture(GLenum texture) {
21 glActiveTexture(texture);
24 GLvoid StubGLAttachShader(GLuint program, GLuint shader) {
25 glAttachShader(program, shader);
28 GLvoid StubGLBeginQuery(GLenum target, GLuint id) {
29 glBeginQuery(target, id);
32 GLvoid StubGLBindAttribLocation(GLuint program, GLuint index,
33 const char* name) {
34 glBindAttribLocation(program, index, name);
37 GLvoid StubGLBindBuffer(GLenum target, GLuint buffer) {
38 glBindBuffer(target, buffer);
41 GLvoid StubGLBindFragDataLocation(GLuint program, GLuint colorNumber,
42 const GLchar * name) {
43 glBindFragDataLocation(program, colorNumber, name);
46 GLvoid StubGLBindFragDataLocationIndexed(GLuint program, GLuint colorNumber,
47 GLuint index, const GLchar * name) {
48 glBindFragDataLocationIndexed(program, colorNumber, index, name);
51 GLvoid StubGLBindFramebuffer(GLenum target, GLuint framebuffer) {
52 glBindFramebufferEXT(target, framebuffer);
55 GLvoid StubGLBindRenderbuffer(GLenum target, GLuint renderbuffer) {
56 glBindRenderbufferEXT(target, renderbuffer);
59 GLvoid StubGLBindTexture(GLenum target, GLuint texture) {
60 glBindTexture(target, texture);
63 GLvoid StubGLBindVertexArray(GLuint array) {
64 glBindVertexArrayOES(array);
67 GLvoid StubGLBlendColor(GLclampf red, GLclampf green, GLclampf blue,
68 GLclampf alpha) {
69 glBlendColor(red, green, blue, alpha);
72 GLvoid StubGLBlendFunc(GLenum sfactor, GLenum dfactor) {
73 glBlendFunc(sfactor, dfactor);
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);
83 GLvoid StubGLBufferData(GLenum target, GLsizeiptr size, const void* data,
84 GLenum usage) {
85 glBufferData(target, size, data, usage);
88 GLvoid StubGLBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size,
89 const void* data) {
90 glBufferSubData(target, offset, size, data);
93 GLenum StubGLCheckFramebufferStatus(GLenum target) {
94 return glCheckFramebufferStatusEXT(target);
97 GLvoid StubGLClear(GLbitfield mask) {
98 glClear(mask);
101 GLvoid StubGLClearColor(GLclampf red, GLclampf green, GLclampf blue,
102 GLclampf alpha) {
103 glClearColor(red, green, blue, alpha);
106 GLvoid StubGLClearStencil(GLint s) {
107 glClearStencil(s);
110 GLvoid StubGLColorMask(GLboolean red, GLboolean green, GLboolean blue,
111 GLboolean alpha) {
112 glColorMask(red, green, blue, alpha);
115 GLvoid StubGLCompileShader(GLuint shader) {
116 glCompileShader(shader);
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);
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);
134 GLuint StubGLCreateProgram(void) {
135 return glCreateProgram();
138 GLuint StubGLCreateShader(GLenum type) {
139 return glCreateShader(type);
142 GLvoid StubGLCullFace(GLenum mode) {
143 glCullFace(mode);
146 GLvoid StubGLDeleteBuffers(GLsizei n, const GLuint* buffers) {
147 glDeleteBuffersARB(n, buffers);
150 GLvoid StubGLDeleteFramebuffers(GLsizei n, const GLuint* framebuffers) {
151 glDeleteFramebuffersEXT(n, framebuffers);
154 GLvoid StubGLDeleteQueries(GLsizei n, const GLuint* ids) {
155 glDeleteQueries(n, ids);
158 GLvoid StubGLDeleteProgram(GLuint program) {
159 glDeleteProgram(program);
162 GLvoid StubGLDeleteRenderbuffers(GLsizei n, const GLuint* renderbuffers) {
163 glDeleteRenderbuffersEXT(n, renderbuffers);
166 GLvoid StubGLDeleteShader(GLuint shader) {
167 glDeleteShader(shader);
170 GLvoid StubGLDeleteTextures(GLsizei n, const GLuint* textures) {
171 glDeleteTextures(n, textures);
174 GLvoid StubGLDeleteVertexArrays(GLsizei n, const GLuint* arrays) {
175 glDeleteVertexArraysOES(n, arrays);
178 GLvoid StubGLDepthMask(GLboolean flag) {
179 glDepthMask(flag);
182 GLvoid StubGLDisable(GLenum cap) {
183 glDisable(cap);
186 GLvoid StubGLDisableVertexAttribArray(GLuint index) {
187 glDisableVertexAttribArray(index);
190 GLvoid StubGLDiscardFramebuffer(GLenum target, GLsizei numAttachments,
191 const GLenum *attachments) {
192 glDiscardFramebufferEXT(target, numAttachments, attachments);
195 GLvoid StubGLDrawArrays(GLenum mode, GLint first, GLsizei count) {
196 glDrawArrays(mode, first, count);
199 GLvoid StubGLDrawBuffer(GLenum mode) {
200 glDrawBuffer(mode);
203 GLvoid StubGLDrawBuffers(GLsizei n, const GLenum* bufs) {
204 glDrawBuffersARB(n, bufs);
207 GLvoid StubGLDrawElements(GLenum mode, GLsizei count, GLenum type,
208 const void* indices) {
209 glDrawElements(mode, count, type, indices);
212 GLvoid StubGLEnable(GLenum cap) {
213 glEnable(cap);
216 GLvoid StubGLEnableVertexAttribArray(GLuint index) {
217 glEnableVertexAttribArray(index);
220 GLvoid StubGLEndQuery(GLenum target) {
221 glEndQuery(target);
224 GLvoid StubGLFinish() {
225 glFinish();
228 GLvoid StubGLFlush() {
229 glFlush();
232 GLvoid StubGLFlushMappedBufferRange(GLenum target, GLintptr offset,
233 GLsizeiptr length) {
234 glFlushMappedBufferRange(target, offset, length);
237 GLvoid StubGLFramebufferRenderbuffer(GLenum target, GLenum attachment,
238 GLenum renderbuffertarget,
239 GLuint renderbuffer) {
240 glFramebufferRenderbufferEXT(target, attachment, renderbuffertarget,
241 renderbuffer);
244 GLvoid StubGLFramebufferTexture2D(GLenum target, GLenum attachment,
245 GLenum textarget, GLuint texture,
246 GLint level) {
247 glFramebufferTexture2DEXT(target, attachment, textarget, texture, level);
250 GLvoid StubGLFramebufferTexture2DMultisample(GLenum target, GLenum attachment,
251 GLenum textarget, GLuint texture,
252 GLint level, GLsizei samples) {
253 glFramebufferTexture2DMultisampleEXT(target, attachment, textarget, texture,
254 level, samples);
257 GLvoid StubGLFrontFace(GLenum mode) {
258 glFrontFace(mode);
261 GLvoid StubGLGenBuffers(GLsizei n, GLuint* buffers) {
262 glGenBuffersARB(n, buffers);
265 GLvoid StubGLGenFramebuffers(GLsizei n, GLuint* framebuffers) {
266 glGenFramebuffersEXT(n, framebuffers);
269 GLvoid StubGLGenQueries(GLsizei n, GLuint* ids) {
270 glGenQueries(n, ids);
273 GLvoid StubGLGenRenderbuffers(GLsizei n, GLuint* renderbuffers) {
274 glGenRenderbuffersEXT(n, renderbuffers);
277 GLvoid StubGLGenTextures(GLsizei n, GLuint* textures) {
278 glGenTextures(n, textures);
281 GLvoid StubGLGenVertexArrays(GLsizei n, GLuint* arrays) {
282 glGenVertexArraysOES(n, arrays);
285 GLvoid StubGLGenerateMipmap(GLenum target){
286 glGenerateMipmapEXT(target);
289 GLvoid StubGLGetBufferParameteriv(GLenum target, GLenum pname, GLint* params) {
290 glGetBufferParameteriv(target, pname, params);
293 GLvoid StubGLGetFramebufferAttachmentParameteriv(GLenum target,
294 GLenum attachment,
295 GLenum pname, GLint* params) {
296 glGetFramebufferAttachmentParameterivEXT(target, attachment, pname, params);
299 GLenum StubGLGetError() {
300 return glGetError();
303 GLvoid StubGLGetIntegerv(GLenum pname, GLint* params) {
304 glGetIntegerv(pname, params);
307 GLvoid StubGLGetProgramInfoLog(GLuint program, GLsizei bufsize, GLsizei* length,
308 char* infolog) {
309 glGetProgramInfoLog(program, bufsize, length, infolog);
312 GLvoid StubGLGetProgramiv(GLuint program, GLenum pname, GLint* params) {
313 glGetProgramiv(program, pname, params);
316 GLvoid StubGLGetRenderbufferParameteriv(GLenum target,
317 GLenum pname, GLint* params) {
318 glGetRenderbufferParameterivEXT(target, pname, params);
321 GLvoid StubGLGetShaderInfoLog(GLuint shader, GLsizei bufsize, GLsizei* length,
322 char* infolog) {
323 glGetShaderInfoLog(shader, bufsize, length, infolog);
326 GLvoid StubGLGetShaderiv(GLuint shader, GLenum pname, GLint* params) {
327 glGetShaderiv(shader, pname, params);
330 GLvoid StubGLGetShaderPrecisionFormat(GLenum shadertype, GLenum precisiontype,
331 GLint *range, GLint *precision) {
332 glGetShaderPrecisionFormat(shadertype, precisiontype, range, precision);
335 const GLubyte* StubGLGetString(GLenum name) {
336 return glGetString(name);
339 const GLubyte* StubGLGetStringi(GLenum name, GLuint index) {
340 return glGetStringi(name, index);
343 GLvoid StubGLGetQueryiv(GLenum target, GLenum pname, GLint* params) {
344 glGetQueryiv(target, pname, params);
347 GLvoid StubGLGetQueryObjecti64v(GLuint id, GLenum pname, GLint64* params) {
348 glGetQueryObjecti64v(id, pname, params);
351 GLvoid StubGLGetQueryObjectiv(GLuint id, GLenum pname, GLint* params) {
352 glGetQueryObjectiv(id, pname, params);
355 GLvoid StubGLGetQueryObjectui64v(GLuint id, GLenum pname, GLuint64* params) {
356 glGetQueryObjectui64v(id, pname, params);
359 GLvoid StubGLGetQueryObjectuiv(GLuint id, GLenum pname, GLuint* params) {
360 glGetQueryObjectuiv(id, pname, params);
363 GLvoid StubGLGetTexLevelParameteriv(GLenum target, GLint level,
364 GLenum pname, GLint* params) {
365 glGetTexLevelParameteriv(target, level, pname, params);
368 GLint StubGLGetUniformLocation(GLuint program, const char* name) {
369 return glGetUniformLocation(program, name);
372 GLvoid StubGLInsertEventMarker(GLsizei length, const char* marker) {
373 glInsertEventMarkerEXT(length, marker);
376 GLvoid StubGLInvalidateFramebuffer(GLenum target, GLsizei numAttachments,
377 const GLenum* attachments) {
378 glInvalidateFramebuffer(target, numAttachments, attachments);
381 GLvoid StubGLInvalidateSubFramebuffer(GLenum target,
382 GLsizei numAttachments,
383 const GLenum* attachments,
384 GLint x, GLint y,
385 GLsizei width, GLsizei height) {
386 glInvalidateSubFramebuffer(target, numAttachments, attachments,
387 x, y, width, height);
390 GLvoid StubGLLineWidth(GLfloat width) {
391 glLineWidth(width);
394 GLvoid StubGLLinkProgram(GLuint program) {
395 glLinkProgram(program);
398 void* StubGLMapBuffer(GLenum target, GLenum access) {
399 return glMapBuffer(target, access);
402 void* StubGLMapBufferRange(GLenum target, GLintptr offset, GLsizeiptr length,
403 GLbitfield access) {
404 return glMapBufferRange(target, offset, length, access);
407 GLvoid StubGLPixelStorei(GLenum pname, GLint param) {
408 glPixelStorei(pname, param);
411 GLvoid StubGLPopGroupMarker() {
412 glPopGroupMarkerEXT();
415 GLvoid StubGLPushGroupMarker(GLsizei length, const char* marker) {
416 glPushGroupMarkerEXT(length, marker);
419 GLvoid StubGLQueryCounter(GLuint id, GLenum target) {
420 glQueryCounter(id, target);
423 GLvoid StubGLReadBuffer(GLenum src) {
424 glReadBuffer(src);
427 GLvoid StubGLReadPixels(GLint x, GLint y, GLsizei width, GLsizei height,
428 GLenum format, GLenum type, void* pixels) {
429 glReadPixels(x, y, width, height, format, type, pixels);
432 GLvoid StubGLRenderbufferStorage(GLenum target, GLenum internalformat,
433 GLsizei width, GLsizei height) {
434 glRenderbufferStorageEXT(target, internalformat, width, height);
437 GLvoid StubGLRenderbufferStorageMultisample(GLenum target, GLsizei samples,
438 GLenum internalformat,
439 GLsizei width, GLsizei height) {
440 glRenderbufferStorageMultisampleEXT(target, samples, internalformat, width,
441 height);
444 GLvoid StubGLScissor(GLint x, GLint y, GLsizei width, GLsizei height) {
445 glScissor(x, y, width, height);
448 GLvoid StubGLShaderSource(GLuint shader, GLsizei count, const char* const* str,
449 const GLint* length) {
450 glShaderSource(shader, count, str, length);
453 GLvoid StubGLStencilFunc(GLenum func, GLint ref, GLuint mask) {
454 glStencilFunc(func, ref, mask);
457 GLvoid StubGLStencilFuncSeparate(GLenum face, GLenum func, GLint ref,
458 GLuint mask) {
459 glStencilFuncSeparate(face, func, ref, mask);
462 GLvoid StubGLStencilMask(GLuint mask) {
463 glStencilMask(mask);
466 GLvoid StubGLStencilMaskSeparate(GLenum face, GLuint mask) {
467 glStencilMaskSeparate(face, mask);
470 GLvoid StubGLStencilOp(GLenum fail, GLenum zfail, GLenum zpass) {
471 glStencilOp(fail, zfail, zpass);
474 GLvoid StubGLStencilOpSeparate(GLenum face, GLenum fail, GLenum zfail,
475 GLenum zpass) {
476 glStencilOpSeparate(face, fail, zfail, zpass);
479 GLvoid StubGLTexImage2D(GLenum target, GLint level, GLint internalformat,
480 GLsizei width, GLsizei height, GLint border,
481 GLenum format, GLenum type, const void* pixels) {
482 glTexImage2D(target, level, internalformat, width, height, border, format,
483 type, pixels);
486 GLvoid StubGLTexParameteri(GLenum target, GLenum pname, GLint param) {
487 glTexParameteri(target, pname, param);
490 GLvoid StubGLTexParameteriv(GLenum target, GLenum pname, const GLint* params) {
491 glTexParameteriv(target, pname, params);
494 GLvoid StubGLTexStorage2D(GLenum target, GLsizei levels, GLenum internalFormat,
495 GLsizei width, GLsizei height) {
496 glTexStorage2DEXT(target, levels, internalFormat, width, height);
499 GLvoid StubGLTexSubImage2D(GLenum target, GLint level, GLint xoffset,
500 GLint yoffset, GLsizei width, GLsizei height,
501 GLenum format, GLenum type, const void* pixels) {
502 glTexSubImage2D(target, level, xoffset, yoffset, width, height, format, type,
503 pixels);
506 GLvoid StubGLUniform1f(GLint location, GLfloat v) {
507 glUniform1f(location, v);
510 GLvoid StubGLUniform1i(GLint location, GLint v) {
511 glUniform1i(location, v);
514 GLvoid StubGLUniform1fv(GLint location, GLsizei count, const GLfloat* v) {
515 glUniform1fv(location, count, v);
518 GLvoid StubGLUniform1iv(GLint location, GLsizei count, const GLint* v) {
519 glUniform1iv(location, count, v);
522 GLvoid StubGLUniform2f(GLint location, GLfloat v0, GLfloat v1) {
523 glUniform2f(location, v0, v1);
526 GLvoid StubGLUniform2i(GLint location, GLint v0, GLint v1) {
527 glUniform2i(location, v0, v1);
530 GLvoid StubGLUniform2fv(GLint location, GLsizei count, const GLfloat* v) {
531 glUniform2fv(location, count, v);
534 GLvoid StubGLUniform2iv(GLint location, GLsizei count, const GLint* v) {
535 glUniform2iv(location, count, v);
538 GLvoid StubGLUniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2) {
539 glUniform3f(location, v0, v1, v2);
542 GLvoid StubGLUniform3i(GLint location, GLint v0, GLint v1, GLint v2) {
543 glUniform3i(location, v0, v1, v2);
546 GLvoid StubGLUniform3fv(GLint location, GLsizei count, const GLfloat* v) {
547 glUniform3fv(location, count, v);
550 GLvoid StubGLUniform3iv(GLint location, GLsizei count, const GLint* v) {
551 glUniform3iv(location, count, v);
554 GLvoid StubGLUniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2,
555 GLfloat v3) {
556 glUniform4f(location, v0, v1, v2, v3);
559 GLvoid StubGLUniform4i(GLint location, GLint v0, GLint v1, GLint v2,
560 GLint v3) {
561 glUniform4i(location, v0, v1, v2, v3);
564 GLvoid StubGLUniform4fv(GLint location, GLsizei count, const GLfloat* v) {
565 glUniform4fv(location, count, v);
568 GLvoid StubGLUniform4iv(GLint location, GLsizei count, const GLint* v) {
569 glUniform4iv(location, count, v);
572 GLvoid StubGLUniformMatrix2fv(GLint location, GLsizei count,
573 GLboolean transpose, const GLfloat* value) {
574 glUniformMatrix2fv(location, count, transpose, value);
577 GLvoid StubGLUniformMatrix3fv(GLint location, GLsizei count,
578 GLboolean transpose, const GLfloat* value) {
579 glUniformMatrix3fv(location, count, transpose, value);
582 GLvoid StubGLUniformMatrix4fv(GLint location, GLsizei count,
583 GLboolean transpose, const GLfloat* value) {
584 glUniformMatrix4fv(location, count, transpose, value);
587 GLboolean StubGLUnmapBuffer(GLenum target) {
588 return glUnmapBuffer(target);
591 GLvoid StubGLUseProgram(GLuint program) {
592 glUseProgram(program);
595 GLvoid StubGLVertexAttrib1f(GLuint indx, const GLfloat value) {
596 glVertexAttrib1f(indx, value);
599 GLvoid StubGLVertexAttrib2fv(GLuint indx, const GLfloat* values) {
600 glVertexAttrib2fv(indx, values);
603 GLvoid StubGLVertexAttrib3fv(GLuint indx, const GLfloat* values) {
604 glVertexAttrib3fv(indx, values);
607 GLvoid StubGLVertexAttrib4fv(GLuint indx, const GLfloat* values) {
608 glVertexAttrib4fv(indx, values);
611 GLvoid StubGLVertexAttribPointer(GLuint indx, GLint size, GLenum type,
612 GLboolean normalized, GLsizei stride,
613 const void* ptr) {
614 glVertexAttribPointer(indx, size, type, normalized, stride, ptr);
617 GLvoid StubGLViewport(GLint x, GLint y, GLsizei width, GLsizei height) {
618 glViewport(x, y, width, height);
621 GLint StubGLGetProgramResourceLocation(GLuint program,
622 GLenum programInterface,
623 const char* name) {
624 return glGetProgramResourceLocation(program, programInterface, name);
627 } // extern "C"
628 } // namespace
630 namespace gfx {
632 GrGLInterface* CreateInProcessSkiaGLBinding() {
633 GrGLStandard standard;
634 switch (gfx::GetGLImplementation()) {
635 case gfx::kGLImplementationNone:
636 NOTREACHED();
637 return NULL;
638 case gfx::kGLImplementationDesktopGL:
639 case gfx::kGLImplementationAppleGL:
640 standard = kGL_GrGLStandard;
641 break;
642 case gfx::kGLImplementationOSMesaGL:
643 standard = kGL_GrGLStandard;
644 break;
645 case gfx::kGLImplementationEGLGLES2:
646 standard = kGLES_GrGLStandard;
647 break;
648 case gfx::kGLImplementationMockGL:
649 NOTREACHED();
650 return NULL;
651 default:
652 NOTREACHED();
653 return NULL;
656 GrGLInterface* interface = new GrGLInterface;
657 interface->fStandard = standard;
658 interface->fExtensions.init(standard,
659 StubGLGetString,
660 StubGLGetStringi,
661 StubGLGetIntegerv);
663 GrGLInterface::Functions* functions = &interface->fFunctions;
664 functions->fActiveTexture = StubGLActiveTexture;
665 functions->fAttachShader = StubGLAttachShader;
666 functions->fBeginQuery = StubGLBeginQuery;
667 functions->fBindAttribLocation = StubGLBindAttribLocation;
668 functions->fBindBuffer = StubGLBindBuffer;
669 functions->fBindFragDataLocation = StubGLBindFragDataLocation;
670 functions->fBindTexture = StubGLBindTexture;
671 functions->fBindVertexArray = StubGLBindVertexArray;
672 functions->fBlendColor = StubGLBlendColor;
673 functions->fBlendFunc = StubGLBlendFunc;
674 functions->fBufferData = StubGLBufferData;
675 functions->fBufferSubData = StubGLBufferSubData;
676 functions->fClear = StubGLClear;
677 functions->fClearColor = StubGLClearColor;
678 functions->fClearStencil = StubGLClearStencil;
679 functions->fColorMask = StubGLColorMask;
680 functions->fCompileShader = StubGLCompileShader;
681 functions->fCompressedTexImage2D = StubGLCompressedTexImage2D;
682 functions->fCopyTexSubImage2D = StubGLCopyTexSubImage2D;
683 functions->fCreateProgram = StubGLCreateProgram;
684 functions->fCreateShader = StubGLCreateShader;
685 functions->fCullFace = StubGLCullFace;
686 functions->fDeleteBuffers = StubGLDeleteBuffers;
687 functions->fDeleteProgram = StubGLDeleteProgram;
688 functions->fDeleteQueries = StubGLDeleteQueries;
689 functions->fDeleteShader = StubGLDeleteShader;
690 functions->fDeleteTextures = StubGLDeleteTextures;
691 functions->fDeleteVertexArrays = StubGLDeleteVertexArrays;
692 functions->fDepthMask = StubGLDepthMask;
693 functions->fDisable = StubGLDisable;
694 functions->fDisableVertexAttribArray = StubGLDisableVertexAttribArray;
695 functions->fDiscardFramebuffer = StubGLDiscardFramebuffer;
696 functions->fDrawArrays = StubGLDrawArrays;
697 functions->fDrawBuffer = StubGLDrawBuffer;
698 functions->fDrawBuffers = StubGLDrawBuffers;
699 functions->fDrawElements = StubGLDrawElements;
700 functions->fEnable = StubGLEnable;
701 functions->fEnableVertexAttribArray = StubGLEnableVertexAttribArray;
702 functions->fEndQuery = StubGLEndQuery;
703 functions->fFinish = StubGLFinish;
704 functions->fFlush = StubGLFlush;
705 functions->fFlushMappedBufferRange = StubGLFlushMappedBufferRange;
706 functions->fFrontFace = StubGLFrontFace;
707 functions->fGenBuffers = StubGLGenBuffers;
708 functions->fGenQueries = StubGLGenQueries;
709 functions->fGenTextures = StubGLGenTextures;
710 functions->fGenVertexArrays = StubGLGenVertexArrays;
711 functions->fGenerateMipmap = StubGLGenerateMipmap;
712 functions->fGetBufferParameteriv = StubGLGetBufferParameteriv;
713 functions->fGetError = StubGLGetError;
714 functions->fGetIntegerv = StubGLGetIntegerv;
715 functions->fGetQueryiv = StubGLGetQueryiv;
716 functions->fGetQueryObjecti64v = StubGLGetQueryObjecti64v;
717 functions->fGetQueryObjectiv = StubGLGetQueryObjectiv;
718 functions->fGetQueryObjectui64v = StubGLGetQueryObjectui64v;
719 functions->fGetQueryObjectuiv = StubGLGetQueryObjectuiv;
720 functions->fGetProgramInfoLog = StubGLGetProgramInfoLog;
721 functions->fGetProgramiv = StubGLGetProgramiv;
722 functions->fGetShaderInfoLog = StubGLGetShaderInfoLog;
723 functions->fGetShaderiv = StubGLGetShaderiv;
724 functions->fGetShaderPrecisionFormat = StubGLGetShaderPrecisionFormat;
725 functions->fGetString = StubGLGetString;
726 functions->fGetStringi = StubGLGetStringi;
727 functions->fGetTexLevelParameteriv = StubGLGetTexLevelParameteriv;
728 functions->fGetUniformLocation = StubGLGetUniformLocation;
729 functions->fInsertEventMarker = StubGLInsertEventMarker;
730 functions->fInvalidateFramebuffer = StubGLInvalidateFramebuffer;
731 functions->fInvalidateSubFramebuffer = StubGLInvalidateSubFramebuffer;
732 functions->fLineWidth = StubGLLineWidth;
733 functions->fLinkProgram = StubGLLinkProgram;
734 functions->fMapBufferRange = StubGLMapBufferRange;
735 functions->fPixelStorei = StubGLPixelStorei;
736 functions->fPopGroupMarker = StubGLPopGroupMarker;
737 functions->fPushGroupMarker = StubGLPushGroupMarker;
738 functions->fQueryCounter = StubGLQueryCounter;
739 functions->fReadBuffer = StubGLReadBuffer;
740 functions->fReadPixels = StubGLReadPixels;
741 functions->fScissor = StubGLScissor;
742 functions->fShaderSource = StubGLShaderSource;
743 functions->fStencilFunc = StubGLStencilFunc;
744 functions->fStencilFuncSeparate = StubGLStencilFuncSeparate;
745 functions->fStencilMask = StubGLStencilMask;
746 functions->fStencilMaskSeparate = StubGLStencilMaskSeparate;
747 functions->fStencilOp = StubGLStencilOp;
748 functions->fStencilOpSeparate = StubGLStencilOpSeparate;
749 functions->fTexImage2D = StubGLTexImage2D;
750 functions->fTexParameteri = StubGLTexParameteri;
751 functions->fTexParameteriv = StubGLTexParameteriv;
752 functions->fTexSubImage2D = StubGLTexSubImage2D;
753 functions->fTexStorage2D = StubGLTexStorage2D;
754 functions->fUniform1f = StubGLUniform1f;
755 functions->fUniform1i = StubGLUniform1i;
756 functions->fUniform1fv = StubGLUniform1fv;
757 functions->fUniform1iv = StubGLUniform1iv;
758 functions->fUniform2f = StubGLUniform2f;
759 functions->fUniform2i = StubGLUniform2i;
760 functions->fUniform2fv = StubGLUniform2fv;
761 functions->fUniform2iv = StubGLUniform2iv;
762 functions->fUniform3f = StubGLUniform3f;
763 functions->fUniform3i = StubGLUniform3i;
764 functions->fUniform3fv = StubGLUniform3fv;
765 functions->fUniform3iv = StubGLUniform3iv;
766 functions->fUniform4f = StubGLUniform4f;
767 functions->fUniform4i = StubGLUniform4i;
768 functions->fUniform4fv = StubGLUniform4fv;
769 functions->fUniform4iv = StubGLUniform4iv;
770 functions->fUniformMatrix2fv = StubGLUniformMatrix2fv;
771 functions->fUniformMatrix3fv = StubGLUniformMatrix3fv;
772 functions->fUniformMatrix4fv = StubGLUniformMatrix4fv;
773 functions->fUseProgram = StubGLUseProgram;
774 functions->fVertexAttrib1f = StubGLVertexAttrib1f;
775 functions->fVertexAttrib2fv = StubGLVertexAttrib2fv;
776 functions->fVertexAttrib3fv = StubGLVertexAttrib3fv;
777 functions->fVertexAttrib4fv = StubGLVertexAttrib4fv;
778 functions->fVertexAttribPointer = StubGLVertexAttribPointer;
779 functions->fViewport = StubGLViewport;
780 functions->fBindFramebuffer = StubGLBindFramebuffer;
781 functions->fBindRenderbuffer = StubGLBindRenderbuffer;
782 functions->fCheckFramebufferStatus = StubGLCheckFramebufferStatus;
783 functions->fDeleteFramebuffers = StubGLDeleteFramebuffers;
784 functions->fDeleteRenderbuffers = StubGLDeleteRenderbuffers;
785 functions->fFramebufferRenderbuffer = StubGLFramebufferRenderbuffer;
786 functions->fFramebufferTexture2D = StubGLFramebufferTexture2D;
787 functions->fFramebufferTexture2DMultisample =
788 StubGLFramebufferTexture2DMultisample;
789 functions->fGenFramebuffers = StubGLGenFramebuffers;
790 functions->fGenRenderbuffers = StubGLGenRenderbuffers;
791 functions->fGetFramebufferAttachmentParameteriv =
792 StubGLGetFramebufferAttachmentParameteriv;
793 functions->fGetRenderbufferParameteriv = StubGLGetRenderbufferParameteriv;
794 functions->fRenderbufferStorage = StubGLRenderbufferStorage;
795 functions->fRenderbufferStorageMultisample =
796 StubGLRenderbufferStorageMultisample;
797 functions->fRenderbufferStorageMultisampleES2EXT =
798 StubGLRenderbufferStorageMultisample;
799 functions->fBlitFramebuffer = StubGLBlitFramebuffer;
800 functions->fMapBuffer = StubGLMapBuffer;
801 functions->fUnmapBuffer = StubGLUnmapBuffer;
802 functions->fBindFragDataLocationIndexed =
803 StubGLBindFragDataLocationIndexed;
804 functions->fGetProgramResourceLocation = StubGLGetProgramResourceLocation;
806 return interface;
809 } // namespace gfx