19add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org 29add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org/* 39add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org * Copyright 2014 Google Inc. 49add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org * 59add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org * Use of this source code is governed by a BSD-style license that can be 69add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org * found in the LICENSE file. 79add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org */ 89add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org 99add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org 109add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org#include "GrGLAssembleInterface.h" 119add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org#include "GrGLUtil.h" 129add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org 139add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org#define GET_PROC(F) functions->f ## F = (GrGL ## F ## Proc) get(ctx, "gl" #F) 149add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org#define GET_PROC_SUFFIX(F, S) functions->f ## F = (GrGL ## F ## Proc) get(ctx, "gl" #F #S) 159add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org#define GET_PROC_LOCAL(F) GrGL ## F ## Proc F = (GrGL ## F ## Proc) get(ctx, "gl" #F) 169add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org 17a721c8167222a0b2b442a00052104b2a78ab93e5bsalomonconst GrGLInterface* GrGLAssembleInterface(void* ctx, GrGLGetProc get) { 18a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_LOCAL(GetString); 19a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon if (NULL == GetString) { 20a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon return NULL; 21a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon } 22a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon 23a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon const char* verStr = reinterpret_cast<const char*>(GetString(GR_GL_VERSION)); 24a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon if (NULL == verStr) { 25a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon return NULL; 26a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon } 27a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon 28a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GrGLStandard standard = GrGLGetStandardInUseFromString(verStr); 29a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon 30a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon if (kGLES_GrGLStandard == standard) { 31a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon return GrGLAssembleGLESInterface(ctx, get); 32a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon } else if (kGL_GrGLStandard == standard) { 33a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon return GrGLAssembleGLInterface(ctx, get); 34a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon } 35a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon return NULL; 36a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon} 37a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon 389add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.orgconst GrGLInterface* GrGLAssembleGLInterface(void* ctx, GrGLGetProc get) { 399add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_LOCAL(GetString); 409add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_LOCAL(GetStringi); 419add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_LOCAL(GetIntegerv); 429add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org 439add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org // GetStringi may be NULL depending on the GL version. 449add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org if (NULL == GetString || NULL == GetIntegerv) { 459add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org return NULL; 469add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org } 479add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org 489add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org const char* versionString = (const char*) GetString(GR_GL_VERSION); 499add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GrGLVersion glVer = GrGLGetVersionFromString(versionString); 509add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org 51f4e67e3e5e5017284300a61e7bb046723a44b0cfcommit-bot@chromium.org if (glVer < GR_GL_VER(1,5) || GR_GL_INVALID_VER == glVer) { 529add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org // We must have array and element_array buffer objects. 539add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org return NULL; 549add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org } 559add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org 569add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GrGLExtensions extensions; 579add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org if (!extensions.init(kGL_GrGLStandard, GetString, GetStringi, GetIntegerv)) { 589add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org return NULL; 599add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org } 609add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org 619add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GrGLInterface* interface = SkNEW(GrGLInterface()); 629add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GrGLInterface::Functions* functions = &interface->fFunctions; 639add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org 649add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(ActiveTexture); 659add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(AttachShader); 669add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(BindAttribLocation); 679add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(BindBuffer); 689add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org if (glVer >= GR_GL_VER(3,0)) { 699add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(BindFragDataLocation); 709add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org } 719add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(BeginQuery); 729add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(BindTexture); 739add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(BlendFunc); 749add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org 759add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org if (glVer >= GR_GL_VER(1,4) || 769add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org extensions.has("GL_ARB_imaging") || 779add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org extensions.has("GL_EXT_blend_color")) { 789add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(BlendColor); 799add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org } 809add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org 819add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(BufferData); 829add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(BufferSubData); 839add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(Clear); 849add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(ClearColor); 859add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(ClearStencil); 869add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(ColorMask); 879add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(CompileShader); 889add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(CompressedTexImage2D); 8937d20f75320e8182f4cdbce5f3d59a339f915e05krajcevski GET_PROC(CompressedTexSubImage2D); 909add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(CopyTexSubImage2D); 919add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(CreateProgram); 929add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(CreateShader); 939add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(CullFace); 949add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(DeleteBuffers); 959add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(DeleteProgram); 969add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(DeleteQueries); 979add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(DeleteShader); 989add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(DeleteTextures); 999add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(DepthMask); 1009add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(Disable); 1019add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(DisableVertexAttribArray); 1029add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(DrawArrays); 1039add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(DrawBuffer); 1049add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(DrawBuffers); 1059add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(DrawElements); 1069add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(Enable); 1079add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(EnableVertexAttribArray); 1089add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(EndQuery); 1099add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(Finish); 1109add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(Flush); 1119add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(FrontFace); 1129add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(GenBuffers); 1139add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(GenerateMipmap); 1149add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(GetBufferParameteriv); 1159add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(GetError); 1169add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(GetIntegerv); 1179add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(GetQueryObjectiv); 1189add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(GetQueryObjectuiv); 1199add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org if (glVer >= GR_GL_VER(3,3) || extensions.has("GL_ARB_timer_query")) { 1209add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(GetQueryObjecti64v); 1219add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(GetQueryObjectui64v); 1229add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(QueryCounter); 1239add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org } else if (extensions.has("GL_EXT_timer_query")) { 1249add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(GetQueryObjecti64v, EXT); 1259add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(GetQueryObjectui64v, EXT); 1269add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org } 1279add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(GetQueryiv); 1289add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(GetProgramInfoLog); 1299add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(GetProgramiv); 1309add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(GetShaderInfoLog); 1319add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(GetShaderiv); 1329add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(GetString); 1339add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(GetStringi); 1349add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(GetTexLevelParameteriv); 1359add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(GenQueries); 1369add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(GenTextures); 1379add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(GetUniformLocation); 1389add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(LineWidth); 1399add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(LinkProgram); 1409add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(MapBuffer); 1419add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org if (extensions.has("GL_EXT_direct_state_access")) { 1429add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(MatrixLoadf, EXT); 1439add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(MatrixLoadIdentity, EXT); 1449add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org } 1459add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(PixelStorei); 1469add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(ReadBuffer); 1479add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(ReadPixels); 1489add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(Scissor); 1499add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(ShaderSource); 1509add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(StencilFunc); 1519add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(StencilFuncSeparate); 1529add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(StencilMask); 1539add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(StencilMaskSeparate); 1549add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(StencilOp); 1559add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(StencilOpSeparate); 1569add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(TexImage2D); 1579add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(TexParameteri); 1589add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(TexParameteriv); 1599add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org if (glVer >= GR_GL_VER(4,2) || extensions.has("GL_ARB_texture_storage")) { 1609add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(TexStorage2D); 1619add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org } else if (extensions.has("GL_EXT_texture_storage")) { 1629add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(TexStorage2D, EXT); 1639add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org } 1649add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(TexSubImage2D); 1659add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(Uniform1f); 1669add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(Uniform1i); 1679add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(Uniform1fv); 1689add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(Uniform1iv); 1699add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(Uniform2f); 1709add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(Uniform2i); 1719add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(Uniform2fv); 1729add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(Uniform2iv); 1739add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(Uniform3f); 1749add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(Uniform3i); 1759add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(Uniform3fv); 1769add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(Uniform3iv); 1779add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(Uniform4f); 1789add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(Uniform4i); 1799add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(Uniform4fv); 1809add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(Uniform4iv); 1819add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(UniformMatrix2fv); 1829add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(UniformMatrix3fv); 1839add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(UniformMatrix4fv); 1849add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(UnmapBuffer); 1859add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(UseProgram); 1869add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(VertexAttrib4fv); 1879add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(VertexAttribPointer); 1889add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(Viewport); 1899add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(BindFragDataLocationIndexed); 1909add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org 1919add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org if (glVer >= GR_GL_VER(3,0) || extensions.has("GL_ARB_vertex_array_object")) { 1929add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org // no ARB suffix for GL_ARB_vertex_array_object 1939add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(BindVertexArray); 1949add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(GenVertexArrays); 1959add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(DeleteVertexArrays); 1969add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org } 1979add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org 198160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org if (glVer >= GR_GL_VER(3,0) || extensions.has("GL_ARB_map_buffer_range")) { 199160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org GET_PROC(MapBufferRange); 200160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org GET_PROC(FlushMappedBufferRange); 201160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org } 202160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org 2039add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org // First look for GL3.0 FBO or GL_ARB_framebuffer_object (same since 2049add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org // GL_ARB_framebuffer_object doesn't use ARB suffix.) 2059add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org if (glVer >= GR_GL_VER(3,0) || extensions.has("GL_ARB_framebuffer_object")) { 2069add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(GenFramebuffers); 2079add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(GetFramebufferAttachmentParameteriv); 2089add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(GetRenderbufferParameteriv); 2099add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(BindFramebuffer); 2109add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(FramebufferTexture2D); 2119add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(CheckFramebufferStatus); 2129add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(DeleteFramebuffers); 2139add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(RenderbufferStorage); 2149add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(GenRenderbuffers); 2159add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(DeleteRenderbuffers); 2169add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(FramebufferRenderbuffer); 2179add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(BindRenderbuffer); 2189add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(RenderbufferStorageMultisample); 2199add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(BlitFramebuffer); 2209add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org } else if (extensions.has("GL_EXT_framebuffer_object")) { 2219add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(GenFramebuffers, EXT); 2229add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(GetFramebufferAttachmentParameteriv, EXT); 2239add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(GetRenderbufferParameteriv, EXT); 2249add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(BindFramebuffer, EXT); 2259add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(FramebufferTexture2D, EXT); 2269add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(CheckFramebufferStatus, EXT); 2279add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(DeleteFramebuffers, EXT); 2289add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(RenderbufferStorage, EXT); 2299add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(GenRenderbuffers, EXT); 2309add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(DeleteRenderbuffers, EXT); 2319add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(FramebufferRenderbuffer, EXT); 2329add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(BindRenderbuffer, EXT); 2339add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org if (extensions.has("GL_EXT_framebuffer_multisample")) { 2349add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(RenderbufferStorageMultisample, EXT); 2359add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org } 2369add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org if (extensions.has("GL_EXT_framebuffer_blit")) { 2379add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(BlitFramebuffer, EXT); 2389add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org } 2399add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org } else { 2409add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org // we must have FBOs 2419add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org delete interface; 2429add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org return NULL; 2439add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org } 2449add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org 2459add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org if (extensions.has("GL_NV_path_rendering")) { 2469add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(PathCommands, NV); 2479add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(PathCoords, NV); 2489add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(PathParameteri, NV); 2499add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(PathParameterf, NV); 2509add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(GenPaths, NV); 2519add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(DeletePaths, NV); 2528dd90cb1fd541b9a2a264725e3dfeae736c91e22cdalton GET_PROC_SUFFIX(IsPath, NV); 2539add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(PathStencilFunc, NV); 2549add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(StencilFillPath, NV); 2559add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(StencilStrokePath, NV); 2569add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(StencilFillPathInstanced, NV); 2579add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(StencilStrokePathInstanced, NV); 2589add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(PathTexGen, NV); 2599add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(CoverFillPath, NV); 2609add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(CoverStrokePath, NV); 2619add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(CoverFillPathInstanced, NV); 2629add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(CoverStrokePathInstanced, NV); 263c7103a104fdc7150b4e3c0d3efc42735ad359616cdalton // NV_path_rendering v1.2 (These methods may not be present) 264c8f520466701a14cf2fb86d3f2d3c70983cb4518cdalton GET_PROC_SUFFIX(StencilThenCoverFillPath, NV); 265c8f520466701a14cf2fb86d3f2d3c70983cb4518cdalton GET_PROC_SUFFIX(StencilThenCoverStrokePath, NV); 266c8f520466701a14cf2fb86d3f2d3c70983cb4518cdalton GET_PROC_SUFFIX(StencilThenCoverFillPathInstanced, NV); 267c8f520466701a14cf2fb86d3f2d3c70983cb4518cdalton GET_PROC_SUFFIX(StencilThenCoverStrokePathInstanced, NV); 268c7103a104fdc7150b4e3c0d3efc42735ad359616cdalton // NV_path_rendering v1.3 (These methods may not be present) 26932b9a3b02ed6b8bab4a25b6cb8853f5bea4b87bakkinnunen GET_PROC_SUFFIX(ProgramPathFragmentInputGen, NV); 270149b3ec2b1ccaf00e40bf296d2a3394852d73fe9cdalton GET_PROC_SUFFIX(PathMemoryGlyphIndexArray, NV); 2719add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org } 2729add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org 2739add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org if (extensions.has("GL_EXT_debug_marker")) { 2749add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(InsertEventMarker, EXT); 2759add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(PushGroupMarker, EXT); 2769add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC_SUFFIX(PopGroupMarker, EXT); 2779add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org } 2789add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org 2799add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org if (glVer >= GR_GL_VER(4,3) || extensions.has("GL_ARB_invalidate_subdata")) { 2809add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(InvalidateBufferData); 2819add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(InvalidateBufferSubData); 2829add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(InvalidateFramebuffer); 2839add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(InvalidateSubFramebuffer); 2849add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(InvalidateTexImage); 2859add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org GET_PROC(InvalidateTexSubImage); 2869add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org } 2879add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org 28832b9a3b02ed6b8bab4a25b6cb8853f5bea4b87bakkinnunen if (glVer >= GR_GL_VER(4,3) || extensions.has("GL_ARB_program_interface_query")) { 28932b9a3b02ed6b8bab4a25b6cb8853f5bea4b87bakkinnunen GET_PROC(GetProgramResourceLocation); 29032b9a3b02ed6b8bab4a25b6cb8853f5bea4b87bakkinnunen } 29132b9a3b02ed6b8bab4a25b6cb8853f5bea4b87bakkinnunen 2929add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org interface->fStandard = kGL_GrGLStandard; 2939add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org interface->fExtensions.swap(&extensions); 2949add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org 2959add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org return interface; 2969add5dc33f10ea6c48268dab448b1df0fc96daaacommit-bot@chromium.org} 297a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon 298a721c8167222a0b2b442a00052104b2a78ab93e5bsalomonconst GrGLInterface* GrGLAssembleGLESInterface(void* ctx, GrGLGetProc get) { 299a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_LOCAL(GetString); 300a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon if (NULL == GetString) { 301a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon return NULL; 302a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon } 303a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon 304a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon const char* verStr = reinterpret_cast<const char*>(GetString(GR_GL_VERSION)); 305a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GrGLVersion version = GrGLGetVersionFromString(verStr); 306a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon 307a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon if (version < GR_GL_VER(2,0)) { 308a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon return NULL; 309a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon } 310a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon 311a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_LOCAL(GetIntegerv); 312a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_LOCAL(GetStringi); 313a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GrGLExtensions extensions; 314a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon if (!extensions.init(kGLES_GrGLStandard, GetString, GetStringi, GetIntegerv)) { 315a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon return NULL; 316a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon } 317a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon 318a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GrGLInterface* interface = SkNEW(GrGLInterface); 319a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GrGLInterface::Functions* functions = &interface->fFunctions; 320a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon 321a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(ActiveTexture); 322a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(AttachShader); 323a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(BindAttribLocation); 324a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(BindBuffer); 325a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(BindTexture); 326a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(BindVertexArray, OES); 327a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(BlendColor); 328a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(BlendFunc); 329a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(BufferData); 330a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(BufferSubData); 331a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(Clear); 332a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(ClearColor); 333a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(ClearStencil); 334a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(ColorMask); 335a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(CompileShader); 336a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(CompressedTexImage2D); 337a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(CompressedTexSubImage2D); 338a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(CopyTexSubImage2D); 339a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(CreateProgram); 340a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(CreateShader); 341a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(CullFace); 342a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(DeleteBuffers); 343a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(DeleteProgram); 344a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(DeleteShader); 345a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(DeleteTextures); 346a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(DeleteVertexArrays, OES); 347a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(DepthMask); 348a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(Disable); 349a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(DisableVertexAttribArray); 350a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(DrawArrays); 351a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(DrawElements); 352a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(Enable); 353a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(EnableVertexAttribArray); 354a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(Finish); 355a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(Flush); 356a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(FrontFace); 357a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(GenBuffers); 358a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(GenerateMipmap); 359a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(GenTextures); 360a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(GenVertexArrays, OES); 361a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(GetBufferParameteriv); 362a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(GetError); 363a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(GetIntegerv); 364a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(GetProgramInfoLog); 365a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(GetProgramiv); 366a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(GetShaderInfoLog); 367a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(GetShaderiv); 368a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(GetString); 369a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(GetStringi); 370a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(GetUniformLocation); 371a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(LineWidth); 372a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(LinkProgram); 373a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(PixelStorei); 374a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(ReadPixels); 375a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(Scissor); 376a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(ShaderSource); 377a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(StencilFunc); 378a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(StencilFuncSeparate); 379a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(StencilMask); 380a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(StencilMaskSeparate); 381a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(StencilOp); 382a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(StencilOpSeparate); 383a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(TexImage2D); 384a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(TexParameteri); 385a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(TexParameteriv); 386a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(TexSubImage2D); 387a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon 388a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon if (version >= GR_GL_VER(3,0)) { 389a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(TexStorage2D); 390a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon } else { 391a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(TexStorage2D, EXT); 392a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon } 393a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon 394a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(DiscardFramebuffer, EXT); 395a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(Uniform1f); 396a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(Uniform1i); 397a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(Uniform1fv); 398a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(Uniform1iv); 399a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(Uniform2f); 400a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(Uniform2i); 401a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(Uniform2fv); 402a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(Uniform2iv); 403a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(Uniform3f); 404a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(Uniform3i); 405a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(Uniform3fv); 406a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(Uniform3iv); 407a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(Uniform4f); 408a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(Uniform4i); 409a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(Uniform4fv); 410a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(Uniform4iv); 411a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(UniformMatrix2fv); 412a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(UniformMatrix3fv); 413a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(UniformMatrix4fv); 414a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(UseProgram); 415a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(VertexAttrib4fv); 416a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(VertexAttribPointer); 417a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(Viewport); 418a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(BindFramebuffer); 419a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(BindRenderbuffer); 420a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(CheckFramebufferStatus); 421a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(DeleteFramebuffers); 422a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(DeleteRenderbuffers); 423a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(FramebufferRenderbuffer); 424a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(FramebufferTexture2D); 425a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon 426a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon if (version >= GR_GL_VER(3,0)) { 427a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(RenderbufferStorageMultisample); 428a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(BlitFramebuffer); 429a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon } 430a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon 431a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon if (extensions.has("GL_EXT_multisampled_render_to_texture")) { 432a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(FramebufferTexture2DMultisample, EXT); 433a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon functions->fRenderbufferStorageMultisampleES2EXT = (GrGLRenderbufferStorageMultisampleProc) get(ctx, "glRenderbufferStorageMultisampleEXT"); 434a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon } else if (extensions.has("GL_IMG_multisampled_render_to_texture")) { 435a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(FramebufferTexture2DMultisample, IMG); 436a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon functions->fRenderbufferStorageMultisampleES2EXT = (GrGLRenderbufferStorageMultisampleProc) get(ctx, "glRenderbufferStorageMultisampleIMG"); 437a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon } else if (extensions.has("GL_APPLE_framebuffer_multisample")) { 438a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon functions->fRenderbufferStorageMultisampleES2APPLE = (GrGLRenderbufferStorageMultisampleProc) get(ctx, "glRenderbufferStorageMultisampleAPPLE"); 439a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(ResolveMultisampleFramebuffer, APPLE); 440a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon } 441a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon 442a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(GenFramebuffers); 443a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(GenRenderbuffers); 444a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(GetFramebufferAttachmentParameteriv); 445a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(GetRenderbufferParameteriv); 446a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(RenderbufferStorage); 447a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon 448a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(MapBuffer, OES); 449a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(UnmapBuffer, OES); 450a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon 451a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon if (version >= GR_GL_VER(3,0)) { 452a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(MapBufferRange); 453a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(FlushMappedBufferRange); 454a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon } else if (extensions.has("GL_EXT_map_buffer_range")) { 455a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(MapBufferRange, EXT); 456a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(FlushMappedBufferRange, EXT); 457a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon } 458a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon 459a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon if (extensions.has("GL_EXT_debug_marker")) { 460a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(InsertEventMarker); 461a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(PushGroupMarker); 462a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(PopGroupMarker); 463a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon // The below check is here because a device has been found that has the extension string but 464a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon // returns NULL from the eglGetProcAddress for the functions 465a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon if (NULL == functions->fInsertEventMarker || 466a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon NULL == functions->fPushGroupMarker || 467a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon NULL == functions->fPopGroupMarker) { 468a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon extensions.remove("GL_EXT_debug_marker"); 469a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon } 470a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon } 471a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon 472a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(InvalidateFramebuffer); 473a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(InvalidateSubFramebuffer); 474a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(InvalidateBufferData); 475a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(InvalidateBufferSubData); 476a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(InvalidateTexImage); 477a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(InvalidateTexSubImage); 478a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon 479a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon if (version >= GR_GL_VER(3,1)) { 480a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC(GetProgramResourceLocation); 481a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon } 482a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon 483a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon if (extensions.has("GL_NV_path_rendering")) { 484a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(MatrixLoadf, EXT); 485a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(MatrixLoadIdentity, EXT); 486a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(PathCommands, NV); 487a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(PathCoords, NV); 488a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(PathParameteri, NV); 489a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(PathParameterf, NV); 490a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(GenPaths, NV); 491a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(DeletePaths, NV); 492a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(IsPath, NV); 493a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(PathStencilFunc, NV); 494a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(StencilFillPath, NV); 495a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(StencilStrokePath, NV); 496a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(StencilFillPathInstanced, NV); 497a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(StencilStrokePathInstanced, NV); 498a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(CoverFillPath, NV); 499a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(CoverStrokePath, NV); 500a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(CoverFillPathInstanced, NV); 501a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(CoverStrokePathInstanced, NV); 502a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(StencilThenCoverFillPath, NV); 503a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(StencilThenCoverStrokePath, NV); 504a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(StencilThenCoverFillPathInstanced, NV); 505a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(StencilThenCoverStrokePathInstanced, NV); 506a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon GET_PROC_SUFFIX(ProgramPathFragmentInputGen, NV); 507149b3ec2b1ccaf00e40bf296d2a3394852d73fe9cdalton GET_PROC_SUFFIX(PathMemoryGlyphIndexArray, NV); 508a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon } 509a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon 510a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon interface->fStandard = kGLES_GrGLStandard; 511a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon interface->fExtensions.swap(&extensions); 512a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon 513a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon return interface; 514a721c8167222a0b2b442a00052104b2a78ab93e5bsalomon} 515