Index: ui/gl/gl_gl_api_implementation.cc |
diff --git a/ui/gl/gl_gl_api_implementation.cc b/ui/gl/gl_gl_api_implementation.cc |
index 0a6bf8c922b8bce9c5503a9bd0dead638c17d60a..c16ffabbe687e27690a54e4fd9de9d3525ecf8f3 100644 |
--- a/ui/gl/gl_gl_api_implementation.cc |
+++ b/ui/gl/gl_gl_api_implementation.cc |
@@ -4,6 +4,9 @@ |
#include "ui/gl/gl_gl_api_implementation.h" |
+#include "ui/gl/gl_context.h" |
+#include "ui/gl/gl_state_restorer.h" |
+ |
namespace gfx { |
RealGLApi* g_real_gl; |
@@ -14,7 +17,19 @@ void InitializeGLBindingsGL() { |
g_real_gl = new RealGLApi(); |
} |
g_real_gl->Initialize(&g_driver_gl); |
- g_current_gl_context = g_real_gl; |
+ SetGLToRealGLApi(); |
+} |
+ |
+GLApi* GetCurrentGLApi() { |
+ return g_current_gl_context; |
+} |
+ |
+void SetGLApi(GLApi* api) { |
+ g_current_gl_context = api; |
+} |
+ |
+void SetGLToRealGLApi() { |
+ SetGLApi(g_real_gl); |
} |
void InitializeGLExtensionBindingsGL(GLContext* context) { |
@@ -43,10 +58,1006 @@ GLApi::~GLApi() { |
RealGLApi::RealGLApi() { |
} |
+RealGLApi::~RealGLApi() { |
+} |
+ |
void RealGLApi::Initialize(DriverGL* driver) { |
driver_ = driver; |
} |
+VirtualGLApi::VirtualGLApi() |
+ : driver_(NULL), |
+ real_context_(NULL), |
+ current_context_(NULL), |
+ current_surface_(NULL) { |
+} |
+ |
+VirtualGLApi::~VirtualGLApi() { |
+} |
+ |
+void VirtualGLApi::Initialize(DriverGL* driver, GLContext* real_context) { |
+ driver_ = driver; |
+ real_context_ = real_context; |
+} |
+ |
+bool VirtualGLApi::MakeCurrent(GLContext* virtual_context, GLSurface* surface) { |
+ bool switched_contexts = g_current_gl_context != this; |
+ if (switched_contexts || surface != current_surface_) { |
+ // TODO: Emit warning on Android? |
+ if (!real_context_->MakeCurrent(surface)) { |
+ return false; |
+ } |
+ current_surface_ = surface; |
+ } |
+ if (switched_contexts || virtual_context != current_context_) { |
+ current_context_ = virtual_context; |
+ // Set all state that is different from the real state |
+ // NOTE: !!! This is a temporary implementation that just restores all |
+ // state to let us test that it works. |
+ // TODO: ASAP, change this to something that only restores the state |
+ // needed for individual GL calls. |
+ GLApi* temp = GetCurrentGLApi(); |
+ SetGLToRealGLApi(); |
+ virtual_context->GetGLStateRestorer()->RestoreState(); |
+ SetGLApi(temp); |
+ } |
+ SetGLApi(this); |
+ return true; |
+} |
+ |
+void VirtualGLApi::glActiveTextureFn(GLenum texture) { |
+ driver_->fn.glActiveTextureFn(texture); |
+} |
+ |
+void VirtualGLApi::glAttachShaderFn(GLuint program, GLuint shader) { |
+ driver_->fn.glAttachShaderFn(program, shader); |
+} |
+ |
+void VirtualGLApi::glBeginQueryFn(GLenum target, GLuint id) { |
+ driver_->fn.glBeginQueryFn(target, id); |
+} |
+ |
+void VirtualGLApi::glBeginQueryARBFn(GLenum target, GLuint id) { |
+ driver_->fn.glBeginQueryARBFn(target, id); |
+} |
+ |
+void VirtualGLApi::glBindAttribLocationFn( |
+ GLuint program, GLuint index, const char* name) { |
+ driver_->fn.glBindAttribLocationFn(program, index, name); |
+} |
+ |
+void VirtualGLApi::glBindBufferFn(GLenum target, GLuint buffer) { |
+ driver_->fn.glBindBufferFn(target, buffer); |
+} |
+ |
+void VirtualGLApi::glBindFragDataLocationFn( |
+ GLuint program, GLuint colorNumber, const char* name) { |
+ driver_->fn.glBindFragDataLocationFn(program, colorNumber, name); |
+} |
+ |
+void VirtualGLApi::glBindFragDataLocationIndexedFn( |
+ GLuint program, GLuint colorNumber, GLuint index, const char* name) { |
+ driver_->fn.glBindFragDataLocationIndexedFn( |
+ program, colorNumber, index, name); |
+} |
+ |
+void VirtualGLApi::glBindFramebufferEXTFn(GLenum target, GLuint framebuffer) { |
+ driver_->fn.glBindFramebufferEXTFn(target, framebuffer); |
+} |
+ |
+void VirtualGLApi::glBindRenderbufferEXTFn(GLenum target, GLuint renderbuffer) { |
+ driver_->fn.glBindRenderbufferEXTFn(target, renderbuffer); |
+} |
+ |
+void VirtualGLApi::glBindTextureFn(GLenum target, GLuint texture) { |
+ driver_->fn.glBindTextureFn(target, texture); |
+} |
+ |
+void VirtualGLApi::glBlendColorFn( |
+ GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) { |
+ driver_->fn.glBlendColorFn(red, green, blue, alpha); |
+} |
+ |
+void VirtualGLApi::glBlendEquationFn( GLenum mode ) { |
+ driver_->fn.glBlendEquationFn( mode ); |
+} |
+ |
+void VirtualGLApi::glBlendEquationSeparateFn(GLenum modeRGB, GLenum modeAlpha) { |
+ driver_->fn.glBlendEquationSeparateFn(modeRGB, modeAlpha); |
+} |
+ |
+void VirtualGLApi::glBlendFuncFn(GLenum sfactor, GLenum dfactor) { |
+ driver_->fn.glBlendFuncFn(sfactor, dfactor); |
+} |
+ |
+void VirtualGLApi::glBlendFuncSeparateFn( |
+ GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha) { |
+ driver_->fn.glBlendFuncSeparateFn(srcRGB, dstRGB, srcAlpha, dstAlpha); |
+} |
+ |
+void VirtualGLApi::glBlitFramebufferEXTFn( |
+ GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, |
+ GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, |
+ GLbitfield mask, GLenum filter) { |
+ driver_->fn.glBlitFramebufferEXTFn( |
+ srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); |
+} |
+ |
+void VirtualGLApi::glBlitFramebufferANGLEFn( |
+ GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, |
+ GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, |
+ GLbitfield mask, GLenum filter) { |
+ driver_->fn.glBlitFramebufferANGLEFn( |
+ srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter); |
+} |
+ |
+void VirtualGLApi::glBufferDataFn( |
+ GLenum target, GLsizei size, const void* data, GLenum usage) { |
+ driver_->fn.glBufferDataFn(target, size, data, usage); |
+} |
+ |
+void VirtualGLApi::glBufferSubDataFn( |
+ GLenum target, GLint offset, GLsizei size, const void* data) { |
+ driver_->fn.glBufferSubDataFn(target, offset, size, data); |
+} |
+ |
+GLenum VirtualGLApi::glCheckFramebufferStatusEXTFn(GLenum target) { |
+ return driver_->fn.glCheckFramebufferStatusEXTFn(target); |
+} |
+ |
+void VirtualGLApi::glClearFn(GLbitfield mask) { |
+ driver_->fn.glClearFn(mask); |
+} |
+ |
+void VirtualGLApi::glClearColorFn( |
+ GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha) { |
+ driver_->fn.glClearColorFn(red, green, blue, alpha); |
+} |
+ |
+void VirtualGLApi::glClearDepthFn(GLclampd depth) { |
+ driver_->fn.glClearDepthFn(depth); |
+} |
+ |
+void VirtualGLApi::glClearDepthfFn(GLclampf depth) { |
+ driver_->fn.glClearDepthfFn(depth); |
+} |
+ |
+void VirtualGLApi::glClearStencilFn(GLint s) { |
+ driver_->fn.glClearStencilFn(s); |
+} |
+ |
+void VirtualGLApi::glColorMaskFn( |
+ GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha) { |
+ driver_->fn.glColorMaskFn(red, green, blue, alpha); |
+} |
+ |
+void VirtualGLApi::glCompileShaderFn(GLuint shader) { |
+ driver_->fn.glCompileShaderFn(shader); |
+} |
+ |
+void VirtualGLApi::glCompressedTexImage2DFn( |
+ GLenum target, GLint level, GLenum internalformat, |
+ GLsizei width, GLsizei height, GLint border, |
+ GLsizei imageSize, const void* data) { |
+ driver_->fn.glCompressedTexImage2DFn( |
+ target, level, internalformat, width, height, border, imageSize, data); |
+} |
+ |
+void VirtualGLApi::glCompressedTexSubImage2DFn( |
+ GLenum target, GLint level, GLint xoffset, GLint yoffset, |
+ GLsizei width, GLsizei height, GLenum format, |
+ GLsizei imageSize, const void* data) { |
+ driver_->fn.glCompressedTexSubImage2DFn( |
+ target, level, xoffset, yoffset, width, height, format, imageSize, data); |
+} |
+ |
+void VirtualGLApi::glCopyTexImage2DFn( |
+ GLenum target, GLint level, GLenum internalformat, |
+ GLint x, GLint y, GLsizei width, GLsizei height, GLint border) { |
+ driver_->fn.glCopyTexImage2DFn( |
+ target, level, internalformat, x, y, width, height, border); |
+} |
+ |
+void VirtualGLApi::glCopyTexSubImage2DFn( |
+ GLenum target, GLint level, GLint xoffset, GLint yoffset, |
+ GLint x, GLint y, GLsizei width, GLsizei height) { |
+ driver_->fn.glCopyTexSubImage2DFn( |
+ target, level, xoffset, yoffset, x, y, width, height); |
+} |
+ |
+GLuint VirtualGLApi::glCreateProgramFn(void) { |
+ return driver_->fn.glCreateProgramFn(); |
+} |
+ |
+GLuint VirtualGLApi::glCreateShaderFn(GLenum type) { |
+ return driver_->fn.glCreateShaderFn(type); |
+} |
+ |
+void VirtualGLApi::glCullFaceFn(GLenum mode) { |
+ driver_->fn.glCullFaceFn(mode); |
+} |
+ |
+void VirtualGLApi::glDeleteBuffersARBFn(GLsizei n, const GLuint* buffers) { |
+ driver_->fn.glDeleteBuffersARBFn(n, buffers); |
+} |
+ |
+void VirtualGLApi::glDeleteFramebuffersEXTFn( |
+ GLsizei n, const GLuint* framebuffers) { |
+ driver_->fn.glDeleteFramebuffersEXTFn(n, framebuffers); |
+} |
+ |
+void VirtualGLApi::glDeleteProgramFn(GLuint program) { |
+ driver_->fn.glDeleteProgramFn(program); |
+} |
+ |
+void VirtualGLApi::glDeleteQueriesFn(GLsizei n, const GLuint* ids) { |
+ driver_->fn.glDeleteQueriesFn(n, ids); |
+} |
+ |
+void VirtualGLApi::glDeleteQueriesARBFn(GLsizei n, const GLuint* ids) { |
+ driver_->fn.glDeleteQueriesARBFn(n, ids); |
+} |
+ |
+void VirtualGLApi::glDeleteRenderbuffersEXTFn( |
+ GLsizei n, const GLuint* renderbuffers) { |
+ driver_->fn.glDeleteRenderbuffersEXTFn(n, renderbuffers); |
+} |
+ |
+void VirtualGLApi::glDeleteShaderFn(GLuint shader) { |
+ driver_->fn.glDeleteShaderFn(shader); |
+} |
+ |
+void VirtualGLApi::glDeleteTexturesFn(GLsizei n, const GLuint* textures) { |
+ driver_->fn.glDeleteTexturesFn(n, textures); |
+} |
+ |
+void VirtualGLApi::glDepthFuncFn(GLenum func) { |
+ driver_->fn.glDepthFuncFn(func); |
+} |
+ |
+void VirtualGLApi::glDepthMaskFn(GLboolean flag) { |
+ driver_->fn.glDepthMaskFn(flag); |
+} |
+ |
+void VirtualGLApi::glDepthRangeFn(GLclampd zNear, GLclampd zFar) { |
+ driver_->fn.glDepthRangeFn(zNear, zFar); |
+} |
+ |
+void VirtualGLApi::glDepthRangefFn(GLclampf zNear, GLclampf zFar) { |
+ driver_->fn.glDepthRangefFn(zNear, zFar); |
+} |
+ |
+void VirtualGLApi::glDetachShaderFn(GLuint program, GLuint shader) { |
+ driver_->fn.glDetachShaderFn(program, shader); |
+} |
+ |
+void VirtualGLApi::glDisableFn(GLenum cap) { |
+ driver_->fn.glDisableFn(cap); |
+} |
+ |
+void VirtualGLApi::glDisableVertexAttribArrayFn(GLuint index) { |
+ driver_->fn.glDisableVertexAttribArrayFn(index); |
+} |
+ |
+void VirtualGLApi::glDrawArraysFn(GLenum mode, GLint first, GLsizei count) { |
+ driver_->fn.glDrawArraysFn(mode, first, count); |
+} |
+ |
+void VirtualGLApi::glDrawBufferFn(GLenum mode) { |
+ driver_->fn.glDrawBufferFn(mode); |
+} |
+ |
+void VirtualGLApi::glDrawBuffersARBFn(GLsizei n, const GLenum* bufs) { |
+ driver_->fn.glDrawBuffersARBFn(n, bufs); |
+} |
+ |
+void VirtualGLApi::glDrawElementsFn( |
+ GLenum mode, GLsizei count, GLenum type, const void* indices) { |
+ driver_->fn.glDrawElementsFn(mode, count, type, indices); |
+} |
+ |
+void VirtualGLApi::glEGLImageTargetTexture2DOESFn( |
+ GLenum target, GLeglImageOES image) { |
+ driver_->fn.glEGLImageTargetTexture2DOESFn(target, image); |
+} |
+ |
+void VirtualGLApi::glEGLImageTargetRenderbufferStorageOESFn( |
+ GLenum target, GLeglImageOES image) { |
+ driver_->fn.glEGLImageTargetRenderbufferStorageOESFn(target, image); |
+} |
+ |
+void VirtualGLApi::glEnableFn(GLenum cap) { |
+ driver_->fn.glEnableFn(cap); |
+} |
+ |
+void VirtualGLApi::glEnableVertexAttribArrayFn(GLuint index) { |
+ driver_->fn.glEnableVertexAttribArrayFn(index); |
+} |
+ |
+void VirtualGLApi::glEndQueryFn(GLenum target) { |
+ driver_->fn.glEndQueryFn(target); |
+} |
+ |
+void VirtualGLApi::glEndQueryARBFn(GLenum target) { |
+ driver_->fn.glEndQueryARBFn(target); |
+} |
+ |
+void VirtualGLApi::glFinishFn(void) { |
+ driver_->fn.glFinishFn(); |
+} |
+ |
+void VirtualGLApi::glFlushFn(void) { |
+ driver_->fn.glFlushFn(); |
+} |
+ |
+void VirtualGLApi::glFramebufferRenderbufferEXTFn( |
+ GLenum target, GLenum attachment, |
+ GLenum renderbuffertarget, GLuint renderbuffer) { |
+ driver_->fn.glFramebufferRenderbufferEXTFn( |
+ target, attachment, renderbuffertarget, renderbuffer); |
+} |
+ |
+void VirtualGLApi::glFramebufferTexture2DEXTFn( |
+ GLenum target, GLenum attachment, |
+ GLenum textarget, GLuint texture, GLint level) { |
+ driver_->fn.glFramebufferTexture2DEXTFn( |
+ target, attachment, textarget, texture, level); |
+} |
+ |
+void VirtualGLApi::glFrontFaceFn(GLenum mode) { |
+ driver_->fn.glFrontFaceFn(mode); |
+} |
+ |
+void VirtualGLApi::glGenBuffersARBFn(GLsizei n, GLuint* buffers) { |
+ driver_->fn.glGenBuffersARBFn(n, buffers); |
+} |
+ |
+void VirtualGLApi::glGenQueriesFn(GLsizei n, GLuint* ids) { |
+ driver_->fn.glGenQueriesFn(n, ids); |
+} |
+ |
+void VirtualGLApi::glGenQueriesARBFn(GLsizei n, GLuint* ids) { |
+ driver_->fn.glGenQueriesARBFn(n, ids); |
+} |
+ |
+void VirtualGLApi::glGenerateMipmapEXTFn(GLenum target) { |
+ driver_->fn.glGenerateMipmapEXTFn(target); |
+} |
+ |
+void VirtualGLApi::glGenFramebuffersEXTFn(GLsizei n, GLuint* framebuffers) { |
+ driver_->fn.glGenFramebuffersEXTFn(n, framebuffers); |
+} |
+ |
+void VirtualGLApi::glGenRenderbuffersEXTFn(GLsizei n, GLuint* renderbuffers) { |
+ driver_->fn.glGenRenderbuffersEXTFn(n, renderbuffers); |
+} |
+ |
+void VirtualGLApi::glGenTexturesFn(GLsizei n, GLuint* textures) { |
+ driver_->fn.glGenTexturesFn(n, textures); |
+} |
+ |
+void VirtualGLApi::glGetActiveAttribFn( |
+ GLuint program, GLuint index, GLsizei bufsize, |
+ GLsizei* length, GLint* size, GLenum* type, char* name) { |
+ driver_->fn.glGetActiveAttribFn( |
+ program, index, bufsize, length, size, type, name); |
+} |
+ |
+void VirtualGLApi::glGetActiveUniformFn( |
+ GLuint program, GLuint index, GLsizei bufsize, |
+ GLsizei* length, GLint* size, GLenum* type, char* name) { |
+ driver_->fn.glGetActiveUniformFn( |
+ program, index, bufsize, length, size, type, name); |
+} |
+ |
+void VirtualGLApi::glGetAttachedShadersFn( |
+ GLuint program, GLsizei maxcount, GLsizei* count, GLuint* shaders) { |
+ driver_->fn.glGetAttachedShadersFn(program, maxcount, count, shaders); |
+} |
+ |
+GLint VirtualGLApi::glGetAttribLocationFn(GLuint program, const char* name) { |
+ return driver_->fn.glGetAttribLocationFn(program, name); |
+} |
+ |
+void VirtualGLApi::glGetBooleanvFn(GLenum pname, GLboolean* params) { |
+ driver_->fn.glGetBooleanvFn(pname, params); |
+} |
+ |
+void VirtualGLApi::glGetBufferParameterivFn( |
+ GLenum target, GLenum pname, GLint* params) { |
+ driver_->fn.glGetBufferParameterivFn(target, pname, params); |
+} |
+ |
+GLenum VirtualGLApi::glGetErrorFn(void) { |
+ return driver_->fn.glGetErrorFn(); |
+} |
+ |
+void VirtualGLApi::glGetFloatvFn(GLenum pname, GLfloat* params) { |
+ driver_->fn.glGetFloatvFn(pname, params); |
+} |
+ |
+void VirtualGLApi::glGetFramebufferAttachmentParameterivEXTFn( |
+ GLenum target, GLenum attachment, GLenum pname, GLint* params) { |
+ driver_->fn.glGetFramebufferAttachmentParameterivEXTFn( |
+ target, attachment, pname, params); |
+} |
+ |
+GLenum VirtualGLApi::glGetGraphicsResetStatusARBFn(void) { |
+ return driver_->fn.glGetGraphicsResetStatusARBFn(); |
+} |
+ |
+void VirtualGLApi::glGetIntegervFn(GLenum pname, GLint* params) { |
+ driver_->fn.glGetIntegervFn(pname, params); |
+} |
+ |
+void VirtualGLApi::glGetProgramBinaryFn( |
+ GLuint program, GLsizei bufSize, |
+ GLsizei* length, GLenum* binaryFormat, GLvoid* binary) { |
+ driver_->fn.glGetProgramBinaryFn( |
+ program, bufSize, length, binaryFormat, binary); |
+} |
+ |
+void VirtualGLApi::glGetProgramivFn( |
+ GLuint program, GLenum pname, GLint* params) { |
+ driver_->fn.glGetProgramivFn(program, pname, params); |
+} |
+ |
+void VirtualGLApi::glGetProgramInfoLogFn( |
+ GLuint program, GLsizei bufsize, GLsizei* length, char* infolog) { |
+ driver_->fn.glGetProgramInfoLogFn(program, bufsize, length, infolog); |
+} |
+ |
+void VirtualGLApi::glGetQueryivFn(GLenum target, GLenum pname, GLint* params) { |
+ driver_->fn.glGetQueryivFn(target, pname, params); |
+} |
+ |
+void VirtualGLApi::glGetQueryivARBFn( |
+ GLenum target, GLenum pname, GLint* params) { |
+ driver_->fn.glGetQueryivARBFn(target, pname, params); |
+} |
+ |
+void VirtualGLApi::glGetQueryObjecti64vFn( |
+ GLuint id, GLenum pname, GLint64* params) { |
+ driver_->fn.glGetQueryObjecti64vFn(id, pname, params); |
+} |
+ |
+void VirtualGLApi::glGetQueryObjectivFn( |
+ GLuint id, GLenum pname, GLint* params) { |
+ driver_->fn.glGetQueryObjectivFn(id, pname, params); |
+} |
+ |
+void VirtualGLApi::glGetQueryObjectui64vFn( |
+ GLuint id, GLenum pname, GLuint64* params) { |
+ driver_->fn.glGetQueryObjectui64vFn(id, pname, params); |
+} |
+ |
+void VirtualGLApi::glGetQueryObjectuivFn( |
+ GLuint id, GLenum pname, GLuint* params) { |
+ driver_->fn.glGetQueryObjectuivFn(id, pname, params); |
+} |
+ |
+void VirtualGLApi::glGetQueryObjectuivARBFn( |
+ GLuint id, GLenum pname, GLuint* params) { |
+ driver_->fn.glGetQueryObjectuivARBFn(id, pname, params); |
+} |
+ |
+void VirtualGLApi::glGetRenderbufferParameterivEXTFn( |
+ GLenum target, GLenum pname, GLint* params) { |
+ driver_->fn.glGetRenderbufferParameterivEXTFn(target, pname, params); |
+} |
+ |
+void VirtualGLApi::glGetShaderivFn(GLuint shader, GLenum pname, GLint* params) { |
+ driver_->fn.glGetShaderivFn(shader, pname, params); |
+} |
+ |
+void VirtualGLApi::glGetShaderInfoLogFn( |
+ GLuint shader, GLsizei bufsize, GLsizei* length, char* infolog) { |
+ driver_->fn.glGetShaderInfoLogFn(shader, bufsize, length, infolog); |
+} |
+ |
+void VirtualGLApi::glGetShaderPrecisionFormatFn( |
+ GLenum shadertype, GLenum precisiontype, GLint* range, GLint* precision) { |
+ driver_->fn.glGetShaderPrecisionFormatFn( |
+ shadertype, precisiontype, range, precision); |
+} |
+ |
+void VirtualGLApi::glGetShaderSourceFn( |
+ GLuint shader, GLsizei bufsize, GLsizei* length, char* source) { |
+ driver_->fn.glGetShaderSourceFn(shader, bufsize, length, source); |
+} |
+ |
+const GLubyte* VirtualGLApi::glGetStringFn(GLenum name) { |
+ switch (name) { |
+ case GL_EXTENSIONS: |
+ // For now return no extensions. |
+ // |
+ // Specificially we can't support GL_EXT_occlusion_query_boolean which is |
+ // based on GL_ARB_occlusion_query without a lot of work virtualizing |
+ // queries. |
+ // |
+ // Also we don't support multisample yet, nor vertex array objects, |
+ // etc.. |
+ // |
+ // We can turn on other extensions on an as needed basis. For now, if you |
+ // need the extensions, don't make a virtual context. |
+ return reinterpret_cast<const GLubyte*>(""); |
+ default: |
+ return driver_->fn.glGetStringFn(name); |
+ } |
+} |
+ |
+void VirtualGLApi::glGetTexLevelParameterfvFn( |
+ GLenum target, GLint level, GLenum pname, GLfloat* params) { |
+ driver_->fn.glGetTexLevelParameterfvFn(target, level, pname, params); |
+} |
+ |
+void VirtualGLApi::glGetTexLevelParameterivFn( |
+ GLenum target, GLint level, GLenum pname, GLint* params) { |
+ driver_->fn.glGetTexLevelParameterivFn(target, level, pname, params); |
+} |
+ |
+void VirtualGLApi::glGetTexParameterfvFn( |
+ GLenum target, GLenum pname, GLfloat* params) { |
+ driver_->fn.glGetTexParameterfvFn(target, pname, params); |
+} |
+ |
+void VirtualGLApi::glGetTexParameterivFn( |
+ GLenum target, GLenum pname, GLint* params) { |
+ driver_->fn.glGetTexParameterivFn(target, pname, params); |
+} |
+ |
+void VirtualGLApi::glGetTranslatedShaderSourceANGLEFn( |
+ GLuint shader, GLsizei bufsize, GLsizei* length, char* source) { |
+ driver_->fn.glGetTranslatedShaderSourceANGLEFn( |
+ shader, bufsize, length, source); |
+} |
+ |
+void VirtualGLApi::glGetUniformfvFn( |
+ GLuint program, GLint location, GLfloat* params) { |
+ driver_->fn.glGetUniformfvFn(program, location, params); |
+} |
+ |
+void VirtualGLApi::glGetUniformivFn( |
+ GLuint program, GLint location, GLint* params) { |
+ driver_->fn.glGetUniformivFn(program, location, params); |
+} |
+ |
+GLint VirtualGLApi::glGetUniformLocationFn(GLuint program, const char* name) { |
+ return driver_->fn.glGetUniformLocationFn(program, name); |
+} |
+ |
+void VirtualGLApi::glGetVertexAttribfvFn( |
+ GLuint index, GLenum pname, GLfloat* params) { |
+ driver_->fn.glGetVertexAttribfvFn(index, pname, params); |
+} |
+ |
+void VirtualGLApi::glGetVertexAttribivFn( |
+ GLuint index, GLenum pname, GLint* params) { |
+ driver_->fn.glGetVertexAttribivFn(index, pname, params); |
+} |
+ |
+void VirtualGLApi::glGetVertexAttribPointervFn( |
+ GLuint index, GLenum pname, void** pointer) { |
+ driver_->fn.glGetVertexAttribPointervFn(index, pname, pointer); |
+} |
+ |
+void VirtualGLApi::glHintFn(GLenum target, GLenum mode) { |
+ driver_->fn.glHintFn(target, mode); |
+} |
+ |
+GLboolean VirtualGLApi::glIsBufferFn(GLuint buffer) { |
+ return driver_->fn.glIsBufferFn(buffer); |
+} |
+ |
+GLboolean VirtualGLApi::glIsEnabledFn(GLenum cap) { |
+ return driver_->fn.glIsEnabledFn(cap); |
+} |
+ |
+GLboolean VirtualGLApi::glIsFramebufferEXTFn(GLuint framebuffer) { |
+ return driver_->fn.glIsFramebufferEXTFn(framebuffer); |
+} |
+ |
+GLboolean VirtualGLApi::glIsProgramFn(GLuint program) { |
+ return driver_->fn.glIsProgramFn(program); |
+} |
+ |
+GLboolean VirtualGLApi::glIsQueryARBFn(GLuint query) { |
+ return driver_->fn.glIsQueryARBFn(query); |
+} |
+ |
+GLboolean VirtualGLApi::glIsRenderbufferEXTFn(GLuint renderbuffer) { |
+ return driver_->fn.glIsRenderbufferEXTFn(renderbuffer); |
+} |
+ |
+GLboolean VirtualGLApi::glIsShaderFn(GLuint shader) { |
+ return driver_->fn.glIsShaderFn(shader); |
+} |
+ |
+GLboolean VirtualGLApi::glIsTextureFn(GLuint texture) { |
+ return driver_->fn.glIsTextureFn(texture); |
+} |
+ |
+void VirtualGLApi::glLineWidthFn(GLfloat width) { |
+ driver_->fn.glLineWidthFn(width); |
+} |
+ |
+void VirtualGLApi::glLinkProgramFn(GLuint program) { |
+ driver_->fn.glLinkProgramFn(program); |
+} |
+ |
+void* VirtualGLApi::glMapBufferFn(GLenum target, GLenum access) { |
+ return driver_->fn.glMapBufferFn(target, access); |
+} |
+ |
+void VirtualGLApi::glPixelStoreiFn(GLenum pname, GLint param) { |
+ driver_->fn.glPixelStoreiFn(pname, param); |
+} |
+ |
+void VirtualGLApi::glPointParameteriFn(GLenum pname, GLint param) { |
+ driver_->fn.glPointParameteriFn(pname, param); |
+} |
+ |
+void VirtualGLApi::glPolygonOffsetFn(GLfloat factor, GLfloat units) { |
+ driver_->fn.glPolygonOffsetFn(factor, units); |
+} |
+ |
+void VirtualGLApi::glProgramBinaryFn( |
+ GLuint program, GLenum binaryFormat, const GLvoid* binary, GLsizei length) { |
+ driver_->fn.glProgramBinaryFn(program, binaryFormat, binary, length); |
+} |
+ |
+void VirtualGLApi::glProgramParameteriFn( |
+ GLuint program, GLenum pname, GLint value) { |
+ driver_->fn.glProgramParameteriFn(program, pname, value); |
+} |
+ |
+void VirtualGLApi::glQueryCounterFn(GLuint id, GLenum target) { |
+ driver_->fn.glQueryCounterFn(id, target); |
+} |
+ |
+void VirtualGLApi::glReadBufferFn(GLenum src) { |
+ driver_->fn.glReadBufferFn(src); |
+} |
+ |
+void VirtualGLApi::glReadPixelsFn( |
+ GLint x, GLint y, GLsizei width, GLsizei height, |
+ GLenum format, GLenum type, void* pixels) { |
+ driver_->fn.glReadPixelsFn(x, y, width, height, format, type, pixels); |
+} |
+ |
+void VirtualGLApi::glReleaseShaderCompilerFn(void) { |
+ driver_->fn.glReleaseShaderCompilerFn(); |
+} |
+ |
+void VirtualGLApi::glRenderbufferStorageMultisampleEXTFn( |
+ GLenum target, GLsizei samples, GLenum internalformat, |
+ GLsizei width, GLsizei height) { |
+ driver_->fn.glRenderbufferStorageMultisampleEXTFn( |
+ target, samples, internalformat, width, height); |
+} |
+ |
+void VirtualGLApi::glRenderbufferStorageMultisampleANGLEFn( |
+ GLenum target, GLsizei samples, GLenum internalformat, |
+ GLsizei width, GLsizei height) { |
+ driver_->fn.glRenderbufferStorageMultisampleANGLEFn( |
+ target, samples, internalformat, width, height); |
+} |
+ |
+void VirtualGLApi::glRenderbufferStorageEXTFn( |
+ GLenum target, GLenum internalformat, GLsizei width, GLsizei height) { |
+ driver_->fn.glRenderbufferStorageEXTFn(target, internalformat, width, height); |
+} |
+ |
+void VirtualGLApi::glSampleCoverageFn(GLclampf value, GLboolean invert) { |
+ driver_->fn.glSampleCoverageFn(value, invert); |
+} |
+ |
+void VirtualGLApi::glScissorFn( |
+ GLint x, GLint y, GLsizei width, GLsizei height) { |
+ driver_->fn.glScissorFn(x, y, width, height); |
+} |
+ |
+void VirtualGLApi::glShaderBinaryFn( |
+ GLsizei n, const GLuint* shaders, GLenum binaryformat, |
+ const void* binary, GLsizei length) { |
+ driver_->fn.glShaderBinaryFn(n, shaders, binaryformat, binary, length); |
+} |
+ |
+void VirtualGLApi::glShaderSourceFn( |
+ GLuint shader, GLsizei count, const char** str, const GLint* length) { |
+ driver_->fn.glShaderSourceFn(shader, count, str, length); |
+} |
+ |
+void VirtualGLApi::glStencilFuncFn(GLenum func, GLint ref, GLuint mask) { |
+ driver_->fn.glStencilFuncFn(func, ref, mask); |
+} |
+ |
+void VirtualGLApi::glStencilFuncSeparateFn( |
+ GLenum face, GLenum func, GLint ref, GLuint mask) { |
+ driver_->fn.glStencilFuncSeparateFn(face, func, ref, mask); |
+} |
+ |
+void VirtualGLApi::glStencilMaskFn(GLuint mask) { |
+ driver_->fn.glStencilMaskFn(mask); |
+} |
+ |
+void VirtualGLApi::glStencilMaskSeparateFn(GLenum face, GLuint mask) { |
+ driver_->fn.glStencilMaskSeparateFn(face, mask); |
+} |
+ |
+void VirtualGLApi::glStencilOpFn(GLenum fail, GLenum zfail, GLenum zpass) { |
+ driver_->fn.glStencilOpFn(fail, zfail, zpass); |
+} |
+ |
+void VirtualGLApi::glStencilOpSeparateFn( |
+ GLenum face, GLenum fail, GLenum zfail, GLenum zpass) { |
+ driver_->fn.glStencilOpSeparateFn(face, fail, zfail, zpass); |
+} |
+ |
+void VirtualGLApi::glTexImage2DFn( |
+ GLenum target, GLint level, GLint internalformat, |
+ GLsizei width, GLsizei height, |
+ GLint border, GLenum format, GLenum type, const void* pixels) { |
+ driver_->fn.glTexImage2DFn( |
+ target, level, internalformat, width, height, |
+ border, format, type, pixels); |
+} |
+ |
+void VirtualGLApi::glTexParameterfFn( |
+ GLenum target, GLenum pname, GLfloat param) { |
+ driver_->fn.glTexParameterfFn(target, pname, param); |
+} |
+ |
+void VirtualGLApi::glTexParameterfvFn( |
+ GLenum target, GLenum pname, const GLfloat* params) { |
+ driver_->fn.glTexParameterfvFn(target, pname, params); |
+} |
+ |
+void VirtualGLApi::glTexParameteriFn(GLenum target, GLenum pname, GLint param) { |
+ driver_->fn.glTexParameteriFn(target, pname, param); |
+} |
+ |
+void VirtualGLApi::glTexParameterivFn( |
+ GLenum target, GLenum pname, const GLint* params) { |
+ driver_->fn.glTexParameterivFn(target, pname, params); |
+} |
+ |
+void VirtualGLApi::glTexStorage2DEXTFn( |
+ GLenum target, GLsizei levels, GLenum internalformat, |
+ GLsizei width, GLsizei height) { |
+ driver_->fn.glTexStorage2DEXTFn( |
+ target, levels, internalformat, width, height); |
+} |
+ |
+void VirtualGLApi::glTexSubImage2DFn( |
+ GLenum target, GLint level, GLint xoffset, GLint yoffset, |
+ GLsizei width, GLsizei height, GLenum format, GLenum type, |
+ const void* pixels) { |
+ driver_->fn.glTexSubImage2DFn( |
+ target, level, xoffset, yoffset, width, height, format, type, pixels); |
+} |
+ |
+void VirtualGLApi::glUniform1fFn(GLint location, GLfloat x) { |
+ driver_->fn.glUniform1fFn(location, x); |
+} |
+ |
+void VirtualGLApi::glUniform1fvFn( |
+ GLint location, GLsizei count, const GLfloat* v) { |
+ driver_->fn.glUniform1fvFn(location, count, v); |
+} |
+ |
+void VirtualGLApi::glUniform1iFn(GLint location, GLint x) { |
+ driver_->fn.glUniform1iFn(location, x); |
+} |
+ |
+void VirtualGLApi::glUniform1ivFn( |
+ GLint location, GLsizei count, const GLint* v) { |
+ driver_->fn.glUniform1ivFn(location, count, v); |
+} |
+ |
+void VirtualGLApi::glUniform2fFn(GLint location, GLfloat x, GLfloat y) { |
+ driver_->fn.glUniform2fFn(location, x, y); |
+} |
+ |
+void VirtualGLApi::glUniform2fvFn( |
+ GLint location, GLsizei count, const GLfloat* v) { |
+ driver_->fn.glUniform2fvFn(location, count, v); |
+} |
+ |
+void VirtualGLApi::glUniform2iFn(GLint location, GLint x, GLint y) { |
+ driver_->fn.glUniform2iFn(location, x, y); |
+} |
+ |
+void VirtualGLApi::glUniform2ivFn( |
+ GLint location, GLsizei count, const GLint* v) { |
+ driver_->fn.glUniform2ivFn(location, count, v); |
+} |
+ |
+void VirtualGLApi::glUniform3fFn( |
+ GLint location, GLfloat x, GLfloat y, GLfloat z) { |
+ driver_->fn.glUniform3fFn(location, x, y, z); |
+} |
+ |
+void VirtualGLApi::glUniform3fvFn( |
+ GLint location, GLsizei count, const GLfloat* v) { |
+ driver_->fn.glUniform3fvFn(location, count, v); |
+} |
+ |
+void VirtualGLApi::glUniform3iFn(GLint location, GLint x, GLint y, GLint z) { |
+ driver_->fn.glUniform3iFn(location, x, y, z); |
+} |
+ |
+void VirtualGLApi::glUniform3ivFn( |
+ GLint location, GLsizei count, const GLint* v) { |
+ driver_->fn.glUniform3ivFn(location, count, v); |
+} |
+ |
+void VirtualGLApi::glUniform4fFn( |
+ GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w) { |
+ driver_->fn.glUniform4fFn(location, x, y, z, w); |
+} |
+ |
+void VirtualGLApi::glUniform4fvFn( |
+ GLint location, GLsizei count, const GLfloat* v) { |
+ driver_->fn.glUniform4fvFn(location, count, v); |
+} |
+ |
+void VirtualGLApi::glUniform4iFn( |
+ GLint location, GLint x, GLint y, GLint z, GLint w) { |
+ driver_->fn.glUniform4iFn(location, x, y, z, w); |
+} |
+ |
+void VirtualGLApi::glUniform4ivFn( |
+ GLint location, GLsizei count, const GLint* v) { |
+ driver_->fn.glUniform4ivFn(location, count, v); |
+} |
+ |
+void VirtualGLApi::glUniformMatrix2fvFn( |
+ GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { |
+ driver_->fn.glUniformMatrix2fvFn(location, count, transpose, value); |
+} |
+ |
+void VirtualGLApi::glUniformMatrix3fvFn( |
+ GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { |
+ driver_->fn.glUniformMatrix3fvFn(location, count, transpose, value); |
+} |
+ |
+void VirtualGLApi::glUniformMatrix4fvFn( |
+ GLint location, GLsizei count, GLboolean transpose, const GLfloat* value) { |
+ driver_->fn.glUniformMatrix4fvFn(location, count, transpose, value); |
+} |
+ |
+GLboolean VirtualGLApi::glUnmapBufferFn(GLenum target) { |
+ return driver_->fn.glUnmapBufferFn(target); |
+} |
+ |
+void VirtualGLApi::glUseProgramFn(GLuint program) { |
+ driver_->fn.glUseProgramFn(program); |
+} |
+ |
+void VirtualGLApi::glValidateProgramFn(GLuint program) { |
+ driver_->fn.glValidateProgramFn(program); |
+} |
+ |
+void VirtualGLApi::glVertexAttrib1fFn(GLuint indx, GLfloat x) { |
+ driver_->fn.glVertexAttrib1fFn(indx, x); |
+} |
+ |
+void VirtualGLApi::glVertexAttrib1fvFn(GLuint indx, const GLfloat* values) { |
+ driver_->fn.glVertexAttrib1fvFn(indx, values); |
+} |
+ |
+void VirtualGLApi::glVertexAttrib2fFn(GLuint indx, GLfloat x, GLfloat y) { |
+ driver_->fn.glVertexAttrib2fFn(indx, x, y); |
+} |
+ |
+void VirtualGLApi::glVertexAttrib2fvFn(GLuint indx, const GLfloat* values) { |
+ driver_->fn.glVertexAttrib2fvFn(indx, values); |
+} |
+ |
+void VirtualGLApi::glVertexAttrib3fFn( |
+ GLuint indx, GLfloat x, GLfloat y, GLfloat z) { |
+ driver_->fn.glVertexAttrib3fFn(indx, x, y, z); |
+} |
+ |
+void VirtualGLApi::glVertexAttrib3fvFn(GLuint indx, const GLfloat* values) { |
+ driver_->fn.glVertexAttrib3fvFn(indx, values); |
+} |
+ |
+void VirtualGLApi::glVertexAttrib4fFn( |
+ GLuint indx, GLfloat x, GLfloat y, GLfloat z, GLfloat w) { |
+ driver_->fn.glVertexAttrib4fFn(indx, x, y, z, w); |
+} |
+ |
+void VirtualGLApi::glVertexAttrib4fvFn(GLuint indx, const GLfloat* values) { |
+ driver_->fn.glVertexAttrib4fvFn(indx, values); |
+} |
+ |
+void VirtualGLApi::glVertexAttribPointerFn( |
+ GLuint indx, GLint size, GLenum type, GLboolean normalized, |
+ GLsizei stride, const void* ptr) { |
+ driver_->fn.glVertexAttribPointerFn( |
+ indx, size, type, normalized, stride, ptr); |
+} |
+ |
+void VirtualGLApi::glViewportFn( |
+ GLint x, GLint y, GLsizei width, GLsizei height) { |
+ driver_->fn.glViewportFn(x, y, width, height); |
+} |
+ |
+void VirtualGLApi::glGenFencesNVFn(GLsizei n, GLuint* fences) { |
+ driver_->fn.glGenFencesNVFn(n, fences); |
+} |
+ |
+void VirtualGLApi::glDeleteFencesNVFn(GLsizei n, const GLuint* fences) { |
+ driver_->fn.glDeleteFencesNVFn(n, fences); |
+} |
+ |
+void VirtualGLApi::glSetFenceNVFn(GLuint fence, GLenum condition) { |
+ driver_->fn.glSetFenceNVFn(fence, condition); |
+} |
+ |
+GLboolean VirtualGLApi::glTestFenceNVFn(GLuint fence) { |
+ return driver_->fn.glTestFenceNVFn(fence); |
+} |
+ |
+void VirtualGLApi::glFinishFenceNVFn(GLuint fence) { |
+ driver_->fn.glFinishFenceNVFn(fence); |
+} |
+ |
+GLboolean VirtualGLApi::glIsFenceNVFn(GLuint fence) { |
+ return driver_->fn.glIsFenceNVFn(fence); |
+} |
+ |
+void VirtualGLApi::glGetFenceivNVFn(GLuint fence, GLenum pname, GLint* params) { |
+ driver_->fn.glGetFenceivNVFn(fence, pname, params); |
+} |
+ |
+GLsync VirtualGLApi::glFenceSyncFn(GLenum condition, GLbitfield flags) { |
+ return driver_->fn.glFenceSyncFn(condition, flags); |
+} |
+ |
+void VirtualGLApi::glDeleteSyncFn(GLsync sync) { |
+ driver_->fn.glDeleteSyncFn(sync); |
+} |
+ |
+void VirtualGLApi::glGetSyncivFn( |
+ GLsync sync, GLenum pname, GLsizei bufSize, GLsizei* length,GLint* values) { |
+ driver_->fn.glGetSyncivFn(sync, pname, bufSize, length,values); |
+} |
+ |
+void VirtualGLApi::glDrawArraysInstancedANGLEFn( |
+ GLenum mode, GLint first, GLsizei count, GLsizei primcount) { |
+ driver_->fn.glDrawArraysInstancedANGLEFn(mode, first, count, primcount); |
+} |
+ |
+void VirtualGLApi::glDrawElementsInstancedANGLEFn( |
+ GLenum mode, GLsizei count, GLenum type, const void* indices, |
+ GLsizei primcount) { |
+ driver_->fn.glDrawElementsInstancedANGLEFn( |
+ mode, count, type, indices, primcount); |
+} |
+ |
+void VirtualGLApi::glVertexAttribDivisorANGLEFn(GLuint index, GLuint divisor) { |
+ driver_->fn.glVertexAttribDivisorANGLEFn(index, divisor); |
+} |
+ |
+void VirtualGLApi::glGenVertexArraysOESFn(GLsizei n, GLuint* arrays) { |
+ driver_->fn.glGenVertexArraysOESFn(n, arrays); |
+} |
+ |
+void VirtualGLApi::glDeleteVertexArraysOESFn(GLsizei n, const GLuint* arrays) { |
+ driver_->fn.glDeleteVertexArraysOESFn(n, arrays); |
+} |
+ |
+void VirtualGLApi::glBindVertexArrayOESFn(GLuint array) { |
+ driver_->fn.glBindVertexArrayOESFn(array); |
+} |
+ |
+GLboolean VirtualGLApi::glIsVertexArrayOESFn(GLuint array) { |
+ return driver_->fn.glIsVertexArrayOESFn(array); |
+} |
+ |
} // namespace gfx |