diff options
Diffstat (limited to 'chromium/third_party/skia/src/gpu/gl/angle/GrGLCreateANGLEInterface.cpp')
-rw-r--r-- | chromium/third_party/skia/src/gpu/gl/angle/GrGLCreateANGLEInterface.cpp | 270 |
1 files changed, 149 insertions, 121 deletions
diff --git a/chromium/third_party/skia/src/gpu/gl/angle/GrGLCreateANGLEInterface.cpp b/chromium/third_party/skia/src/gpu/gl/angle/GrGLCreateANGLEInterface.cpp index 19aee2bae33..6552f7c179f 100644 --- a/chromium/third_party/skia/src/gpu/gl/angle/GrGLCreateANGLEInterface.cpp +++ b/chromium/third_party/skia/src/gpu/gl/angle/GrGLCreateANGLEInterface.cpp @@ -18,11 +18,10 @@ #include "EGL/egl.h" #define GET_PROC(name) \ - interface->f ## name = (GrGL ## name ## Proc) GetProcAddress(ghANGLELib, "gl" #name); + interface->fFunctions.f ## name = (GrGL ## name ## Proc) GetProcAddress(ghANGLELib, "gl" #name); const GrGLInterface* GrGLCreateANGLEInterface() { - static SkAutoTUnref<GrGLInterface> glInterface; static HMODULE ghANGLELib = NULL; if (NULL == ghANGLELib) { @@ -34,126 +33,155 @@ const GrGLInterface* GrGLCreateANGLEInterface() { return NULL; } - if (!glInterface.get()) { - GrGLInterface* interface = new GrGLInterface; - glInterface.reset(interface); - interface->fBindingsExported = kES_GrGLBinding; - - GET_PROC(ActiveTexture); - GET_PROC(AttachShader); - GET_PROC(BindAttribLocation); - GET_PROC(BindBuffer); - GET_PROC(BindTexture); - interface->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(CopyTexSubImage2D); - GET_PROC(CreateProgram); - GET_PROC(CreateShader); - GET_PROC(CullFace); - GET_PROC(DeleteBuffers); - GET_PROC(DeleteProgram); - GET_PROC(DeleteShader); - GET_PROC(DeleteTextures); - interface->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); - interface->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(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); + 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); + GET_PROC(TexStorage2D); #elif GL_EXT_texture_storage - interface->fTexStorage2D = (GrGLTexStorage2DProc) eglGetProcAddress("glTexStorage2DEXT"); + 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); - - interface->fMapBuffer = (GrGLMapBufferProc) eglGetProcAddress("glMapBufferOES"); - interface->fUnmapBuffer = (GrGLUnmapBufferProc) eglGetProcAddress("glUnmapBufferOES"); - } - glInterface.get()->ref(); - return glInterface.get(); + 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; } |