gfx/skia/trunk/src/gpu/gl/android/GrGLCreateNativeInterface_android.cpp

changeset 0
6474c204b198
     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 +}

mercurial