aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/gl/angle
diff options
context:
space:
mode:
authorGravatar bsalomon <bsalomon@google.com>2014-08-26 11:35:23 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2014-08-26 11:35:23 -0700
commita721c8167222a0b2b442a00052104b2a78ab93e5 (patch)
tree136617d5b26eb4674baa653b3b50028ebd9c9080 /src/gpu/gl/angle
parent6a9c7b1dbdd4cfa36a006a8c7cf2effd3ffe862e (diff)
Remove reliance on linked in GL functions for assembling GLES interfaces.
Make Android pull in gl2.h directly to workaround broken eglGetProcAddress for unextended GLES2 functions. Use interface assembler for angle and iOS. R=robertphillips@google.com Author: bsalomon@google.com Review URL: https://codereview.chromium.org/500153002
Diffstat (limited to 'src/gpu/gl/angle')
-rw-r--r--src/gpu/gl/angle/GrGLCreateANGLEInterface.cpp170
1 files changed, 11 insertions, 159 deletions
diff --git a/src/gpu/gl/angle/GrGLCreateANGLEInterface.cpp b/src/gpu/gl/angle/GrGLCreateANGLEInterface.cpp
index 6552f7c179..0d06b2d600 100644
--- a/src/gpu/gl/angle/GrGLCreateANGLEInterface.cpp
+++ b/src/gpu/gl/angle/GrGLCreateANGLEInterface.cpp
@@ -8,17 +8,19 @@
#include "gl/GrGLInterface.h"
+#include "gl/GrGLAssembleInterface.h"
-#ifndef GL_GLEXT_PROTOTYPES
-#define GL_GLEXT_PROTOTYPES
-#endif
-
-#include "GLES2/gl2.h"
-#include "GLES2/gl2ext.h"
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
#include "EGL/egl.h"
-#define GET_PROC(name) \
- interface->fFunctions.f ## name = (GrGL ## name ## Proc) GetProcAddress(ghANGLELib, "gl" #name);
+static GrGLFuncPtr angle_get_gl_proc(void* ctx, const char name[]) {
+ GrGLFuncPtr proc = (GrGLFuncPtr) GetProcAddress((HMODULE)ctx, name);
+ if (NULL != proc) {
+ return proc;
+ }
+ return eglGetProcAddress(name);
+}
const GrGLInterface* GrGLCreateANGLEInterface() {
@@ -33,155 +35,5 @@ const GrGLInterface* GrGLCreateANGLEInterface() {
return NULL;
}
- GrGLInterface* interface = SkNEW(GrGLInterface);
- interface->fStandard = kGLES_GrGLStandard;
-
- GrGLInterface::Functions* functions = &interface->fFunctions;
-
- GET_PROC(ActiveTexture);
- GET_PROC(AttachShader);
- GET_PROC(BindAttribLocation);
- GET_PROC(BindBuffer);
- GET_PROC(BindTexture);
- functions->fBindVertexArray =
- (GrGLBindVertexArrayProc) eglGetProcAddress("glBindVertexArrayOES");
- GET_PROC(BlendColor);
- GET_PROC(BlendFunc);
- GET_PROC(BufferData);
- GET_PROC(BufferSubData);
- GET_PROC(Clear);
- GET_PROC(ClearColor);
- GET_PROC(ClearStencil);
- GET_PROC(ColorMask);
- GET_PROC(CompileShader);
- GET_PROC(CompressedTexImage2D);
- GET_PROC(CompressedTexSubImage2D);
- GET_PROC(CopyTexSubImage2D);
- GET_PROC(CreateProgram);
- GET_PROC(CreateShader);
- GET_PROC(CullFace);
- GET_PROC(DeleteBuffers);
- GET_PROC(DeleteProgram);
- GET_PROC(DeleteShader);
- GET_PROC(DeleteTextures);
- functions->fDeleteVertexArrays =
- (GrGLDeleteVertexArraysProc) eglGetProcAddress("glDeleteVertexArraysOES");
- GET_PROC(DepthMask);
- GET_PROC(Disable);
- GET_PROC(DisableVertexAttribArray);
- GET_PROC(DrawArrays);
- GET_PROC(DrawElements);
- GET_PROC(Enable);
- GET_PROC(EnableVertexAttribArray);
- GET_PROC(Finish);
- GET_PROC(Flush);
- GET_PROC(FrontFace);
- GET_PROC(GenBuffers);
- GET_PROC(GenerateMipmap);
- GET_PROC(GenTextures);
- functions->fGenVertexArrays =
- (GrGLGenVertexArraysProc) eglGetProcAddress("glGenVertexArraysOES");
- GET_PROC(GetBufferParameteriv);
- GET_PROC(GetError);
- GET_PROC(GetIntegerv);
- GET_PROC(GetProgramInfoLog);
- GET_PROC(GetProgramiv);
- GET_PROC(GetShaderInfoLog);
- GET_PROC(GetShaderiv);
- GET_PROC(GetString);
- GET_PROC(GetStringi);
- GET_PROC(GetUniformLocation);
- GET_PROC(LineWidth);
- GET_PROC(LinkProgram);
- GET_PROC(PixelStorei);
- GET_PROC(ReadPixels);
- GET_PROC(Scissor);
- GET_PROC(ShaderSource);
- GET_PROC(StencilFunc);
- GET_PROC(StencilFuncSeparate);
- GET_PROC(StencilMask);
- GET_PROC(StencilMaskSeparate);
- GET_PROC(StencilOp);
- GET_PROC(StencilOpSeparate);
- GET_PROC(TexImage2D);
- GET_PROC(TexParameteri);
- GET_PROC(TexParameteriv);
- GET_PROC(TexSubImage2D);
-#if GL_ARB_texture_storage
- GET_PROC(TexStorage2D);
-#elif GL_EXT_texture_storage
- functions->fTexStorage2D = (GrGLTexStorage2DProc) eglGetProcAddress("glTexStorage2DEXT");
-#endif
- GET_PROC(Uniform1f);
- GET_PROC(Uniform1i);
- GET_PROC(Uniform1fv);
- GET_PROC(Uniform1iv);
-
- GET_PROC(Uniform2f);
- GET_PROC(Uniform2i);
- GET_PROC(Uniform2fv);
- GET_PROC(Uniform2iv);
-
- GET_PROC(Uniform3f);
- GET_PROC(Uniform3i);
- GET_PROC(Uniform3fv);
- GET_PROC(Uniform3iv);
-
- GET_PROC(Uniform4f);
- GET_PROC(Uniform4i);
- GET_PROC(Uniform4fv);
- GET_PROC(Uniform4iv);
-
- GET_PROC(UniformMatrix2fv);
- GET_PROC(UniformMatrix3fv);
- GET_PROC(UniformMatrix4fv);
- GET_PROC(UseProgram);
- GET_PROC(VertexAttrib4fv);
- GET_PROC(VertexAttribPointer);
- GET_PROC(Viewport);
- GET_PROC(BindFramebuffer);
- GET_PROC(BindRenderbuffer);
- GET_PROC(CheckFramebufferStatus);
- GET_PROC(DeleteFramebuffers);
- GET_PROC(DeleteRenderbuffers);
- GET_PROC(FramebufferRenderbuffer);
- GET_PROC(FramebufferTexture2D);
- GET_PROC(GenFramebuffers);
- GET_PROC(GenRenderbuffers);
- GET_PROC(GetFramebufferAttachmentParameteriv);
- GET_PROC(GetRenderbufferParameteriv);
- GET_PROC(RenderbufferStorage);
-
- functions->fMapBuffer = (GrGLMapBufferProc) eglGetProcAddress("glMapBufferOES");
- functions->fUnmapBuffer = (GrGLUnmapBufferProc) eglGetProcAddress("glUnmapBufferOES");
-
-#if GL_ES_VERSION_3_0
- functions->fMapBufferRange = GET_PROC(glMapBufferRange);
- functions->fFlushMappedBufferRange = GET_PROC(glFlushMappedBufferRange);
-#else
- functions->fMapBufferRange = (GrGLMapBufferRangeProc) eglGetProcAddress("glMapBufferRange");
- functions->fFlushMappedBufferRange = (GrGLFlushMappedBufferRangeProc) eglGetProcAddress("glFlushMappedBufferRange");
-#endif
-
- functions->fInsertEventMarker = (GrGLInsertEventMarkerProc) eglGetProcAddress("glInsertEventMarkerEXT");
- functions->fPushGroupMarker = (GrGLInsertEventMarkerProc) eglGetProcAddress("glPushGroupMarkerEXT");
- functions->fPopGroupMarker = (GrGLPopGroupMarkerProc) eglGetProcAddress("glPopGroupMarkerEXT");
-
-#if GL_ES_VERSION_3_0
- GET_PROC(InvalidateFramebuffer);
- GET_PROC(InvalidateSubFramebuffer);
-#else
- functions->fInvalidateFramebuffer = (GrGLInvalidateFramebufferProc) eglGetProcAddress("glInvalidateFramebuffer");
- functions->fInvalidateSubFramebuffer = (GrGLInvalidateSubFramebufferProc) eglGetProcAddress("glInvalidateSubFramebuffer");
-#endif
- functions->fInvalidateBufferData = (GrGLInvalidateBufferDataProc) eglGetProcAddress("glInvalidateBufferData");
- functions->fInvalidateBufferSubData = (GrGLInvalidateBufferSubDataProc) eglGetProcAddress("glInvalidateBufferSubData");
- functions->fInvalidateTexImage = (GrGLInvalidateTexImageProc) eglGetProcAddress("glInvalidateTexImage");
- functions->fInvalidateTexSubImage = (GrGLInvalidateTexSubImageProc) eglGetProcAddress("glInvalidateTexSubImage");
-
- interface->fExtensions.init(kGLES_GrGLStandard,
- functions->fGetString,
- functions->fGetStringi,
- functions->fGetIntegerv);
- return interface;
+ return GrGLAssembleGLESInterface(ghANGLELib, angle_get_gl_proc);
}