1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/gfx/skia/trunk/src/gpu/gl/angle/GrGLCreateANGLEInterface.cpp Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,167 @@ 1.4 + 1.5 +/* 1.6 + * Copyright 2012 Google Inc. 1.7 + * 1.8 + * Use of this source code is governed by a BSD-style license that can be 1.9 + * found in the LICENSE file. 1.10 + */ 1.11 + 1.12 + 1.13 +#include "gl/GrGLInterface.h" 1.14 + 1.15 +#ifndef GL_GLEXT_PROTOTYPES 1.16 +#define GL_GLEXT_PROTOTYPES 1.17 +#endif 1.18 + 1.19 +#include "GLES2/gl2.h" 1.20 +#include "GLES2/gl2ext.h" 1.21 +#include "EGL/egl.h" 1.22 + 1.23 +#define GET_PROC(name) \ 1.24 + interface->fFunctions.f ## name = (GrGL ## name ## Proc) GetProcAddress(ghANGLELib, "gl" #name); 1.25 + 1.26 +const GrGLInterface* GrGLCreateANGLEInterface() { 1.27 + 1.28 + static HMODULE ghANGLELib = NULL; 1.29 + 1.30 + if (NULL == ghANGLELib) { 1.31 + // We load the ANGLE library and never let it go 1.32 + ghANGLELib = LoadLibrary("libGLESv2.dll"); 1.33 + } 1.34 + if (NULL == ghANGLELib) { 1.35 + // We can't setup the interface correctly w/o the DLL 1.36 + return NULL; 1.37 + } 1.38 + 1.39 + GrGLInterface* interface = SkNEW(GrGLInterface); 1.40 + interface->fStandard = kGLES_GrGLStandard; 1.41 + 1.42 + GrGLInterface::Functions* functions = &interface->fFunctions; 1.43 + 1.44 + GET_PROC(ActiveTexture); 1.45 + GET_PROC(AttachShader); 1.46 + GET_PROC(BindAttribLocation); 1.47 + GET_PROC(BindBuffer); 1.48 + GET_PROC(BindTexture); 1.49 + functions->fBindVertexArray = 1.50 + (GrGLBindVertexArrayProc) eglGetProcAddress("glBindVertexArrayOES"); 1.51 + GET_PROC(BlendColor); 1.52 + GET_PROC(BlendFunc); 1.53 + GET_PROC(BufferData); 1.54 + GET_PROC(BufferSubData); 1.55 + GET_PROC(Clear); 1.56 + GET_PROC(ClearColor); 1.57 + GET_PROC(ClearStencil); 1.58 + GET_PROC(ColorMask); 1.59 + GET_PROC(CompileShader); 1.60 + GET_PROC(CompressedTexImage2D); 1.61 + GET_PROC(CopyTexSubImage2D); 1.62 + GET_PROC(CreateProgram); 1.63 + GET_PROC(CreateShader); 1.64 + GET_PROC(CullFace); 1.65 + GET_PROC(DeleteBuffers); 1.66 + GET_PROC(DeleteProgram); 1.67 + GET_PROC(DeleteShader); 1.68 + GET_PROC(DeleteTextures); 1.69 + functions->fDeleteVertexArrays = 1.70 + (GrGLDeleteVertexArraysProc) eglGetProcAddress("glDeleteVertexArraysOES"); 1.71 + GET_PROC(DepthMask); 1.72 + GET_PROC(Disable); 1.73 + GET_PROC(DisableVertexAttribArray); 1.74 + GET_PROC(DrawArrays); 1.75 + GET_PROC(DrawElements); 1.76 + GET_PROC(Enable); 1.77 + GET_PROC(EnableVertexAttribArray); 1.78 + GET_PROC(Finish); 1.79 + GET_PROC(Flush); 1.80 + GET_PROC(FrontFace); 1.81 + GET_PROC(GenBuffers); 1.82 + GET_PROC(GenerateMipmap); 1.83 + GET_PROC(GenTextures); 1.84 + functions->fGenVertexArrays = 1.85 + (GrGLGenVertexArraysProc) eglGetProcAddress("glGenVertexArraysOES"); 1.86 + GET_PROC(GetBufferParameteriv); 1.87 + GET_PROC(GetError); 1.88 + GET_PROC(GetIntegerv); 1.89 + GET_PROC(GetProgramInfoLog); 1.90 + GET_PROC(GetProgramiv); 1.91 + GET_PROC(GetShaderInfoLog); 1.92 + GET_PROC(GetShaderiv); 1.93 + GET_PROC(GetString); 1.94 + GET_PROC(GetUniformLocation); 1.95 + GET_PROC(LineWidth); 1.96 + GET_PROC(LinkProgram); 1.97 + GET_PROC(PixelStorei); 1.98 + GET_PROC(ReadPixels); 1.99 + GET_PROC(Scissor); 1.100 + GET_PROC(ShaderSource); 1.101 + GET_PROC(StencilFunc); 1.102 + GET_PROC(StencilFuncSeparate); 1.103 + GET_PROC(StencilMask); 1.104 + GET_PROC(StencilMaskSeparate); 1.105 + GET_PROC(StencilOp); 1.106 + GET_PROC(StencilOpSeparate); 1.107 + GET_PROC(TexImage2D); 1.108 + GET_PROC(TexParameteri); 1.109 + GET_PROC(TexParameteriv); 1.110 + GET_PROC(TexSubImage2D); 1.111 +#if GL_ARB_texture_storage 1.112 + GET_PROC(TexStorage2D); 1.113 +#elif GL_EXT_texture_storage 1.114 + functions->fTexStorage2D = (GrGLTexStorage2DProc) eglGetProcAddress("glTexStorage2DEXT"); 1.115 +#endif 1.116 + GET_PROC(Uniform1f); 1.117 + GET_PROC(Uniform1i); 1.118 + GET_PROC(Uniform1fv); 1.119 + GET_PROC(Uniform1iv); 1.120 + 1.121 + GET_PROC(Uniform2f); 1.122 + GET_PROC(Uniform2i); 1.123 + GET_PROC(Uniform2fv); 1.124 + GET_PROC(Uniform2iv); 1.125 + 1.126 + GET_PROC(Uniform3f); 1.127 + GET_PROC(Uniform3i); 1.128 + GET_PROC(Uniform3fv); 1.129 + GET_PROC(Uniform3iv); 1.130 + 1.131 + GET_PROC(Uniform4f); 1.132 + GET_PROC(Uniform4i); 1.133 + GET_PROC(Uniform4fv); 1.134 + GET_PROC(Uniform4iv); 1.135 + 1.136 + GET_PROC(UniformMatrix2fv); 1.137 + GET_PROC(UniformMatrix3fv); 1.138 + GET_PROC(UniformMatrix4fv); 1.139 + GET_PROC(UseProgram); 1.140 + GET_PROC(VertexAttrib4fv); 1.141 + GET_PROC(VertexAttribPointer); 1.142 + GET_PROC(Viewport); 1.143 + GET_PROC(BindFramebuffer); 1.144 + GET_PROC(BindRenderbuffer); 1.145 + GET_PROC(CheckFramebufferStatus); 1.146 + GET_PROC(DeleteFramebuffers); 1.147 + GET_PROC(DeleteRenderbuffers); 1.148 + GET_PROC(FramebufferRenderbuffer); 1.149 + GET_PROC(FramebufferTexture2D); 1.150 + GET_PROC(GenFramebuffers); 1.151 + GET_PROC(GenRenderbuffers); 1.152 + GET_PROC(GetFramebufferAttachmentParameteriv); 1.153 + GET_PROC(GetRenderbufferParameteriv); 1.154 + GET_PROC(RenderbufferStorage); 1.155 + 1.156 + functions->fMapBuffer = (GrGLMapBufferProc) eglGetProcAddress("glMapBufferOES"); 1.157 + functions->fUnmapBuffer = (GrGLUnmapBufferProc) eglGetProcAddress("glUnmapBufferOES"); 1.158 + 1.159 +#if GL_EXT_debug_marker 1.160 + functions->fInsertEventMarker = (GrGLInsertEventMarkerProc) eglGetProcAddress("glInsertEventMarkerEXT"); 1.161 + functions->fPushGroupMarker = (GrGLInsertEventMarkerProc) eglGetProcAddress("glPushGroupMarkerEXT"); 1.162 + functions->fPopGroupMarker = (GrGLPopGroupMarkerProc) eglGetProcAddress("glPopGropuMarkerEXT"); 1.163 +#endif 1.164 + 1.165 + interface->fExtensions.init(kGLES_GrGLStandard, 1.166 + interface->fFunctions.fGetString, 1.167 + interface->fFunctions.fGetStringi, 1.168 + interface->fFunctions.fGetIntegerv); 1.169 + return interface; 1.170 +}