1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/gfx/skia/trunk/src/gpu/gl/android/GrGLCreateNativeInterface_android.cpp Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,427 @@ 1.4 +// Modified from chromium/src/webkit/glue/gl_bindings_skia_cmd_buffer.cc 1.5 + 1.6 +// Copyright (c) 2011 The Chromium Authors. All rights reserved. 1.7 +// Use of this source code is governed by a BSD-style license that can be 1.8 +// found in the LICENSE file. 1.9 + 1.10 +#include "gl/GrGLExtensions.h" 1.11 +#include "gl/GrGLInterface.h" 1.12 +#include "gl/GrGLUtil.h" 1.13 + 1.14 +#ifndef GL_GLEXT_PROTOTYPES 1.15 +#define GL_GLEXT_PROTOTYPES 1.16 +#endif 1.17 + 1.18 +#include <GLES2/gl2.h> 1.19 +#include <GLES2/gl2ext.h> 1.20 + 1.21 +#include <EGL/egl.h> 1.22 + 1.23 +static GrGLInterface* create_es_interface(GrGLVersion version, 1.24 + const GrGLExtensions& extensions) { 1.25 + if (version < GR_GL_VER(2,0)) { 1.26 + return NULL; 1.27 + } 1.28 + 1.29 + GrGLInterface* interface = SkNEW(GrGLInterface); 1.30 + interface->fStandard = kGLES_GrGLStandard; 1.31 + GrGLInterface::Functions* functions = &interface->fFunctions; 1.32 + 1.33 + functions->fActiveTexture = glActiveTexture; 1.34 + functions->fAttachShader = glAttachShader; 1.35 + functions->fBindAttribLocation = glBindAttribLocation; 1.36 + functions->fBindBuffer = glBindBuffer; 1.37 + functions->fBindTexture = glBindTexture; 1.38 + functions->fBindVertexArray = glBindVertexArrayOES; 1.39 + functions->fBlendColor = glBlendColor; 1.40 + functions->fBlendFunc = glBlendFunc; 1.41 + functions->fBufferData = glBufferData; 1.42 + functions->fBufferSubData = glBufferSubData; 1.43 + functions->fClear = glClear; 1.44 + functions->fClearColor = glClearColor; 1.45 + functions->fClearStencil = glClearStencil; 1.46 + functions->fColorMask = glColorMask; 1.47 + functions->fCompileShader = glCompileShader; 1.48 + functions->fCompressedTexImage2D = glCompressedTexImage2D; 1.49 + functions->fCopyTexSubImage2D = glCopyTexSubImage2D; 1.50 + functions->fCreateProgram = glCreateProgram; 1.51 + functions->fCreateShader = glCreateShader; 1.52 + functions->fCullFace = glCullFace; 1.53 + functions->fDeleteBuffers = glDeleteBuffers; 1.54 + functions->fDeleteProgram = glDeleteProgram; 1.55 + functions->fDeleteShader = glDeleteShader; 1.56 + functions->fDeleteTextures = glDeleteTextures; 1.57 + functions->fDeleteVertexArrays = glDeleteVertexArraysOES; 1.58 + functions->fDepthMask = glDepthMask; 1.59 + functions->fDisable = glDisable; 1.60 + functions->fDisableVertexAttribArray = glDisableVertexAttribArray; 1.61 + functions->fDrawArrays = glDrawArrays; 1.62 + functions->fDrawElements = glDrawElements; 1.63 + functions->fEnable = glEnable; 1.64 + functions->fEnableVertexAttribArray = glEnableVertexAttribArray; 1.65 + functions->fFinish = glFinish; 1.66 + functions->fFlush = glFlush; 1.67 + functions->fFrontFace = glFrontFace; 1.68 + functions->fGenBuffers = glGenBuffers; 1.69 + functions->fGenerateMipmap = glGenerateMipmap; 1.70 + functions->fGenTextures = glGenTextures; 1.71 + functions->fGenVertexArrays = glGenVertexArraysOES; 1.72 + functions->fGetBufferParameteriv = glGetBufferParameteriv; 1.73 + functions->fGetError = glGetError; 1.74 + functions->fGetIntegerv = glGetIntegerv; 1.75 + functions->fGetProgramInfoLog = glGetProgramInfoLog; 1.76 + functions->fGetProgramiv = glGetProgramiv; 1.77 + functions->fGetShaderInfoLog = glGetShaderInfoLog; 1.78 + functions->fGetShaderiv = glGetShaderiv; 1.79 + functions->fGetString = glGetString; 1.80 +#if GL_ES_VERSION_30 1.81 + functions->fGetStringi = glGetStringi; 1.82 +#else 1.83 + functions->fGetStringi = (GrGLGetStringiProc) eglGetProcAddress("glGetStringi"); 1.84 +#endif 1.85 + functions->fGetUniformLocation = glGetUniformLocation; 1.86 + functions->fLineWidth = glLineWidth; 1.87 + functions->fLinkProgram = glLinkProgram; 1.88 + functions->fPixelStorei = glPixelStorei; 1.89 + functions->fReadPixels = glReadPixels; 1.90 + functions->fScissor = glScissor; 1.91 +#if GR_GL_USE_NEW_SHADER_SOURCE_SIGNATURE 1.92 + functions->fShaderSource = (GrGLShaderSourceProc) glShaderSource; 1.93 +#else 1.94 + functions->fShaderSource = glShaderSource; 1.95 +#endif 1.96 + functions->fStencilFunc = glStencilFunc; 1.97 + functions->fStencilFuncSeparate = glStencilFuncSeparate; 1.98 + functions->fStencilMask = glStencilMask; 1.99 + functions->fStencilMaskSeparate = glStencilMaskSeparate; 1.100 + functions->fStencilOp = glStencilOp; 1.101 + functions->fStencilOpSeparate = glStencilOpSeparate; 1.102 + functions->fTexImage2D = glTexImage2D; 1.103 + functions->fTexParameteri = glTexParameteri; 1.104 + functions->fTexParameteriv = glTexParameteriv; 1.105 + functions->fTexSubImage2D = glTexSubImage2D; 1.106 + 1.107 + if (version >= GR_GL_VER(3,0)) { 1.108 +#if GL_ES_VERSION_3_0 1.109 + functions->fTexStorage2D = glTexStorage2D; 1.110 +#else 1.111 + functions->fTexStorage2D = (GrGLTexStorage2DProc) eglGetProcAddress("glTexStorage2D"); 1.112 +#endif 1.113 + } else { 1.114 +#if GL_EXT_texture_storage 1.115 + functions->fTexStorage2D = glTexStorage2DEXT; 1.116 +#else 1.117 + functions->fTexStorage2D = (GrGLTexStorage2DProc) eglGetProcAddress("glTexStorage2DEXT"); 1.118 +#endif 1.119 + } 1.120 + 1.121 +#if GL_EXT_discard_framebuffer 1.122 + functions->fDiscardFramebuffer = glDiscardFramebufferEXT; 1.123 +#endif 1.124 + functions->fUniform1f = glUniform1f; 1.125 + functions->fUniform1i = glUniform1i; 1.126 + functions->fUniform1fv = glUniform1fv; 1.127 + functions->fUniform1iv = glUniform1iv; 1.128 + functions->fUniform2f = glUniform2f; 1.129 + functions->fUniform2i = glUniform2i; 1.130 + functions->fUniform2fv = glUniform2fv; 1.131 + functions->fUniform2iv = glUniform2iv; 1.132 + functions->fUniform3f = glUniform3f; 1.133 + functions->fUniform3i = glUniform3i; 1.134 + functions->fUniform3fv = glUniform3fv; 1.135 + functions->fUniform3iv = glUniform3iv; 1.136 + functions->fUniform4f = glUniform4f; 1.137 + functions->fUniform4i = glUniform4i; 1.138 + functions->fUniform4fv = glUniform4fv; 1.139 + functions->fUniform4iv = glUniform4iv; 1.140 + functions->fUniformMatrix2fv = glUniformMatrix2fv; 1.141 + functions->fUniformMatrix3fv = glUniformMatrix3fv; 1.142 + functions->fUniformMatrix4fv = glUniformMatrix4fv; 1.143 + functions->fUseProgram = glUseProgram; 1.144 + functions->fVertexAttrib4fv = glVertexAttrib4fv; 1.145 + functions->fVertexAttribPointer = glVertexAttribPointer; 1.146 + functions->fViewport = glViewport; 1.147 + functions->fBindFramebuffer = glBindFramebuffer; 1.148 + functions->fBindRenderbuffer = glBindRenderbuffer; 1.149 + functions->fCheckFramebufferStatus = glCheckFramebufferStatus; 1.150 + functions->fDeleteFramebuffers = glDeleteFramebuffers; 1.151 + functions->fDeleteRenderbuffers = glDeleteRenderbuffers; 1.152 + functions->fFramebufferRenderbuffer = glFramebufferRenderbuffer; 1.153 + functions->fFramebufferTexture2D = glFramebufferTexture2D; 1.154 + 1.155 + if (version >= GR_GL_VER(3,0)) { 1.156 +#if GL_ES_VERSION_3_0 1.157 + functions->fRenderbufferStorageMultisample = glRenderbufferStorageMultisample; 1.158 + functions->fBlitFramebuffer = glBlitFramebuffer; 1.159 +#else 1.160 + functions->fRenderbufferStorageMultisample = (GrGLRenderbufferStorageMultisampleProc) eglGetProcAddress("glRenderbufferStorageMultisample"); 1.161 + functions->fBlitFramebuffer = (GrGLBlitFramebufferProc) eglGetProcAddress("glBlitFramebuffer"); 1.162 +#endif 1.163 + } 1.164 + 1.165 + if (extensions.has("GL_EXT_multisampled_render_to_texture")) { 1.166 +#if GL_EXT_multisampled_render_to_texture 1.167 + functions->fFramebufferTexture2DMultisample = glFramebufferTexture2DMultisampleEXT; 1.168 + functions->fRenderbufferStorageMultisampleES2EXT = glRenderbufferStorageMultisampleEXT; 1.169 +#else 1.170 + functions->fFramebufferTexture2DMultisample = (GrGLFramebufferTexture2DMultisampleProc) eglGetProcAddress("glFramebufferTexture2DMultisampleEXT"); 1.171 + functions->fRenderbufferStorageMultisampleES2EXT = (GrGLRenderbufferStorageMultisampleProc) eglGetProcAddress("glRenderbufferStorageMultisampleEXT"); 1.172 +#endif 1.173 + } else if (extensions.has("GL_IMG_multisampled_render_to_texture")) { 1.174 +#if GL_IMG_multisampled_render_to_texture 1.175 + functions->fFramebufferTexture2DMultisample = glFramebufferTexture2DMultisampleIMG; 1.176 + functions->fRenderbufferStorageMultisampleES2EXT = glRenderbufferStorageMultisampleIMG; 1.177 +#else 1.178 + functions->fFramebufferTexture2DMultisample = (GrGLFramebufferTexture2DMultisampleProc) eglGetProcAddress("glFramebufferTexture2DMultisampleIMG"); 1.179 + functions->fRenderbufferStorageMultisampleES2EXT = (GrGLRenderbufferStorageMultisampleProc) eglGetProcAddress("glRenderbufferStorageMultisampleIMG"); 1.180 +#endif 1.181 + } 1.182 + 1.183 + functions->fGenFramebuffers = glGenFramebuffers; 1.184 + functions->fGenRenderbuffers = glGenRenderbuffers; 1.185 + functions->fGetFramebufferAttachmentParameteriv = glGetFramebufferAttachmentParameteriv; 1.186 + functions->fGetRenderbufferParameteriv = glGetRenderbufferParameteriv; 1.187 + functions->fRenderbufferStorage = glRenderbufferStorage; 1.188 +#if GL_OES_mapbuffer 1.189 + functions->fMapBuffer = glMapBufferOES; 1.190 + functions->fUnmapBuffer = glUnmapBufferOES; 1.191 +#else 1.192 + functions->fMapBuffer = (GrGLMapBufferProc) eglGetProcAddress("glMapBufferOES"); 1.193 + functions->fUnmapBuffer = (GrGLUnmapBufferProc) eglGetProcAddress("glUnmapBufferOES"); 1.194 +#endif 1.195 + 1.196 + if (extensions.has("GL_EXT_debug_marker")) { 1.197 + functions->fInsertEventMarker = (GrGLInsertEventMarkerProc) eglGetProcAddress("glInsertEventMarkerEXT"); 1.198 + functions->fPushGroupMarker = (GrGLInsertEventMarkerProc) eglGetProcAddress("glPushGroupMarkerEXT"); 1.199 + functions->fPopGroupMarker = (GrGLPopGroupMarkerProc) eglGetProcAddress("glPopGropuMarkerEXT"); 1.200 + } 1.201 + 1.202 + return interface; 1.203 +} 1.204 + 1.205 +static GrGLInterface* create_desktop_interface(GrGLVersion version, 1.206 + const GrGLExtensions& extensions) { 1.207 + // Currently this assumes a 4.4 context or later. Supporting lower GL versions would require 1.208 + // getting suffixed versions of pointers for supported extensions. 1.209 + if (version < GR_GL_VER(4,4)) { 1.210 + return NULL; 1.211 + } 1.212 + 1.213 + GrGLInterface* interface = SkNEW(GrGLInterface); 1.214 + interface->fStandard = kGL_GrGLStandard; 1.215 + GrGLInterface::Functions* functions = &interface->fFunctions; 1.216 + 1.217 + functions->fActiveTexture = (GrGLActiveTextureProc) eglGetProcAddress("glActiveTexture"); 1.218 + functions->fAttachShader = (GrGLAttachShaderProc) eglGetProcAddress("glAttachShader"); 1.219 + functions->fBeginQuery = (GrGLBeginQueryProc) eglGetProcAddress("glBeginQuery"); 1.220 + functions->fBindAttribLocation = (GrGLBindAttribLocationProc) eglGetProcAddress("glBindAttribLocation"); 1.221 + functions->fBindBuffer = (GrGLBindBufferProc) eglGetProcAddress("glBindBuffer"); 1.222 + functions->fBindFragDataLocation = (GrGLBindFragDataLocationProc) eglGetProcAddress("glBindFragDataLocation"); 1.223 + functions->fBindFragDataLocationIndexed = (GrGLBindFragDataLocationIndexedProc) eglGetProcAddress("glBindFragDataLocationIndexed"); 1.224 + functions->fBindFramebuffer = (GrGLBindFramebufferProc) eglGetProcAddress("glBindFramebuffer"); 1.225 + functions->fBindRenderbuffer = (GrGLBindRenderbufferProc) eglGetProcAddress("glBindRenderbuffer"); 1.226 + functions->fBindTexture = (GrGLBindTextureProc) eglGetProcAddress("glBindTexture"); 1.227 + functions->fBindVertexArray = (GrGLBindVertexArrayProc) eglGetProcAddress("glBindVertexArray"); 1.228 + functions->fBlendColor = (GrGLBlendColorProc) eglGetProcAddress("glBlendColor"); 1.229 + functions->fBlendFunc = (GrGLBlendFuncProc) eglGetProcAddress("glBlendFunc"); 1.230 + functions->fBlitFramebuffer = (GrGLBlitFramebufferProc) eglGetProcAddress("glBlitFramebuffer"); 1.231 + functions->fBufferData = (GrGLBufferDataProc) eglGetProcAddress("glBufferData"); 1.232 + functions->fBufferSubData = (GrGLBufferSubDataProc) eglGetProcAddress("glBufferSubData"); 1.233 + functions->fCheckFramebufferStatus = (GrGLCheckFramebufferStatusProc) eglGetProcAddress("glCheckFramebufferStatus"); 1.234 + functions->fClear = (GrGLClearProc) eglGetProcAddress("glClear"); 1.235 + functions->fClearColor = (GrGLClearColorProc) eglGetProcAddress("glClearColor"); 1.236 + functions->fClearStencil = (GrGLClearStencilProc) eglGetProcAddress("glClearStencil"); 1.237 + functions->fColorMask = (GrGLColorMaskProc) eglGetProcAddress("glColorMask"); 1.238 + functions->fCompileShader = (GrGLCompileShaderProc) eglGetProcAddress("glCompileShader"); 1.239 + functions->fCompressedTexImage2D = (GrGLCompressedTexImage2DProc) eglGetProcAddress("glCompressedTexImage2D"); 1.240 + functions->fCopyTexSubImage2D = (GrGLCopyTexSubImage2DProc) eglGetProcAddress("glCopyTexSubImage2D"); 1.241 + functions->fCreateProgram = (GrGLCreateProgramProc) eglGetProcAddress("glCreateProgram"); 1.242 + functions->fCreateShader = (GrGLCreateShaderProc) eglGetProcAddress("glCreateShader"); 1.243 + functions->fCullFace = (GrGLCullFaceProc) eglGetProcAddress("glCullFace"); 1.244 + functions->fDeleteBuffers = (GrGLDeleteBuffersProc) eglGetProcAddress("glDeleteBuffers"); 1.245 + functions->fDeleteFramebuffers = (GrGLDeleteFramebuffersProc) eglGetProcAddress("glDeleteFramebuffers"); 1.246 + functions->fDeleteProgram = (GrGLDeleteProgramProc) eglGetProcAddress("glDeleteProgram"); 1.247 + functions->fDeleteQueries = (GrGLDeleteQueriesProc) eglGetProcAddress("glDeleteQueries"); 1.248 + functions->fDeleteRenderbuffers = (GrGLDeleteRenderbuffersProc) eglGetProcAddress("glDeleteRenderbuffers"); 1.249 + functions->fDeleteShader = (GrGLDeleteShaderProc) eglGetProcAddress("glDeleteShader"); 1.250 + functions->fDeleteTextures = (GrGLDeleteTexturesProc) eglGetProcAddress("glDeleteTextures"); 1.251 + functions->fDeleteVertexArrays = (GrGLDeleteVertexArraysProc) eglGetProcAddress("glDeleteVertexArrays"); 1.252 + functions->fDepthMask = (GrGLDepthMaskProc) eglGetProcAddress("glDepthMask"); 1.253 + functions->fDisable = (GrGLDisableProc) eglGetProcAddress("glDisable"); 1.254 + functions->fDisableVertexAttribArray = (GrGLDisableVertexAttribArrayProc) eglGetProcAddress("glDisableVertexAttribArray"); 1.255 + functions->fDrawArrays = (GrGLDrawArraysProc) eglGetProcAddress("glDrawArrays"); 1.256 + functions->fDrawBuffer = (GrGLDrawBufferProc) eglGetProcAddress("glDrawBuffer"); 1.257 + functions->fDrawBuffers = (GrGLDrawBuffersProc) eglGetProcAddress("glDrawBuffers"); 1.258 + functions->fDrawElements = (GrGLDrawElementsProc) eglGetProcAddress("glDrawElements"); 1.259 + functions->fEnable = (GrGLEnableProc) eglGetProcAddress("glEnable"); 1.260 + functions->fEnableVertexAttribArray = (GrGLEnableVertexAttribArrayProc) eglGetProcAddress("glEnableVertexAttribArray"); 1.261 + functions->fEndQuery = (GrGLEndQueryProc) eglGetProcAddress("glEndQuery"); 1.262 + functions->fFinish = (GrGLFinishProc) eglGetProcAddress("glFinish"); 1.263 + functions->fFlush = (GrGLFlushProc) eglGetProcAddress("glFlush"); 1.264 + functions->fFramebufferRenderbuffer = (GrGLFramebufferRenderbufferProc) eglGetProcAddress("glFramebufferRenderbuffer"); 1.265 + functions->fFramebufferTexture2D = (GrGLFramebufferTexture2DProc) eglGetProcAddress("glFramebufferTexture2D"); 1.266 + functions->fFrontFace = (GrGLFrontFaceProc) eglGetProcAddress("glFrontFace"); 1.267 + functions->fGenBuffers = (GrGLGenBuffersProc) eglGetProcAddress("glGenBuffers"); 1.268 + functions->fGenFramebuffers = (GrGLGenFramebuffersProc) eglGetProcAddress("glGenFramebuffers"); 1.269 + functions->fGenerateMipmap = (GrGLGenerateMipmapProc) eglGetProcAddress("glGenerateMipmap"); 1.270 + functions->fGenQueries = (GrGLGenQueriesProc) eglGetProcAddress("glGenQueries"); 1.271 + functions->fGenRenderbuffers = (GrGLGenRenderbuffersProc) eglGetProcAddress("glGenRenderbuffers"); 1.272 + functions->fGenTextures = (GrGLGenTexturesProc) eglGetProcAddress("glGenTextures"); 1.273 + functions->fGenVertexArrays = (GrGLGenVertexArraysProc) eglGetProcAddress("glGenVertexArrays"); 1.274 + functions->fGetBufferParameteriv = (GrGLGetBufferParameterivProc) eglGetProcAddress("glGetBufferParameteriv"); 1.275 + functions->fGetError = (GrGLGetErrorProc) eglGetProcAddress("glGetError"); 1.276 + functions->fGetFramebufferAttachmentParameteriv = (GrGLGetFramebufferAttachmentParameterivProc) eglGetProcAddress("glGetFramebufferAttachmentParameteriv"); 1.277 + functions->fGetIntegerv = (GrGLGetIntegervProc) eglGetProcAddress("glGetIntegerv"); 1.278 + functions->fGetQueryObjecti64v = (GrGLGetQueryObjecti64vProc) eglGetProcAddress("glGetQueryObjecti64v"); 1.279 + functions->fGetQueryObjectiv = (GrGLGetQueryObjectivProc) eglGetProcAddress("glGetQueryObjectiv"); 1.280 + functions->fGetQueryObjectui64v = (GrGLGetQueryObjectui64vProc) eglGetProcAddress("glGetQueryObjectui64v"); 1.281 + functions->fGetQueryObjectuiv = (GrGLGetQueryObjectuivProc) eglGetProcAddress("glGetQueryObjectuiv"); 1.282 + functions->fGetQueryiv = (GrGLGetQueryivProc) eglGetProcAddress("glGetQueryiv"); 1.283 + functions->fGetProgramInfoLog = (GrGLGetProgramInfoLogProc) eglGetProcAddress("glGetProgramInfoLog"); 1.284 + functions->fGetProgramiv = (GrGLGetProgramivProc) eglGetProcAddress("glGetProgramiv"); 1.285 + functions->fGetRenderbufferParameteriv = (GrGLGetRenderbufferParameterivProc) eglGetProcAddress("glGetRenderbufferParameteriv"); 1.286 + functions->fGetShaderInfoLog = (GrGLGetShaderInfoLogProc) eglGetProcAddress("glGetShaderInfoLog"); 1.287 + functions->fGetShaderiv = (GrGLGetShaderivProc) eglGetProcAddress("glGetShaderiv"); 1.288 + functions->fGetString = (GrGLGetStringProc) eglGetProcAddress("glGetString"); 1.289 + functions->fGetStringi = (GrGLGetStringiProc) eglGetProcAddress("glGetStringi"); 1.290 + functions->fGetTexLevelParameteriv = (GrGLGetTexLevelParameterivProc) eglGetProcAddress("glGetTexLevelParameteriv"); 1.291 + functions->fGetUniformLocation = (GrGLGetUniformLocationProc) eglGetProcAddress("glGetUniformLocation"); 1.292 + functions->fLineWidth = (GrGLLineWidthProc) eglGetProcAddress("glLineWidth"); 1.293 + functions->fLinkProgram = (GrGLLinkProgramProc) eglGetProcAddress("glLinkProgram"); 1.294 + functions->fLoadIdentity = (GrGLLoadIdentityProc) eglGetProcAddress("glLoadIdentity"); 1.295 + functions->fLoadMatrixf = (GrGLLoadMatrixfProc) eglGetProcAddress("glLoadMatrixf"); 1.296 + functions->fMapBuffer = (GrGLMapBufferProc) eglGetProcAddress("glMapBuffer"); 1.297 + functions->fMatrixMode = (GrGLMatrixModeProc) eglGetProcAddress("glMatrixMode"); 1.298 + functions->fPixelStorei = (GrGLPixelStoreiProc) eglGetProcAddress("glPixelStorei"); 1.299 + functions->fQueryCounter = (GrGLQueryCounterProc) eglGetProcAddress("glQueryCounter"); 1.300 + functions->fReadBuffer = (GrGLReadBufferProc) eglGetProcAddress("glReadBuffer"); 1.301 + functions->fReadPixels = (GrGLReadPixelsProc) eglGetProcAddress("glReadPixels"); 1.302 + functions->fRenderbufferStorage = (GrGLRenderbufferStorageProc) eglGetProcAddress("glRenderbufferStorage"); 1.303 + functions->fRenderbufferStorageMultisample = (GrGLRenderbufferStorageMultisampleProc) eglGetProcAddress("glRenderbufferStorageMultisample"); 1.304 + functions->fScissor = (GrGLScissorProc) eglGetProcAddress("glScissor"); 1.305 + functions->fShaderSource = (GrGLShaderSourceProc) eglGetProcAddress("glShaderSource"); 1.306 + functions->fStencilFunc = (GrGLStencilFuncProc) eglGetProcAddress("glStencilFunc"); 1.307 + functions->fStencilFuncSeparate = (GrGLStencilFuncSeparateProc) eglGetProcAddress("glStencilFuncSeparate"); 1.308 + functions->fStencilMask = (GrGLStencilMaskProc) eglGetProcAddress("glStencilMask"); 1.309 + functions->fStencilMaskSeparate = (GrGLStencilMaskSeparateProc) eglGetProcAddress("glStencilMaskSeparate"); 1.310 + functions->fStencilOp = (GrGLStencilOpProc) eglGetProcAddress("glStencilOp"); 1.311 + functions->fStencilOpSeparate = (GrGLStencilOpSeparateProc) eglGetProcAddress("glStencilOpSeparate"); 1.312 + functions->fTexGenfv = (GrGLTexGenfvProc) eglGetProcAddress("glTexGenfv"); 1.313 + functions->fTexGeni = (GrGLTexGeniProc) eglGetProcAddress("glTexGeni"); 1.314 + functions->fTexImage2D = (GrGLTexImage2DProc) eglGetProcAddress("glTexImage2D"); 1.315 + functions->fTexParameteri = (GrGLTexParameteriProc) eglGetProcAddress("glTexParameteri"); 1.316 + functions->fTexParameteriv = (GrGLTexParameterivProc) eglGetProcAddress("glTexParameteriv"); 1.317 + functions->fTexSubImage2D = (GrGLTexSubImage2DProc) eglGetProcAddress("glTexSubImage2D"); 1.318 + functions->fTexStorage2D = (GrGLTexStorage2DProc) eglGetProcAddress("glTexStorage2D"); 1.319 + functions->fUniform1f = (GrGLUniform1fProc) eglGetProcAddress("glUniform1f"); 1.320 + functions->fUniform1i = (GrGLUniform1iProc) eglGetProcAddress("glUniform1i"); 1.321 + functions->fUniform1fv = (GrGLUniform1fvProc) eglGetProcAddress("glUniform1fv"); 1.322 + functions->fUniform1iv = (GrGLUniform1ivProc) eglGetProcAddress("glUniform1iv"); 1.323 + functions->fUniform2f = (GrGLUniform2fProc) eglGetProcAddress("glUniform2f"); 1.324 + functions->fUniform2i = (GrGLUniform2iProc) eglGetProcAddress("glUniform2i"); 1.325 + functions->fUniform2fv = (GrGLUniform2fvProc) eglGetProcAddress("glUniform2fv"); 1.326 + functions->fUniform2iv = (GrGLUniform2ivProc) eglGetProcAddress("glUniform2iv"); 1.327 + functions->fUniform3f = (GrGLUniform3fProc) eglGetProcAddress("glUniform3f"); 1.328 + functions->fUniform3i = (GrGLUniform3iProc) eglGetProcAddress("glUniform3i"); 1.329 + functions->fUniform3fv = (GrGLUniform3fvProc) eglGetProcAddress("glUniform3fv"); 1.330 + functions->fUniform3iv = (GrGLUniform3ivProc) eglGetProcAddress("glUniform3iv"); 1.331 + functions->fUniform4f = (GrGLUniform4fProc) eglGetProcAddress("glUniform4f"); 1.332 + functions->fUniform4i = (GrGLUniform4iProc) eglGetProcAddress("glUniform4i"); 1.333 + functions->fUniform4fv = (GrGLUniform4fvProc) eglGetProcAddress("glUniform4fv"); 1.334 + functions->fUniform4iv = (GrGLUniform4ivProc) eglGetProcAddress("glUniform4iv"); 1.335 + functions->fUniformMatrix2fv = (GrGLUniformMatrix2fvProc) eglGetProcAddress("glUniformMatrix2fv"); 1.336 + functions->fUniformMatrix3fv = (GrGLUniformMatrix3fvProc) eglGetProcAddress("glUniformMatrix3fv"); 1.337 + functions->fUniformMatrix4fv = (GrGLUniformMatrix4fvProc) eglGetProcAddress("glUniformMatrix4fv"); 1.338 + functions->fUnmapBuffer = (GrGLUnmapBufferProc) eglGetProcAddress("glUnmapBuffer"); 1.339 + functions->fUseProgram = (GrGLUseProgramProc) eglGetProcAddress("glUseProgram"); 1.340 + functions->fVertexAttrib4fv = (GrGLVertexAttrib4fvProc) eglGetProcAddress("glVertexAttrib4fv"); 1.341 + functions->fVertexAttribPointer = (GrGLVertexAttribPointerProc) eglGetProcAddress("glVertexAttribPointer"); 1.342 + functions->fViewport = (GrGLViewportProc) eglGetProcAddress("glViewport"); 1.343 + 1.344 + if (extensions.has("GL_NV_path_rendering")) { 1.345 + functions->fPathCommands = (GrGLPathCommandsProc) eglGetProcAddress("glPathCommandsNV"); 1.346 + functions->fPathCoords = (GrGLPathCoordsProc) eglGetProcAddress("glPathCoordsNV"); 1.347 + functions->fPathSubCommands = (GrGLPathSubCommandsProc) eglGetProcAddress("glPathSubCommandsNV"); 1.348 + functions->fPathSubCoords = (GrGLPathSubCoordsProc) eglGetProcAddress("glPathSubCoordsNV"); 1.349 + functions->fPathString = (GrGLPathStringProc) eglGetProcAddress("glPathStringNV"); 1.350 + functions->fPathGlyphs = (GrGLPathGlyphsProc) eglGetProcAddress("glPathGlyphsNV"); 1.351 + functions->fPathGlyphRange = (GrGLPathGlyphRangeProc) eglGetProcAddress("glPathGlyphRangeNV"); 1.352 + functions->fWeightPaths = (GrGLWeightPathsProc) eglGetProcAddress("glWeightPathsNV"); 1.353 + functions->fCopyPath = (GrGLCopyPathProc) eglGetProcAddress("glCopyPathNV"); 1.354 + functions->fInterpolatePaths = (GrGLInterpolatePathsProc) eglGetProcAddress("glInterpolatePathsNV"); 1.355 + functions->fTransformPath = (GrGLTransformPathProc) eglGetProcAddress("glTransformPathNV"); 1.356 + functions->fPathParameteriv = (GrGLPathParameterivProc) eglGetProcAddress("glPathParameterivNV"); 1.357 + functions->fPathParameteri = (GrGLPathParameteriProc) eglGetProcAddress("glPathParameteriNV"); 1.358 + functions->fPathParameterfv = (GrGLPathParameterfvProc) eglGetProcAddress("glPathParameterfvNV"); 1.359 + functions->fPathParameterf = (GrGLPathParameterfProc) eglGetProcAddress("glPathParameterfNV"); 1.360 + functions->fPathDashArray = (GrGLPathDashArrayProc) eglGetProcAddress("glPathDashArrayNV"); 1.361 + functions->fGenPaths = (GrGLGenPathsProc) eglGetProcAddress("glGenPathsNV"); 1.362 + functions->fDeletePaths = (GrGLDeletePathsProc) eglGetProcAddress("glDeletePathsNV"); 1.363 + functions->fIsPath = (GrGLIsPathProc) eglGetProcAddress("glIsPathNV"); 1.364 + functions->fPathStencilFunc = (GrGLPathStencilFuncProc) eglGetProcAddress("glPathStencilFuncNV"); 1.365 + functions->fPathStencilDepthOffset = (GrGLPathStencilDepthOffsetProc) eglGetProcAddress("glPathStencilDepthOffsetNV"); 1.366 + functions->fStencilFillPath = (GrGLStencilFillPathProc) eglGetProcAddress("glStencilFillPathNV"); 1.367 + functions->fStencilStrokePath = (GrGLStencilStrokePathProc) eglGetProcAddress("glStencilStrokePathNV"); 1.368 + functions->fStencilFillPathInstanced = (GrGLStencilFillPathInstancedProc) eglGetProcAddress("glStencilFillPathInstancedNV"); 1.369 + functions->fStencilStrokePathInstanced = (GrGLStencilStrokePathInstancedProc) eglGetProcAddress("glStencilStrokePathInstancedNV"); 1.370 + functions->fPathCoverDepthFunc = (GrGLPathCoverDepthFuncProc) eglGetProcAddress("glPathCoverDepthFuncNV"); 1.371 + functions->fPathColorGen = (GrGLPathColorGenProc) eglGetProcAddress("glPathColorGenNV"); 1.372 + functions->fPathTexGen = (GrGLPathTexGenProc) eglGetProcAddress("glPathTexGenNV"); 1.373 + functions->fPathFogGen = (GrGLPathFogGenProc) eglGetProcAddress("glPathFogGenNV"); 1.374 + functions->fCoverFillPath = (GrGLCoverFillPathProc) eglGetProcAddress("glCoverFillPathNV"); 1.375 + functions->fCoverStrokePath = (GrGLCoverStrokePathProc) eglGetProcAddress("glCoverStrokePathNV"); 1.376 + functions->fCoverFillPathInstanced = (GrGLCoverFillPathInstancedProc) eglGetProcAddress("glCoverFillPathInstancedNV"); 1.377 + functions->fCoverStrokePathInstanced = (GrGLCoverStrokePathInstancedProc) eglGetProcAddress("glCoverStrokePathInstancedNV"); 1.378 + functions->fGetPathParameteriv = (GrGLGetPathParameterivProc) eglGetProcAddress("glGetPathParameterivNV"); 1.379 + functions->fGetPathParameterfv = (GrGLGetPathParameterfvProc) eglGetProcAddress("glGetPathParameterfvNV"); 1.380 + functions->fGetPathCommands = (GrGLGetPathCommandsProc) eglGetProcAddress("glGetPathCommandsNV"); 1.381 + functions->fGetPathCoords = (GrGLGetPathCoordsProc) eglGetProcAddress("glGetPathCoordsNV"); 1.382 + functions->fGetPathDashArray = (GrGLGetPathDashArrayProc) eglGetProcAddress("glGetPathDashArrayNV"); 1.383 + functions->fGetPathMetrics = (GrGLGetPathMetricsProc) eglGetProcAddress("glGetPathMetricsNV"); 1.384 + functions->fGetPathMetricRange = (GrGLGetPathMetricRangeProc) eglGetProcAddress("glGetPathMetricRangeNV"); 1.385 + functions->fGetPathSpacing = (GrGLGetPathSpacingProc) eglGetProcAddress("glGetPathSpacingNV"); 1.386 + functions->fGetPathColorGeniv = (GrGLGetPathColorGenivProc) eglGetProcAddress("glGetPathColorGenivNV"); 1.387 + functions->fGetPathColorGenfv = (GrGLGetPathColorGenfvProc) eglGetProcAddress("glGetPathColorGenfvNV"); 1.388 + functions->fGetPathTexGeniv = (GrGLGetPathTexGenivProc) eglGetProcAddress("glGetPathTexGenivNV"); 1.389 + functions->fGetPathTexGenfv = (GrGLGetPathTexGenfvProc) eglGetProcAddress("glGetPathTexGenfvNV"); 1.390 + functions->fIsPointInFillPath = (GrGLIsPointInFillPathProc) eglGetProcAddress("glIsPointInFillPathNV"); 1.391 + functions->fIsPointInStrokePath = (GrGLIsPointInStrokePathProc) eglGetProcAddress("glIsPointInStrokePathNV"); 1.392 + functions->fGetPathLength = (GrGLGetPathLengthProc) eglGetProcAddress("glGetPathLengthNV"); 1.393 + functions->fPointAlongPath = (GrGLPointAlongPathProc) eglGetProcAddress("glPointAlongPathNV"); 1.394 + } 1.395 + 1.396 + if (extensions.has("GL_EXT_debug_marker")) { 1.397 + functions->fInsertEventMarker = (GrGLInsertEventMarkerProc) eglGetProcAddress("glInsertEventMarkerEXT"); 1.398 + functions->fPushGroupMarker = (GrGLInsertEventMarkerProc) eglGetProcAddress("glPushGroupMarkerEXT"); 1.399 + functions->fPopGroupMarker = (GrGLPopGroupMarkerProc) eglGetProcAddress("glPopGropuMarkerEXT"); 1.400 + } 1.401 + 1.402 + return interface; 1.403 +} 1.404 + 1.405 +const GrGLInterface* GrGLCreateNativeInterface() { 1.406 + 1.407 + GrGLGetStringiProc getStringi = (GrGLGetStringiProc) eglGetProcAddress("glGetStringi"); 1.408 + 1.409 + const char* verStr = reinterpret_cast<const char*>(glGetString(GR_GL_VERSION)); 1.410 + GrGLVersion version = GrGLGetVersionFromString(verStr); 1.411 + GrGLStandard standard = GrGLGetStandardInUseFromString(verStr); 1.412 + 1.413 + GrGLExtensions extensions; 1.414 + if (!extensions.init(standard, glGetString, getStringi, glGetIntegerv)) { 1.415 + return NULL; 1.416 + } 1.417 + 1.418 + GrGLInterface* interface = NULL; 1.419 + if (kGLES_GrGLStandard == standard) { 1.420 + interface = create_es_interface(version, extensions); 1.421 + } else if (kGL_GrGLStandard == standard) { 1.422 + interface = create_desktop_interface(version, extensions); 1.423 + } 1.424 + 1.425 + if (NULL != interface) { 1.426 + interface->fExtensions.swap(&extensions); 1.427 + } 1.428 + 1.429 + return interface; 1.430 +}