/* * Copyright 2012 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "gl/GrGLInterface.h" #ifndef GL_GLEXT_PROTOTYPES #define GL_GLEXT_PROTOTYPES #endif #include "GLES2/gl2.h" #include "GLES2/gl2ext.h" #include "EGL/egl.h" #define GR_GET_PROC(procType, baseName) \ interface->f ## baseName = (procType) GetProcAddress(ghANGLELib, "gl" #baseName); const GrGLInterface* GrGLCreateANGLEInterface() { static SkAutoTUnref glInterface; static HMODULE ghANGLELib = NULL; if (NULL == ghANGLELib) { // We load the ANGLE library and never let it go ghANGLELib = LoadLibrary("libGLESv2.dll"); } if (NULL == ghANGLELib) { // We can't setup the interface correctly w/o the DLL return NULL; } if (!glInterface.get()) { GrGLInterface* interface = new GrGLInterface; glInterface.reset(interface); interface->fBindingsExported = kES2_GrGLBinding; GR_GET_PROC(GrGLActiveTextureProc, ActiveTexture); GR_GET_PROC(GrGLAttachShaderProc, AttachShader); GR_GET_PROC(GrGLBindAttribLocationProc, BindAttribLocation); GR_GET_PROC(GrGLBindBufferProc, BindBuffer); GR_GET_PROC(GrGLBindTextureProc, BindTexture); GR_GET_PROC(GrGLBlendColorProc, BlendColor); GR_GET_PROC(GrGLBlendFuncProc, BlendFunc); GR_GET_PROC(GrGLBufferDataProc, BufferData); GR_GET_PROC(GrGLBufferSubDataProc, BufferSubData); GR_GET_PROC(GrGLClearProc, Clear); GR_GET_PROC(GrGLClearColorProc, ClearColor); GR_GET_PROC(GrGLClearStencilProc, ClearStencil); GR_GET_PROC(GrGLColorMaskProc, ColorMask); GR_GET_PROC(GrGLCompileShaderProc, CompileShader); GR_GET_PROC(GrGLCompressedTexImage2DProc, CompressedTexImage2D); GR_GET_PROC(GrGLCreateProgramProc, CreateProgram); GR_GET_PROC(GrGLCreateShaderProc, CreateShader); GR_GET_PROC(GrGLCullFaceProc, CullFace); GR_GET_PROC(GrGLDeleteBuffersProc, DeleteBuffers); GR_GET_PROC(GrGLDeleteProgramProc, DeleteProgram); GR_GET_PROC(GrGLDeleteShaderProc, DeleteShader); GR_GET_PROC(GrGLDeleteTexturesProc, DeleteTextures); GR_GET_PROC(GrGLDepthMaskProc, DepthMask); GR_GET_PROC(GrGLDisableProc, Disable); GR_GET_PROC(GrGLDisableVertexAttribArrayProc, DisableVertexAttribArray); GR_GET_PROC(GrGLDrawArraysProc, DrawArrays); GR_GET_PROC(GrGLDrawElementsProc, DrawElements); GR_GET_PROC(GrGLEnableProc, Enable); GR_GET_PROC(GrGLEnableVertexAttribArrayProc, EnableVertexAttribArray); GR_GET_PROC(GrGLFinishProc, Finish); GR_GET_PROC(GrGLFlushProc, Flush); GR_GET_PROC(GrGLFrontFaceProc, FrontFace); GR_GET_PROC(GrGLGenBuffersProc, GenBuffers); GR_GET_PROC(GrGLGenTexturesProc, GenTextures); GR_GET_PROC(GrGLGetBufferParameterivProc, GetBufferParameteriv); GR_GET_PROC(GrGLGetErrorProc, GetError); GR_GET_PROC(GrGLGetIntegervProc, GetIntegerv); GR_GET_PROC(GrGLGetProgramInfoLogProc, GetProgramInfoLog); GR_GET_PROC(GrGLGetProgramivProc, GetProgramiv); GR_GET_PROC(GrGLGetShaderInfoLogProc, GetShaderInfoLog); GR_GET_PROC(GrGLGetShaderivProc, GetShaderiv); GR_GET_PROC(GrGLGetStringProc, GetString); GR_GET_PROC(GrGLGetUniformLocationProc, GetUniformLocation); GR_GET_PROC(GrGLLineWidthProc, LineWidth); GR_GET_PROC(GrGLLinkProgramProc, LinkProgram); GR_GET_PROC(GrGLPixelStoreiProc, PixelStorei); GR_GET_PROC(GrGLReadPixelsProc, ReadPixels); GR_GET_PROC(GrGLScissorProc, Scissor); GR_GET_PROC(GrGLShaderSourceProc, ShaderSource); GR_GET_PROC(GrGLStencilFuncProc, StencilFunc); GR_GET_PROC(GrGLStencilFuncSeparateProc, StencilFuncSeparate); GR_GET_PROC(GrGLStencilMaskProc, StencilMask); GR_GET_PROC(GrGLStencilMaskSeparateProc, StencilMaskSeparate); GR_GET_PROC(GrGLStencilOpProc, StencilOp); GR_GET_PROC(GrGLStencilOpSeparateProc, StencilOpSeparate); GR_GET_PROC(GrGLTexImage2DProc, TexImage2D); GR_GET_PROC(GrGLTexParameteriProc, TexParameteri); GR_GET_PROC(GrGLTexParameterivProc, TexParameteriv); GR_GET_PROC(GrGLTexSubImage2DProc, TexSubImage2D); #if GL_ARB_texture_storage GR_GET_PROC(GrGLTexStorage2DProc, TexStorage2D); #elif GL_EXT_texture_storage interface->fTexStorage2D = (GrGLTexStorage2DProc) GetProcAddress(ghANGLELib, "glTexStorage2DEXT"); #endif GR_GET_PROC(GrGLUniform1fProc, Uniform1f); GR_GET_PROC(GrGLUniform1iProc, Uniform1i); GR_GET_PROC(GrGLUniform1fvProc, Uniform1fv); GR_GET_PROC(GrGLUniform1ivProc, Uniform1iv); GR_GET_PROC(GrGLUniform2fProc, Uniform2f); GR_GET_PROC(GrGLUniform2iProc, Uniform2i); GR_GET_PROC(GrGLUniform2fvProc, Uniform2fv); GR_GET_PROC(GrGLUniform2ivProc, Uniform2iv); GR_GET_PROC(GrGLUniform3fProc, Uniform3f); GR_GET_PROC(GrGLUniform3iProc, Uniform3i); GR_GET_PROC(GrGLUniform3fvProc, Uniform3fv); GR_GET_PROC(GrGLUniform3ivProc, Uniform3iv); GR_GET_PROC(GrGLUniform4fProc, Uniform4f); GR_GET_PROC(GrGLUniform4iProc, Uniform4i); GR_GET_PROC(GrGLUniform4fvProc, Uniform4fv); GR_GET_PROC(GrGLUniform4ivProc, Uniform4iv); GR_GET_PROC(GrGLUniformMatrix2fvProc, UniformMatrix2fv); GR_GET_PROC(GrGLUniformMatrix3fvProc, UniformMatrix3fv); GR_GET_PROC(GrGLUniformMatrix4fvProc, UniformMatrix4fv); GR_GET_PROC(GrGLUseProgramProc, UseProgram); GR_GET_PROC(GrGLVertexAttrib4fvProc, VertexAttrib4fv); GR_GET_PROC(GrGLVertexAttribPointerProc, VertexAttribPointer); GR_GET_PROC(GrGLViewportProc, Viewport); GR_GET_PROC(GrGLBindFramebufferProc, BindFramebuffer); GR_GET_PROC(GrGLBindRenderbufferProc, BindRenderbuffer); GR_GET_PROC(GrGLCheckFramebufferStatusProc, CheckFramebufferStatus); GR_GET_PROC(GrGLDeleteFramebuffersProc, DeleteFramebuffers); GR_GET_PROC(GrGLDeleteRenderbuffersProc, DeleteRenderbuffers); GR_GET_PROC(GrGLFramebufferRenderbufferProc, FramebufferRenderbuffer); GR_GET_PROC(GrGLFramebufferTexture2DProc, FramebufferTexture2D); GR_GET_PROC(GrGLGenFramebuffersProc, GenFramebuffers); GR_GET_PROC(GrGLGenRenderbuffersProc, GenRenderbuffers); GR_GET_PROC(GrGLGetFramebufferAttachmentParameterivProc, GetFramebufferAttachmentParameteriv); GR_GET_PROC(GrGLGetRenderbufferParameterivProc, GetRenderbufferParameteriv); GR_GET_PROC(GrGLRenderbufferStorageProc, RenderbufferStorage); interface->fMapBuffer = (PFNGLMAPBUFFEROESPROC) eglGetProcAddress("glMapBufferOES"); interface->fUnmapBuffer = (PFNGLUNMAPBUFFEROESPROC) eglGetProcAddress("glUnmapBufferOES"); } glInterface.get()->ref(); return glInterface.get(); }