13f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com 23f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com/* 33f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com * Copyright 2011 Google Inc. 43f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com * 53f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com * Use of this source code is governed by a BSD-style license that can be 63f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com * found in the LICENSE file. 73f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com */ 83f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com 986c972c88eedf604db60ec44e32cefe9baf70243bsalomon@google.com#include "gl/GrGLExtensions.h" 1039ef825ac6dff4eb2a165b15dbdccdbfb5887984tomhudson@google.com#include "gl/GrGLInterface.h" 11589a15fbf124f1d8ff26782802f7f4559f46fc6cbsalomon@google.com#include "../GrGLUtil.h" 123f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com 13d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com#define GL_GLEXT_PROTOTYPES 14c2aab80eed661042473f2946b231fdc2041f0ab4bsalomon@google.com#include "osmesa_wrapper.h" 153f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com 163f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com#define GR_GL_GET_PROC(F) interface->f ## F = (GrGL ## F ## Proc) \ 173f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com OSMesaGetProcAddress("gl" #F); 183f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com#define GR_GL_GET_PROC_SUFFIX(F, S) interface->f ## F = (GrGL ## F ## Proc) \ 193f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com OSMesaGetProcAddress("gl" #F #S); 203f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com 21d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com// We use OSMesaGetProcAddress for every gl function to avoid accidentally using 22d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com// non-Mesa gl functions. 23d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com 24d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.comconst GrGLInterface* GrGLCreateMesaInterface() { 253f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com if (NULL != OSMesaGetCurrentContext()) { 2686c972c88eedf604db60ec44e32cefe9baf70243bsalomon@google.com 27bd6c2016209bbc5bf9db9ff1fc05544d7e812592bsalomon@google.com GrGLGetStringProc getString = (GrGLGetStringProc) OSMesaGetProcAddress("glGetString"); 28bd6c2016209bbc5bf9db9ff1fc05544d7e812592bsalomon@google.com GrGLGetStringiProc getStringi = (GrGLGetStringiProc) OSMesaGetProcAddress("glGetStringi"); 29bd6c2016209bbc5bf9db9ff1fc05544d7e812592bsalomon@google.com GrGLGetIntegervProc getIntegerv = 30bd6c2016209bbc5bf9db9ff1fc05544d7e812592bsalomon@google.com (GrGLGetIntegervProc) OSMesaGetProcAddress("glGetIntegerv"); 3186c972c88eedf604db60ec44e32cefe9baf70243bsalomon@google.com 3286c972c88eedf604db60ec44e32cefe9baf70243bsalomon@google.com GrGLExtensions extensions; 33bd6c2016209bbc5bf9db9ff1fc05544d7e812592bsalomon@google.com if (!extensions.init(kDesktop_GrGLBinding, getString, getStringi, getIntegerv)) { 3486c972c88eedf604db60ec44e32cefe9baf70243bsalomon@google.com return NULL; 3586c972c88eedf604db60ec44e32cefe9baf70243bsalomon@google.com } 3686c972c88eedf604db60ec44e32cefe9baf70243bsalomon@google.com 37d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com const char* versionString = (const char*) getString(GL_VERSION); 383f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GrGLVersion glVer = GrGLGetVersionFromString(versionString); 393f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com 403f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com if (glVer < GR_GL_VER(1,5)) { 413f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com // We must have array and element_array buffer objects. 423f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com return NULL; 433f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com } 443f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GrGLInterface* interface = new GrGLInterface(); 453f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com 46d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(ActiveTexture); 47d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(BeginQuery); 483f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(AttachShader); 493f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(BindAttribLocation); 503f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(BindBuffer); 513f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(BindFragDataLocation); 52d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(BindTexture); 53d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(BlendFunc); 54d26439670a7010ba518af5bb81f4d94d94ce8108robertphillips@google.com 55d26439670a7010ba518af5bb81f4d94d94ce8108robertphillips@google.com if (glVer >= GR_GL_VER(1,4) || 5686c972c88eedf604db60ec44e32cefe9baf70243bsalomon@google.com extensions.has("GL_ARB_imaging") || 5786c972c88eedf604db60ec44e32cefe9baf70243bsalomon@google.com extensions.has("GL_EXT_blend_color")) { 58d26439670a7010ba518af5bb81f4d94d94ce8108robertphillips@google.com GR_GL_GET_PROC(BlendColor); 59aaefb11b6a32b499c47002326a8cae33f9468241bsalomon@google.com } 60d26439670a7010ba518af5bb81f4d94d94ce8108robertphillips@google.com 613f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(BufferData); 623f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(BufferSubData); 63d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(Clear); 64d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(ClearColor); 65d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(ClearStencil); 66a4da2893bba74445b29b326a90106b3908dcf8e0commit-bot@chromium.org GR_GL_GET_PROC(ClientActiveTexture); 67d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(ColorMask); 683f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(CompileShader); 69d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(CompressedTexImage2D); 7088672fbe426b68b6981a96204de8aff8201dd29ccommit-bot@chromium.org GR_GL_GET_PROC(CopyTexSubImage2D); 713f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(CreateProgram); 723f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(CreateShader); 73d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(CullFace); 743f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(DeleteBuffers); 753f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(DeleteProgram); 76d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(DeleteQueries); 773f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(DeleteShader); 78d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(DeleteTextures); 79d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(DepthMask); 80d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(Disable); 81a4da2893bba74445b29b326a90106b3908dcf8e0commit-bot@chromium.org GR_GL_GET_PROC(DisableClientState); 823f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(DisableVertexAttribArray); 83d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(DrawArrays); 84d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(DrawBuffer); 853f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(DrawBuffers); 86d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(DrawElements); 87d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(Enable); 88a4da2893bba74445b29b326a90106b3908dcf8e0commit-bot@chromium.org GR_GL_GET_PROC(EnableClientState); 893f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(EnableVertexAttribArray); 90d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(EndQuery); 91d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(Finish); 92d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(Flush); 93d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(FrontFace); 943f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(GenBuffers); 95a67b348f7f66678e392b0f9e70cc738cc0c69007commit-bot@chromium.org GR_GL_GET_PROC(GenerateMipmap); 96d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(GenQueries); 973f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(GetBufferParameteriv); 98d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(GetError); 99d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(GetIntegerv); 1003f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(GetProgramInfoLog); 1013f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(GetProgramiv); 10286c972c88eedf604db60ec44e32cefe9baf70243bsalomon@google.com if (glVer >= GR_GL_VER(3,3) || extensions.has("GL_ARB_timer_query")) { 103d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(GetQueryObjecti64v); 104d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(GetQueryObjectui64v) 105d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(QueryCounter); 10686c972c88eedf604db60ec44e32cefe9baf70243bsalomon@google.com } else if (extensions.has("GL_EXT_timer_query")) { 107e8db0d07b73867274b63ce25efbb1bdd0b8096b7bsalomon@google.com GR_GL_GET_PROC_SUFFIX(GetQueryObjecti64v, EXT); 108e8db0d07b73867274b63ce25efbb1bdd0b8096b7bsalomon@google.com GR_GL_GET_PROC_SUFFIX(GetQueryObjectui64v, EXT); 109d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com } 110d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(GetQueryObjectiv); 111d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(GetQueryObjectuiv); 112d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(GetQueryiv); 1133f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(GetShaderInfoLog); 1143f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(GetShaderiv); 115d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(GetString); 11686c972c88eedf604db60ec44e32cefe9baf70243bsalomon@google.com GR_GL_GET_PROC(GetStringi); 117d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(GetTexLevelParameteriv); 118d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(GenTextures); 1193f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(GetUniformLocation); 120d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(LineWidth); 1213f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(LinkProgram); 122a4da2893bba74445b29b326a90106b3908dcf8e0commit-bot@chromium.org GR_GL_GET_PROC(LoadIdentity); 123a4da2893bba74445b29b326a90106b3908dcf8e0commit-bot@chromium.org GR_GL_GET_PROC(LoadMatrixf); 124a4da2893bba74445b29b326a90106b3908dcf8e0commit-bot@chromium.org GR_GL_GET_PROC(MatrixMode); 1253f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(MapBuffer); 126d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(PixelStorei); 127d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(ReadBuffer); 128d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(ReadPixels); 129d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(Scissor); 1303f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(ShaderSource); 131d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(StencilFunc); 1323f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(StencilFuncSeparate); 133d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(StencilMask); 1343f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(StencilMaskSeparate); 135d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(StencilOp); 1363f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(StencilOpSeparate); 137a4da2893bba74445b29b326a90106b3908dcf8e0commit-bot@chromium.org GR_GL_GET_PROC(TexGenf); 138a4da2893bba74445b29b326a90106b3908dcf8e0commit-bot@chromium.org GR_GL_GET_PROC(TexGenfv); 139a4da2893bba74445b29b326a90106b3908dcf8e0commit-bot@chromium.org GR_GL_GET_PROC(TexGeni); 140d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(TexImage2D) 141d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(TexParameteri); 1422db25450f909354fbec8d83b6ca4b02521f9e02fbsalomon@google.com GR_GL_GET_PROC(TexParameteriv); 143919a1375ba60823b849c648646af9326fbba87f7bsalomon@google.com GR_GL_GET_PROC(TexStorage2D); 144919a1375ba60823b849c648646af9326fbba87f7bsalomon@google.com if (NULL == interface->fTexStorage2D) { 145919a1375ba60823b849c648646af9326fbba87f7bsalomon@google.com GR_GL_GET_PROC_SUFFIX(TexStorage2D, EXT); 146919a1375ba60823b849c648646af9326fbba87f7bsalomon@google.com } 147d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(TexSubImage2D); 1483f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(Uniform1f); 1493f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(Uniform1i); 1503f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(Uniform1fv); 1513f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(Uniform1iv); 1523f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(Uniform2f); 1533f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(Uniform2i); 1543f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(Uniform2fv); 1553f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(Uniform2iv); 1563f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(Uniform3f); 1573f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(Uniform3i); 1583f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(Uniform3fv); 1593f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(Uniform3iv); 1603f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(Uniform4f); 1613f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(Uniform4i); 1623f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(Uniform4fv); 1633f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(Uniform4iv); 1643f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(UniformMatrix2fv); 1653f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(UniformMatrix3fv); 1663f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(UniformMatrix4fv); 1673f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(UnmapBuffer); 1683f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(UseProgram); 1693f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(VertexAttrib4fv); 1703f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(VertexAttribPointer); 171a4da2893bba74445b29b326a90106b3908dcf8e0commit-bot@chromium.org GR_GL_GET_PROC(VertexPointer); 172d9f609a66ab7192670bf0ccbbc878ab2b398dab8bsalomon@google.com GR_GL_GET_PROC(Viewport); 1733f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com 1746ccccc065b1122fec12480699d10e7e7482a8b76bsalomon@google.com if (glVer >= GR_GL_VER(3,0) || extensions.has("GL_ARB_vertex_array_object")) { 1756ccccc065b1122fec12480699d10e7e7482a8b76bsalomon@google.com // no ARB suffix for GL_ARB_vertex_array_object 1766ccccc065b1122fec12480699d10e7e7482a8b76bsalomon@google.com GR_GL_GET_PROC(BindVertexArray); 1776ccccc065b1122fec12480699d10e7e7482a8b76bsalomon@google.com GR_GL_GET_PROC(DeleteVertexArrays); 1786ccccc065b1122fec12480699d10e7e7482a8b76bsalomon@google.com GR_GL_GET_PROC(GenVertexArrays); 1796ccccc065b1122fec12480699d10e7e7482a8b76bsalomon@google.com } 1806ccccc065b1122fec12480699d10e7e7482a8b76bsalomon@google.com 1813f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com // First look for GL3.0 FBO or GL_ARB_framebuffer_object (same since 1823f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com // GL_ARB_framebuffer_object doesn't use ARB suffix.) 18386c972c88eedf604db60ec44e32cefe9baf70243bsalomon@google.com if (glVer >= GR_GL_VER(3,0) || extensions.has("GL_ARB_framebuffer_object")) { 1843f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(GenFramebuffers); 1853f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(GetFramebufferAttachmentParameteriv); 1863f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(GetRenderbufferParameteriv); 1873f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(BindFramebuffer); 1883f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(FramebufferTexture2D); 1893f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(CheckFramebufferStatus); 1903f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(DeleteFramebuffers); 1913f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(RenderbufferStorage); 1923f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(GenRenderbuffers); 1933f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(DeleteRenderbuffers); 1943f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(FramebufferRenderbuffer); 1953f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(BindRenderbuffer); 1963f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(RenderbufferStorageMultisample); 1973f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(BlitFramebuffer); 19886c972c88eedf604db60ec44e32cefe9baf70243bsalomon@google.com } else if (extensions.has("GL_EXT_framebuffer_object")) { 1993f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC_SUFFIX(GenFramebuffers, EXT); 2003f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC_SUFFIX(GetFramebufferAttachmentParameteriv, EXT); 2013f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC_SUFFIX(GetRenderbufferParameteriv, EXT); 2023f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC_SUFFIX(BindFramebuffer, EXT); 2033f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC_SUFFIX(FramebufferTexture2D, EXT); 2043f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC_SUFFIX(CheckFramebufferStatus, EXT); 2053f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC_SUFFIX(DeleteFramebuffers, EXT); 2063f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC_SUFFIX(RenderbufferStorage, EXT); 2073f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC_SUFFIX(GenRenderbuffers, EXT); 2083f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC_SUFFIX(DeleteRenderbuffers, EXT); 2093f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC_SUFFIX(FramebufferRenderbuffer, EXT); 2103f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC_SUFFIX(BindRenderbuffer, EXT); 21186c972c88eedf604db60ec44e32cefe9baf70243bsalomon@google.com if (extensions.has("GL_EXT_framebuffer_multisample")) { 2123f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC_SUFFIX(RenderbufferStorageMultisample, EXT); 2133f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com } 21486c972c88eedf604db60ec44e32cefe9baf70243bsalomon@google.com if (extensions.has("GL_EXT_framebuffer_blit")) { 2153f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC_SUFFIX(BlitFramebuffer, EXT); 2163f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com } 2173f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com } else { 2183f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com // we must have FBOs 2193f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com delete interface; 2203f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com return NULL; 2213f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com } 2223f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com GR_GL_GET_PROC(BindFragDataLocationIndexed); 2233f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com interface->fBindingsExported = kDesktop_GrGLBinding; 2243f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com return interface; 2253f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com } else { 2263f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com return NULL; 2273f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com } 2283f30e3a41fc16816105e28e0d4c241eff6d391b4bsalomon@google.com} 229