bsalomon@google.com | 7491372 | 2011-10-27 20:44:19 +0000 | [diff] [blame] | 1 | /* |
| 2 | * Copyright 2011 Google Inc. |
| 3 | * |
| 4 | * Use of this source code is governed by a BSD-style license that can be |
| 5 | * found in the LICENSE file. |
| 6 | */ |
| 7 | |
| 8 | |
tomhudson@google.com | 6bf38b5 | 2012-02-14 15:11:59 +0000 | [diff] [blame] | 9 | #include "gl/GrGLInterface.h" |
bsalomon@google.com | 91bcc94 | 2012-05-07 17:28:41 +0000 | [diff] [blame] | 10 | #include "GrGLDefines.h" |
bsalomon@google.com | 21cbec4 | 2013-01-07 17:23:00 +0000 | [diff] [blame] | 11 | #include "SkTDArray.h" |
bsalomon@google.com | 8f94361 | 2013-02-26 14:34:43 +0000 | [diff] [blame] | 12 | #include "GrGLNoOpInterface.h" |
| 13 | |
| 14 | // Functions not declared in GrGLBogusInterface.h (not common with the Debug GL interface). |
bsalomon@google.com | 7491372 | 2011-10-27 20:44:19 +0000 | [diff] [blame] | 15 | |
caryclark@google.com | cf6285b | 2012-06-06 12:09:01 +0000 | [diff] [blame] | 16 | namespace { // added to suppress 'no previous prototype' warning |
| 17 | |
bsalomon@google.com | 7491372 | 2011-10-27 20:44:19 +0000 | [diff] [blame] | 18 | GrGLvoid GR_GL_FUNCTION_TYPE nullGLActiveTexture(GrGLenum texture) {} |
| 19 | GrGLvoid GR_GL_FUNCTION_TYPE nullGLAttachShader(GrGLuint program, GrGLuint shader) {} |
| 20 | GrGLvoid GR_GL_FUNCTION_TYPE nullGLBeginQuery(GrGLenum target, GrGLuint id) {} |
| 21 | GrGLvoid GR_GL_FUNCTION_TYPE nullGLBindAttribLocation(GrGLuint program, GrGLuint index, const char* name) {} |
| 22 | GrGLvoid GR_GL_FUNCTION_TYPE nullGLBindTexture(GrGLenum target, GrGLuint texture) {} |
bsalomon@google.com | ecd8484 | 2013-03-01 15:36:02 +0000 | [diff] [blame] | 23 | GrGLvoid GR_GL_FUNCTION_TYPE nullGLBindVertexArray(GrGLuint id) {} |
bsalomon@google.com | 7491372 | 2011-10-27 20:44:19 +0000 | [diff] [blame] | 24 | GrGLvoid GR_GL_FUNCTION_TYPE nullGLBufferData(GrGLenum target, GrGLsizeiptr size, const GrGLvoid* data, GrGLenum usage) {} |
bsalomon@google.com | 7491372 | 2011-10-27 20:44:19 +0000 | [diff] [blame] | 25 | GrGLvoid GR_GL_FUNCTION_TYPE nullGLPixelStorei(GrGLenum pname, GrGLint param) {} |
bsalomon@google.com | 7491372 | 2011-10-27 20:44:19 +0000 | [diff] [blame] | 26 | GrGLvoid GR_GL_FUNCTION_TYPE nullGLReadPixels(GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height, GrGLenum format, GrGLenum type, GrGLvoid* pixels) {} |
bsalomon@google.com | 7491372 | 2011-10-27 20:44:19 +0000 | [diff] [blame] | 27 | GrGLvoid GR_GL_FUNCTION_TYPE nullGLUseProgram(GrGLuint program) {} |
bsalomon@google.com | 7491372 | 2011-10-27 20:44:19 +0000 | [diff] [blame] | 28 | GrGLvoid GR_GL_FUNCTION_TYPE nullGLViewport(GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height) {} |
| 29 | GrGLvoid GR_GL_FUNCTION_TYPE nullGLBindFramebuffer(GrGLenum target, GrGLuint framebuffer) {} |
| 30 | GrGLvoid GR_GL_FUNCTION_TYPE nullGLBindRenderbuffer(GrGLenum target, GrGLuint renderbuffer) {} |
| 31 | GrGLvoid GR_GL_FUNCTION_TYPE nullGLDeleteFramebuffers(GrGLsizei n, const GrGLuint *framebuffers) {} |
| 32 | GrGLvoid GR_GL_FUNCTION_TYPE nullGLDeleteRenderbuffers(GrGLsizei n, const GrGLuint *renderbuffers) {} |
| 33 | GrGLvoid GR_GL_FUNCTION_TYPE nullGLFramebufferRenderbuffer(GrGLenum target, GrGLenum attachment, GrGLenum renderbuffertarget, GrGLuint renderbuffer) {} |
| 34 | GrGLvoid GR_GL_FUNCTION_TYPE nullGLFramebufferTexture2D(GrGLenum target, GrGLenum attachment, GrGLenum textarget, GrGLuint texture, GrGLint level) {} |
bsalomon@google.com | 7491372 | 2011-10-27 20:44:19 +0000 | [diff] [blame] | 35 | |
| 36 | GrGLuint GR_GL_FUNCTION_TYPE nullGLCreateProgram() { |
| 37 | static int gCurrID = 0; |
| 38 | return ++gCurrID; |
| 39 | } |
| 40 | |
| 41 | GrGLuint GR_GL_FUNCTION_TYPE nullGLCreateShader(GrGLenum type) { |
| 42 | static int gCurrID = 0; |
| 43 | return ++gCurrID; |
| 44 | } |
| 45 | |
| 46 | // same delete used for shaders and programs |
| 47 | GrGLvoid GR_GL_FUNCTION_TYPE nullGLDelete(GrGLuint program) { |
| 48 | } |
| 49 | |
bsalomon@google.com | 7491372 | 2011-10-27 20:44:19 +0000 | [diff] [blame] | 50 | // In debug builds we do asserts that ensure we agree with GL about when a buffer |
| 51 | // is mapped. |
bsalomon@google.com | 21cbec4 | 2013-01-07 17:23:00 +0000 | [diff] [blame] | 52 | static SkTDArray<GrGLuint> gMappedBuffers; |
bsalomon@google.com | 7491372 | 2011-10-27 20:44:19 +0000 | [diff] [blame] | 53 | static GrGLuint gCurrArrayBuffer; |
| 54 | static GrGLuint gCurrElementArrayBuffer; |
| 55 | |
| 56 | GrGLvoid GR_GL_FUNCTION_TYPE nullGLBindBuffer(GrGLenum target, GrGLuint buffer) { |
| 57 | switch (target) { |
| 58 | case GR_GL_ARRAY_BUFFER: |
| 59 | gCurrArrayBuffer = buffer; |
| 60 | break; |
| 61 | case GR_GL_ELEMENT_ARRAY_BUFFER: |
| 62 | gCurrElementArrayBuffer = buffer; |
| 63 | break; |
| 64 | } |
| 65 | } |
| 66 | |
| 67 | // deleting a bound buffer has the side effect of binding 0 |
| 68 | GrGLvoid GR_GL_FUNCTION_TYPE nullGLDeleteBuffers(GrGLsizei n, const GrGLuint* ids) { |
| 69 | for (int i = 0; i < n; ++i) { |
| 70 | if (ids[i] == gCurrArrayBuffer) { |
| 71 | gCurrArrayBuffer = 0; |
| 72 | } |
| 73 | if (ids[i] == gCurrElementArrayBuffer) { |
| 74 | gCurrElementArrayBuffer = 0; |
| 75 | } |
| 76 | for (int j = 0; j < gMappedBuffers.count(); ++j) { |
| 77 | if (gMappedBuffers[j] == ids[i]) { |
| 78 | gMappedBuffers.remove(j); |
| 79 | // don't break b/c we didn't check for dupes on insert |
| 80 | --j; |
| 81 | } |
| 82 | } |
| 83 | } |
| 84 | } |
| 85 | |
| 86 | GrGLvoid* GR_GL_FUNCTION_TYPE nullGLMapBuffer(GrGLenum target, GrGLenum access) { |
| 87 | // We just reserve 32MB of RAM for all locks and hope its big enough |
| 88 | static SkAutoMalloc gBufferData(32 * (1 << 20)); |
| 89 | GrGLuint buf = 0; |
| 90 | switch (target) { |
| 91 | case GR_GL_ARRAY_BUFFER: |
| 92 | buf = gCurrArrayBuffer; |
| 93 | break; |
| 94 | case GR_GL_ELEMENT_ARRAY_BUFFER: |
| 95 | buf = gCurrElementArrayBuffer; |
| 96 | break; |
| 97 | } |
| 98 | if (buf) { |
| 99 | *gMappedBuffers.append() = buf; |
| 100 | } |
| 101 | return gBufferData.get(); |
| 102 | } |
| 103 | |
| 104 | GrGLboolean GR_GL_FUNCTION_TYPE nullGLUnmapBuffer(GrGLenum target) { |
| 105 | GrGLuint buf = 0; |
| 106 | switch (target) { |
| 107 | case GR_GL_ARRAY_BUFFER: |
| 108 | buf = gCurrArrayBuffer; |
| 109 | break; |
| 110 | case GR_GL_ELEMENT_ARRAY_BUFFER: |
| 111 | buf = gCurrElementArrayBuffer; |
| 112 | break; |
| 113 | } |
| 114 | if (buf) { |
| 115 | for (int i = 0; i < gMappedBuffers.count(); ++i) { |
| 116 | if (gMappedBuffers[i] == buf) { |
| 117 | gMappedBuffers.remove(i); |
| 118 | // don't break b/c we didn't check for dupes on insert |
| 119 | --i; |
| 120 | } |
| 121 | } |
| 122 | } |
| 123 | return GR_GL_TRUE; |
| 124 | } |
| 125 | |
| 126 | GrGLvoid GR_GL_FUNCTION_TYPE nullGLGetBufferParameteriv(GrGLenum target, GrGLenum pname, GrGLint* params) { |
| 127 | switch (pname) { |
| 128 | case GR_GL_BUFFER_MAPPED: { |
| 129 | *params = GR_GL_FALSE; |
| 130 | GrGLuint buf = 0; |
| 131 | switch (target) { |
| 132 | case GR_GL_ARRAY_BUFFER: |
| 133 | buf = gCurrArrayBuffer; |
| 134 | break; |
| 135 | case GR_GL_ELEMENT_ARRAY_BUFFER: |
| 136 | buf = gCurrElementArrayBuffer; |
rmistry@google.com | fbfcd56 | 2012-08-23 18:09:54 +0000 | [diff] [blame] | 137 | break; |
bsalomon@google.com | 7491372 | 2011-10-27 20:44:19 +0000 | [diff] [blame] | 138 | } |
| 139 | if (buf) { |
| 140 | for (int i = 0; i < gMappedBuffers.count(); ++i) { |
| 141 | if (gMappedBuffers[i] == buf) { |
| 142 | *params = GR_GL_TRUE; |
| 143 | break; |
| 144 | } |
| 145 | } |
| 146 | } |
| 147 | break; } |
| 148 | default: |
| 149 | GrCrash("Unexpected pname to GetBufferParamateriv"); |
| 150 | break; |
| 151 | } |
| 152 | }; |
| 153 | |
caryclark@google.com | cf6285b | 2012-06-06 12:09:01 +0000 | [diff] [blame] | 154 | } // end anonymous namespace |
| 155 | |
bsalomon@google.com | 7491372 | 2011-10-27 20:44:19 +0000 | [diff] [blame] | 156 | const GrGLInterface* GrGLCreateNullInterface() { |
rmistry@google.com | fbfcd56 | 2012-08-23 18:09:54 +0000 | [diff] [blame] | 157 | // The gl functions are not context-specific so we create one global |
bsalomon@google.com | 7491372 | 2011-10-27 20:44:19 +0000 | [diff] [blame] | 158 | // interface |
| 159 | static SkAutoTUnref<GrGLInterface> glInterface; |
| 160 | if (!glInterface.get()) { |
tomhudson@google.com | c377baf | 2012-07-09 20:17:56 +0000 | [diff] [blame] | 161 | GrGLInterface* interface = SkNEW(GrGLInterface); |
bsalomon@google.com | 7491372 | 2011-10-27 20:44:19 +0000 | [diff] [blame] | 162 | glInterface.reset(interface); |
| 163 | interface->fBindingsExported = kDesktop_GrGLBinding; |
| 164 | interface->fActiveTexture = nullGLActiveTexture; |
| 165 | interface->fAttachShader = nullGLAttachShader; |
| 166 | interface->fBeginQuery = nullGLBeginQuery; |
| 167 | interface->fBindAttribLocation = nullGLBindAttribLocation; |
| 168 | interface->fBindBuffer = nullGLBindBuffer; |
bsalomon@google.com | 8f94361 | 2013-02-26 14:34:43 +0000 | [diff] [blame] | 169 | interface->fBindFragDataLocation = noOpGLBindFragDataLocation; |
bsalomon@google.com | 7491372 | 2011-10-27 20:44:19 +0000 | [diff] [blame] | 170 | interface->fBindTexture = nullGLBindTexture; |
bsalomon@google.com | ecd8484 | 2013-03-01 15:36:02 +0000 | [diff] [blame] | 171 | interface->fBindVertexArray = nullGLBindVertexArray; |
bsalomon@google.com | 8f94361 | 2013-02-26 14:34:43 +0000 | [diff] [blame] | 172 | interface->fBlendColor = noOpGLBlendColor; |
| 173 | interface->fBlendFunc = noOpGLBlendFunc; |
bsalomon@google.com | 7491372 | 2011-10-27 20:44:19 +0000 | [diff] [blame] | 174 | interface->fBufferData = nullGLBufferData; |
bsalomon@google.com | 8f94361 | 2013-02-26 14:34:43 +0000 | [diff] [blame] | 175 | interface->fBufferSubData = noOpGLBufferSubData; |
| 176 | interface->fClear = noOpGLClear; |
| 177 | interface->fClearColor = noOpGLClearColor; |
| 178 | interface->fClearStencil = noOpGLClearStencil; |
| 179 | interface->fColorMask = noOpGLColorMask; |
| 180 | interface->fCompileShader = noOpGLCompileShader; |
| 181 | interface->fCompressedTexImage2D = noOpGLCompressedTexImage2D; |
commit-bot@chromium.org | 98168bb | 2013-04-11 22:00:34 +0000 | [diff] [blame] | 182 | interface->fCopyTexSubImage2D = noOpGLCopyTexSubImage2D; |
bsalomon@google.com | 7491372 | 2011-10-27 20:44:19 +0000 | [diff] [blame] | 183 | interface->fCreateProgram = nullGLCreateProgram; |
| 184 | interface->fCreateShader = nullGLCreateShader; |
bsalomon@google.com | 8f94361 | 2013-02-26 14:34:43 +0000 | [diff] [blame] | 185 | interface->fCullFace = noOpGLCullFace; |
bsalomon@google.com | 7491372 | 2011-10-27 20:44:19 +0000 | [diff] [blame] | 186 | interface->fDeleteBuffers = nullGLDeleteBuffers; |
| 187 | interface->fDeleteProgram = nullGLDelete; |
bsalomon@google.com | 8f94361 | 2013-02-26 14:34:43 +0000 | [diff] [blame] | 188 | interface->fDeleteQueries = noOpGLDeleteIds; |
bsalomon@google.com | 7491372 | 2011-10-27 20:44:19 +0000 | [diff] [blame] | 189 | interface->fDeleteShader = nullGLDelete; |
bsalomon@google.com | 8f94361 | 2013-02-26 14:34:43 +0000 | [diff] [blame] | 190 | interface->fDeleteTextures = noOpGLDeleteIds; |
bsalomon@google.com | ecd8484 | 2013-03-01 15:36:02 +0000 | [diff] [blame] | 191 | interface->fDeleteVertexArrays = noOpGLDeleteIds; |
bsalomon@google.com | 8f94361 | 2013-02-26 14:34:43 +0000 | [diff] [blame] | 192 | interface->fDepthMask = noOpGLDepthMask; |
| 193 | interface->fDisable = noOpGLDisable; |
| 194 | interface->fDisableVertexAttribArray = noOpGLDisableVertexAttribArray; |
| 195 | interface->fDrawArrays = noOpGLDrawArrays; |
| 196 | interface->fDrawBuffer = noOpGLDrawBuffer; |
| 197 | interface->fDrawBuffers = noOpGLDrawBuffers; |
| 198 | interface->fDrawElements = noOpGLDrawElements; |
| 199 | interface->fEnable = noOpGLEnable; |
| 200 | interface->fEnableVertexAttribArray = noOpGLEnableVertexAttribArray; |
| 201 | interface->fEndQuery = noOpGLEndQuery; |
| 202 | interface->fFinish = noOpGLFinish; |
| 203 | interface->fFlush = noOpGLFlush; |
| 204 | interface->fFrontFace = noOpGLFrontFace; |
| 205 | interface->fGenBuffers = noOpGLGenIds; |
| 206 | interface->fGenQueries = noOpGLGenIds; |
| 207 | interface->fGenTextures = noOpGLGenIds; |
bsalomon@google.com | ecd8484 | 2013-03-01 15:36:02 +0000 | [diff] [blame] | 208 | interface->fGenVertexArrays = noOpGLGenIds; |
bsalomon@google.com | 7491372 | 2011-10-27 20:44:19 +0000 | [diff] [blame] | 209 | interface->fGetBufferParameteriv = nullGLGetBufferParameteriv; |
bsalomon@google.com | 8f94361 | 2013-02-26 14:34:43 +0000 | [diff] [blame] | 210 | interface->fGetError = noOpGLGetError; |
| 211 | interface->fGetIntegerv = noOpGLGetIntegerv; |
| 212 | interface->fGetQueryObjecti64v = noOpGLGetQueryObjecti64v; |
| 213 | interface->fGetQueryObjectiv = noOpGLGetQueryObjectiv; |
| 214 | interface->fGetQueryObjectui64v = noOpGLGetQueryObjectui64v; |
| 215 | interface->fGetQueryObjectuiv = noOpGLGetQueryObjectuiv; |
| 216 | interface->fGetQueryiv = noOpGLGetQueryiv; |
| 217 | interface->fGetProgramInfoLog = noOpGLGetInfoLog; |
| 218 | interface->fGetProgramiv = noOpGLGetShaderOrProgramiv; |
| 219 | interface->fGetShaderInfoLog = noOpGLGetInfoLog; |
| 220 | interface->fGetShaderiv = noOpGLGetShaderOrProgramiv; |
| 221 | interface->fGetString = noOpGLGetString; |
bsalomon@google.com | 1744f97 | 2013-02-26 21:46:32 +0000 | [diff] [blame] | 222 | interface->fGetStringi = noOpGLGetStringi; |
bsalomon@google.com | 8f94361 | 2013-02-26 14:34:43 +0000 | [diff] [blame] | 223 | interface->fGetTexLevelParameteriv = noOpGLGetTexLevelParameteriv; |
| 224 | interface->fGetUniformLocation = noOpGLGetUniformLocation; |
| 225 | interface->fLineWidth = noOpGLLineWidth; |
| 226 | interface->fLinkProgram = noOpGLLinkProgram; |
bsalomon@google.com | 7491372 | 2011-10-27 20:44:19 +0000 | [diff] [blame] | 227 | interface->fPixelStorei = nullGLPixelStorei; |
bsalomon@google.com | 8f94361 | 2013-02-26 14:34:43 +0000 | [diff] [blame] | 228 | interface->fQueryCounter = noOpGLQueryCounter; |
| 229 | interface->fReadBuffer = noOpGLReadBuffer; |
bsalomon@google.com | 7491372 | 2011-10-27 20:44:19 +0000 | [diff] [blame] | 230 | interface->fReadPixels = nullGLReadPixels; |
bsalomon@google.com | 8f94361 | 2013-02-26 14:34:43 +0000 | [diff] [blame] | 231 | interface->fScissor = noOpGLScissor; |
| 232 | interface->fShaderSource = noOpGLShaderSource; |
| 233 | interface->fStencilFunc = noOpGLStencilFunc; |
| 234 | interface->fStencilFuncSeparate = noOpGLStencilFuncSeparate; |
| 235 | interface->fStencilMask = noOpGLStencilMask; |
| 236 | interface->fStencilMaskSeparate = noOpGLStencilMaskSeparate; |
| 237 | interface->fStencilOp = noOpGLStencilOp; |
| 238 | interface->fStencilOpSeparate = noOpGLStencilOpSeparate; |
| 239 | interface->fTexImage2D = noOpGLTexImage2D; |
| 240 | interface->fTexParameteri = noOpGLTexParameteri; |
| 241 | interface->fTexParameteriv = noOpGLTexParameteriv; |
| 242 | interface->fTexSubImage2D = noOpGLTexSubImage2D; |
| 243 | interface->fTexStorage2D = noOpGLTexStorage2D; |
robertphillips@google.com | a6ffb58 | 2013-04-29 16:50:17 +0000 | [diff] [blame^] | 244 | interface->fDiscardFramebuffer = noOpGLDiscardFramebuffer; |
bsalomon@google.com | 8f94361 | 2013-02-26 14:34:43 +0000 | [diff] [blame] | 245 | interface->fUniform1f = noOpGLUniform1f; |
| 246 | interface->fUniform1i = noOpGLUniform1i; |
| 247 | interface->fUniform1fv = noOpGLUniform1fv; |
| 248 | interface->fUniform1iv = noOpGLUniform1iv; |
| 249 | interface->fUniform2f = noOpGLUniform2f; |
| 250 | interface->fUniform2i = noOpGLUniform2i; |
| 251 | interface->fUniform2fv = noOpGLUniform2fv; |
| 252 | interface->fUniform2iv = noOpGLUniform2iv; |
| 253 | interface->fUniform3f = noOpGLUniform3f; |
| 254 | interface->fUniform3i = noOpGLUniform3i; |
| 255 | interface->fUniform3fv = noOpGLUniform3fv; |
| 256 | interface->fUniform3iv = noOpGLUniform3iv; |
| 257 | interface->fUniform4f = noOpGLUniform4f; |
| 258 | interface->fUniform4i = noOpGLUniform4i; |
| 259 | interface->fUniform4fv = noOpGLUniform4fv; |
| 260 | interface->fUniform4iv = noOpGLUniform4iv; |
| 261 | interface->fUniformMatrix2fv = noOpGLUniformMatrix2fv; |
| 262 | interface->fUniformMatrix3fv = noOpGLUniformMatrix3fv; |
| 263 | interface->fUniformMatrix4fv = noOpGLUniformMatrix4fv; |
bsalomon@google.com | 7491372 | 2011-10-27 20:44:19 +0000 | [diff] [blame] | 264 | interface->fUseProgram = nullGLUseProgram; |
bsalomon@google.com | 8f94361 | 2013-02-26 14:34:43 +0000 | [diff] [blame] | 265 | interface->fVertexAttrib4fv = noOpGLVertexAttrib4fv; |
| 266 | interface->fVertexAttribPointer = noOpGLVertexAttribPointer; |
bsalomon@google.com | 7491372 | 2011-10-27 20:44:19 +0000 | [diff] [blame] | 267 | interface->fViewport = nullGLViewport; |
| 268 | interface->fBindFramebuffer = nullGLBindFramebuffer; |
| 269 | interface->fBindRenderbuffer = nullGLBindRenderbuffer; |
bsalomon@google.com | 8f94361 | 2013-02-26 14:34:43 +0000 | [diff] [blame] | 270 | interface->fCheckFramebufferStatus = noOpGLCheckFramebufferStatus; |
bsalomon@google.com | 7491372 | 2011-10-27 20:44:19 +0000 | [diff] [blame] | 271 | interface->fDeleteFramebuffers = nullGLDeleteFramebuffers; |
| 272 | interface->fDeleteRenderbuffers = nullGLDeleteRenderbuffers; |
| 273 | interface->fFramebufferRenderbuffer = nullGLFramebufferRenderbuffer; |
| 274 | interface->fFramebufferTexture2D = nullGLFramebufferTexture2D; |
bsalomon@google.com | 8f94361 | 2013-02-26 14:34:43 +0000 | [diff] [blame] | 275 | interface->fGenFramebuffers = noOpGLGenIds; |
| 276 | interface->fGenRenderbuffers = noOpGLGenIds; |
| 277 | interface->fGetFramebufferAttachmentParameteriv = noOpGLGetFramebufferAttachmentParameteriv; |
| 278 | interface->fGetRenderbufferParameteriv = noOpGLGetRenderbufferParameteriv; |
| 279 | interface->fRenderbufferStorage = noOpGLRenderbufferStorage; |
| 280 | interface->fRenderbufferStorageMultisample = noOpGLRenderbufferStorageMultisample; |
| 281 | interface->fBlitFramebuffer = noOpGLBlitFramebuffer; |
| 282 | interface->fResolveMultisampleFramebuffer = noOpGLResolveMultisampleFramebuffer; |
bsalomon@google.com | 7491372 | 2011-10-27 20:44:19 +0000 | [diff] [blame] | 283 | interface->fMapBuffer = nullGLMapBuffer; |
| 284 | interface->fUnmapBuffer = nullGLUnmapBuffer; |
bsalomon@google.com | 8f94361 | 2013-02-26 14:34:43 +0000 | [diff] [blame] | 285 | interface->fBindFragDataLocationIndexed = noOpGLBindFragDataLocationIndexed; |
bsalomon@google.com | 7491372 | 2011-10-27 20:44:19 +0000 | [diff] [blame] | 286 | } |
| 287 | glInterface.get()->ref(); |
| 288 | return glInterface.get(); |
| 289 | } |