1 2 /* 3 * Copyright 2012 Google Inc. 4 * 5 * Use of this source code is governed by a BSD-style license that can be 6 * found in the LICENSE file. 7 */ 8 9 10 #include "gl/GrGLInterface.h" 11 12 #ifndef GL_GLEXT_PROTOTYPES 13 #define GL_GLEXT_PROTOTYPES 14 #endif 15 16 #include "GLES2/gl2.h" 17 #include "GLES2/gl2ext.h" 18 #include "EGL/egl.h" 19 20 #define GR_GET_PROC(procType, baseName) \ 21 interface->f ## baseName = (procType) GetProcAddress(ghANGLELib, "gl" #baseName); 22 23 const GrGLInterface* GrGLCreateANGLEInterface() { 24 25 static SkAutoTUnref<GrGLInterface> glInterface; 26 static HMODULE ghANGLELib = NULL; 27 28 if (NULL == ghANGLELib) { 29 // We load the ANGLE library and never let it go 30 ghANGLELib = LoadLibrary("libGLESv2.dll"); 31 } 32 if (NULL == ghANGLELib) { 33 // We can't setup the interface correctly w/o the DLL 34 return NULL; 35 } 36 37 if (!glInterface.get()) { 38 GrGLInterface* interface = new GrGLInterface; 39 glInterface.reset(interface); 40 interface->fBindingsExported = kES2_GrGLBinding; 41 42 GR_GET_PROC(GrGLActiveTextureProc, ActiveTexture); 43 GR_GET_PROC(GrGLAttachShaderProc, AttachShader); 44 GR_GET_PROC(GrGLBindAttribLocationProc, BindAttribLocation); 45 GR_GET_PROC(GrGLBindBufferProc, BindBuffer); 46 GR_GET_PROC(GrGLBindTextureProc, BindTexture); 47 GR_GET_PROC(GrGLBlendColorProc, BlendColor); 48 GR_GET_PROC(GrGLBlendFuncProc, BlendFunc); 49 GR_GET_PROC(GrGLBufferDataProc, BufferData); 50 GR_GET_PROC(GrGLBufferSubDataProc, BufferSubData); 51 GR_GET_PROC(GrGLClearProc, Clear); 52 GR_GET_PROC(GrGLClearColorProc, ClearColor); 53 GR_GET_PROC(GrGLClearStencilProc, ClearStencil); 54 GR_GET_PROC(GrGLColorMaskProc, ColorMask); 55 GR_GET_PROC(GrGLCompileShaderProc, CompileShader); 56 GR_GET_PROC(GrGLCompressedTexImage2DProc, CompressedTexImage2D); 57 GR_GET_PROC(GrGLCreateProgramProc, CreateProgram); 58 GR_GET_PROC(GrGLCreateShaderProc, CreateShader); 59 GR_GET_PROC(GrGLCullFaceProc, CullFace); 60 GR_GET_PROC(GrGLDeleteBuffersProc, DeleteBuffers); 61 GR_GET_PROC(GrGLDeleteProgramProc, DeleteProgram); 62 GR_GET_PROC(GrGLDeleteShaderProc, DeleteShader); 63 GR_GET_PROC(GrGLDeleteTexturesProc, DeleteTextures); 64 GR_GET_PROC(GrGLDepthMaskProc, DepthMask); 65 GR_GET_PROC(GrGLDisableProc, Disable); 66 GR_GET_PROC(GrGLDisableVertexAttribArrayProc, DisableVertexAttribArray); 67 GR_GET_PROC(GrGLDrawArraysProc, DrawArrays); 68 GR_GET_PROC(GrGLDrawElementsProc, DrawElements); 69 GR_GET_PROC(GrGLEnableProc, Enable); 70 GR_GET_PROC(GrGLEnableVertexAttribArrayProc, EnableVertexAttribArray); 71 GR_GET_PROC(GrGLFinishProc, Finish); 72 GR_GET_PROC(GrGLFlushProc, Flush); 73 GR_GET_PROC(GrGLFrontFaceProc, FrontFace); 74 GR_GET_PROC(GrGLGenBuffersProc, GenBuffers); 75 GR_GET_PROC(GrGLGenTexturesProc, GenTextures); 76 GR_GET_PROC(GrGLGetBufferParameterivProc, GetBufferParameteriv); 77 GR_GET_PROC(GrGLGetErrorProc, GetError); 78 GR_GET_PROC(GrGLGetIntegervProc, GetIntegerv); 79 GR_GET_PROC(GrGLGetProgramInfoLogProc, GetProgramInfoLog); 80 GR_GET_PROC(GrGLGetProgramivProc, GetProgramiv); 81 GR_GET_PROC(GrGLGetShaderInfoLogProc, GetShaderInfoLog); 82 GR_GET_PROC(GrGLGetShaderivProc, GetShaderiv); 83 GR_GET_PROC(GrGLGetStringProc, GetString); 84 GR_GET_PROC(GrGLGetUniformLocationProc, GetUniformLocation); 85 GR_GET_PROC(GrGLLineWidthProc, LineWidth); 86 GR_GET_PROC(GrGLLinkProgramProc, LinkProgram); 87 GR_GET_PROC(GrGLPixelStoreiProc, PixelStorei); 88 GR_GET_PROC(GrGLReadPixelsProc, ReadPixels); 89 GR_GET_PROC(GrGLScissorProc, Scissor); 90 GR_GET_PROC(GrGLShaderSourceProc, ShaderSource); 91 GR_GET_PROC(GrGLStencilFuncProc, StencilFunc); 92 GR_GET_PROC(GrGLStencilFuncSeparateProc, StencilFuncSeparate); 93 GR_GET_PROC(GrGLStencilMaskProc, StencilMask); 94 GR_GET_PROC(GrGLStencilMaskSeparateProc, StencilMaskSeparate); 95 GR_GET_PROC(GrGLStencilOpProc, StencilOp); 96 GR_GET_PROC(GrGLStencilOpSeparateProc, StencilOpSeparate); 97 GR_GET_PROC(GrGLTexImage2DProc, TexImage2D); 98 GR_GET_PROC(GrGLTexParameteriProc, TexParameteri); 99 GR_GET_PROC(GrGLTexParameterivProc, TexParameteriv); 100 GR_GET_PROC(GrGLTexSubImage2DProc, TexSubImage2D); 101 #if GL_ARB_texture_storage 102 GR_GET_PROC(GrGLTexStorage2DProc, TexStorage2D); 103 #elif GL_EXT_texture_storage 104 interface->fTexStorage2D = (GrGLTexStorage2DProc) 105 GetProcAddress(ghANGLELib, 106 "glTexStorage2DEXT"); 107 #endif 108 GR_GET_PROC(GrGLUniform1fProc, Uniform1f); 109 GR_GET_PROC(GrGLUniform1iProc, Uniform1i); 110 GR_GET_PROC(GrGLUniform1fvProc, Uniform1fv); 111 GR_GET_PROC(GrGLUniform1ivProc, Uniform1iv); 112 113 GR_GET_PROC(GrGLUniform2fProc, Uniform2f); 114 GR_GET_PROC(GrGLUniform2iProc, Uniform2i); 115 GR_GET_PROC(GrGLUniform2fvProc, Uniform2fv); 116 GR_GET_PROC(GrGLUniform2ivProc, Uniform2iv); 117 118 GR_GET_PROC(GrGLUniform3fProc, Uniform3f); 119 GR_GET_PROC(GrGLUniform3iProc, Uniform3i); 120 GR_GET_PROC(GrGLUniform3fvProc, Uniform3fv); 121 GR_GET_PROC(GrGLUniform3ivProc, Uniform3iv); 122 123 GR_GET_PROC(GrGLUniform4fProc, Uniform4f); 124 GR_GET_PROC(GrGLUniform4iProc, Uniform4i); 125 GR_GET_PROC(GrGLUniform4fvProc, Uniform4fv); 126 GR_GET_PROC(GrGLUniform4ivProc, Uniform4iv); 127 128 GR_GET_PROC(GrGLUniformMatrix2fvProc, UniformMatrix2fv); 129 GR_GET_PROC(GrGLUniformMatrix3fvProc, UniformMatrix3fv); 130 GR_GET_PROC(GrGLUniformMatrix4fvProc, UniformMatrix4fv); 131 GR_GET_PROC(GrGLUseProgramProc, UseProgram); 132 GR_GET_PROC(GrGLVertexAttrib4fvProc, VertexAttrib4fv); 133 GR_GET_PROC(GrGLVertexAttribPointerProc, VertexAttribPointer); 134 GR_GET_PROC(GrGLViewportProc, Viewport); 135 GR_GET_PROC(GrGLBindFramebufferProc, BindFramebuffer); 136 GR_GET_PROC(GrGLBindRenderbufferProc, BindRenderbuffer); 137 GR_GET_PROC(GrGLCheckFramebufferStatusProc, CheckFramebufferStatus); 138 GR_GET_PROC(GrGLDeleteFramebuffersProc, DeleteFramebuffers); 139 GR_GET_PROC(GrGLDeleteRenderbuffersProc, DeleteRenderbuffers); 140 GR_GET_PROC(GrGLFramebufferRenderbufferProc, FramebufferRenderbuffer); 141 GR_GET_PROC(GrGLFramebufferTexture2DProc, FramebufferTexture2D); 142 GR_GET_PROC(GrGLGenFramebuffersProc, GenFramebuffers); 143 GR_GET_PROC(GrGLGenRenderbuffersProc, GenRenderbuffers); 144 GR_GET_PROC(GrGLGetFramebufferAttachmentParameterivProc, 145 GetFramebufferAttachmentParameteriv); 146 GR_GET_PROC(GrGLGetRenderbufferParameterivProc, 147 GetRenderbufferParameteriv); 148 GR_GET_PROC(GrGLRenderbufferStorageProc, RenderbufferStorage); 149 150 interface->fMapBuffer = (PFNGLMAPBUFFEROESPROC) eglGetProcAddress("glMapBufferOES"); 151 interface->fUnmapBuffer = (PFNGLUNMAPBUFFEROESPROC) eglGetProcAddress("glUnmapBufferOES"); 152 } 153 glInterface.get()->ref(); 154 return glInterface.get(); 155 } 156