blob: c169b1ce387f3f4726320d749c3fa2e650b1efdf [file] [log] [blame]
bsalomon@google.com74913722011-10-27 20:44:19 +00001/*
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.com6bf38b52012-02-14 15:11:59 +00009#include "gl/GrGLInterface.h"
bsalomon@google.com91bcc942012-05-07 17:28:41 +000010#include "GrGLDefines.h"
bsalomon@google.com21cbec42013-01-07 17:23:00 +000011#include "SkTDArray.h"
bsalomon@google.com8f943612013-02-26 14:34:43 +000012#include "GrGLNoOpInterface.h"
13
14// Functions not declared in GrGLBogusInterface.h (not common with the Debug GL interface).
bsalomon@google.com74913722011-10-27 20:44:19 +000015
caryclark@google.comcf6285b2012-06-06 12:09:01 +000016namespace { // added to suppress 'no previous prototype' warning
17
robertphillips@google.comd6543e52013-07-18 17:39:14 +000018class GrBufferObj {
19public:
20 GrBufferObj(GrGLuint id) : fID(id), fDataPtr(NULL), fSize(0), fMapped(false) {
21 }
22 ~GrBufferObj() { SkDELETE_ARRAY(fDataPtr); }
23
robertphillips@google.comae6b7772013-07-18 18:07:39 +000024 void allocate(GrGLsizeiptr size, const GrGLchar* dataPtr) {
robertphillips@google.comd6543e52013-07-18 17:39:14 +000025 if (NULL != fDataPtr) {
tfarina@chromium.orgf6de4752013-08-17 00:02:59 +000026 SkASSERT(0 != fSize);
robertphillips@google.comd6543e52013-07-18 17:39:14 +000027 SkDELETE_ARRAY(fDataPtr);
28 }
29
30 fSize = size;
31 fDataPtr = SkNEW_ARRAY(char, size);
32 }
33
34 GrGLuint id() const { return fID; }
35 GrGLchar* dataPtr() { return fDataPtr; }
robertphillips@google.comae6b7772013-07-18 18:07:39 +000036 GrGLsizeiptr size() const { return fSize; }
robertphillips@google.comd6543e52013-07-18 17:39:14 +000037
38 void setMapped(bool mapped) { fMapped = mapped; }
39 bool mapped() const { return fMapped; }
40
41private:
42 GrGLuint fID;
43 GrGLchar* fDataPtr;
robertphillips@google.comae6b7772013-07-18 18:07:39 +000044 GrGLsizeiptr fSize; // size in bytes
robertphillips@google.comd6543e52013-07-18 17:39:14 +000045 bool fMapped;
46};
47
48// In debug builds we do asserts that ensure we agree with GL about when a buffer
49// is mapped.
50static SkTDArray<GrBufferObj*> gBuffers; // slot 0 is reserved for head of free list
51static GrGLuint gCurrArrayBuffer;
52static GrGLuint gCurrElementArrayBuffer;
53
54static GrBufferObj* look_up(GrGLuint id) {
55 GrBufferObj* buffer = gBuffers[id];
tfarina@chromium.orgf6de4752013-08-17 00:02:59 +000056 SkASSERT(NULL != buffer && buffer->id() == id);
robertphillips@google.comd6543e52013-07-18 17:39:14 +000057 return buffer;
58}
59
60static GrBufferObj* create_buffer() {
61 if (0 == gBuffers.count()) {
62 // slot zero is reserved for the head of the free list
63 *gBuffers.append() = NULL;
64 }
65
66 GrGLuint id;
67 GrBufferObj* buffer;
68
69 if (NULL == gBuffers[0]) {
70 // no free slots - create a new one
71 id = gBuffers.count();
72 buffer = SkNEW_ARGS(GrBufferObj, (id));
73 gBuffers.append(1, &buffer);
74 } else {
75 // recycle a slot from the free list
robertphillips@google.comae6b7772013-07-18 18:07:39 +000076 id = SkTCast<GrGLuint>(gBuffers[0]);
robertphillips@google.comd6543e52013-07-18 17:39:14 +000077 gBuffers[0] = gBuffers[id];
78
79 buffer = SkNEW_ARGS(GrBufferObj, (id));
80 gBuffers[id] = buffer;
81 }
82
83 return buffer;
84}
85
86static void delete_buffer(GrBufferObj* buffer) {
tfarina@chromium.orgf6de4752013-08-17 00:02:59 +000087 SkASSERT(gBuffers.count() > 0);
robertphillips@google.comd6543e52013-07-18 17:39:14 +000088
89 GrGLuint id = buffer->id();
90 SkDELETE(buffer);
91
92 // Add this slot to the free list
93 gBuffers[id] = gBuffers[0];
robertphillips@google.comd6bcfa32013-07-18 18:33:39 +000094 gBuffers[0] = SkTCast<GrBufferObj*>((const void*)(intptr_t)id);
robertphillips@google.comd6543e52013-07-18 17:39:14 +000095}
96
bsalomon@google.com74913722011-10-27 20:44:19 +000097GrGLvoid GR_GL_FUNCTION_TYPE nullGLActiveTexture(GrGLenum texture) {}
98GrGLvoid GR_GL_FUNCTION_TYPE nullGLAttachShader(GrGLuint program, GrGLuint shader) {}
99GrGLvoid GR_GL_FUNCTION_TYPE nullGLBeginQuery(GrGLenum target, GrGLuint id) {}
100GrGLvoid GR_GL_FUNCTION_TYPE nullGLBindAttribLocation(GrGLuint program, GrGLuint index, const char* name) {}
101GrGLvoid GR_GL_FUNCTION_TYPE nullGLBindTexture(GrGLenum target, GrGLuint texture) {}
bsalomon@google.comecd84842013-03-01 15:36:02 +0000102GrGLvoid GR_GL_FUNCTION_TYPE nullGLBindVertexArray(GrGLuint id) {}
commit-bot@chromium.org46fbfe02013-08-30 15:52:12 +0000103GrGLvoid GR_GL_FUNCTION_TYPE nullGLClientActiveTexture(GrGLenum) {}
robertphillips@google.comd6543e52013-07-18 17:39:14 +0000104
105GrGLvoid GR_GL_FUNCTION_TYPE nullGLGenBuffers(GrGLsizei n, GrGLuint* ids) {
106
107 for (int i = 0; i < n; ++i) {
108 GrBufferObj* buffer = create_buffer();
109 ids[i] = buffer->id();
110 }
111}
112
commit-bot@chromium.orgcffff792013-07-26 16:36:04 +0000113GrGLvoid GR_GL_FUNCTION_TYPE nullGLGenerateMipmap(GrGLenum target) {}
114
skia.committer@gmail.coma7991982013-07-19 07:00:57 +0000115GrGLvoid GR_GL_FUNCTION_TYPE nullGLBufferData(GrGLenum target,
116 GrGLsizeiptr size,
117 const GrGLvoid* data,
robertphillips@google.comd6543e52013-07-18 17:39:14 +0000118 GrGLenum usage) {
119 GrGLuint id = 0;
120
121 switch (target) {
122 case GR_GL_ARRAY_BUFFER:
123 id = gCurrArrayBuffer;
124 break;
125 case GR_GL_ELEMENT_ARRAY_BUFFER:
126 id = gCurrElementArrayBuffer;
127 break;
128 default:
129 GrCrash("Unexpected target to nullGLBufferData");
130 break;
131 }
132
133 if (id > 0) {
134 GrBufferObj* buffer = look_up(id);
135 buffer->allocate(size, (const GrGLchar*) data);
136 }
137}
138
bsalomon@google.com74913722011-10-27 20:44:19 +0000139GrGLvoid GR_GL_FUNCTION_TYPE nullGLPixelStorei(GrGLenum pname, GrGLint param) {}
bsalomon@google.com74913722011-10-27 20:44:19 +0000140GrGLvoid GR_GL_FUNCTION_TYPE nullGLReadPixels(GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height, GrGLenum format, GrGLenum type, GrGLvoid* pixels) {}
bsalomon@google.com74913722011-10-27 20:44:19 +0000141GrGLvoid GR_GL_FUNCTION_TYPE nullGLUseProgram(GrGLuint program) {}
bsalomon@google.com74913722011-10-27 20:44:19 +0000142GrGLvoid GR_GL_FUNCTION_TYPE nullGLViewport(GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height) {}
143GrGLvoid GR_GL_FUNCTION_TYPE nullGLBindFramebuffer(GrGLenum target, GrGLuint framebuffer) {}
144GrGLvoid GR_GL_FUNCTION_TYPE nullGLBindRenderbuffer(GrGLenum target, GrGLuint renderbuffer) {}
145GrGLvoid GR_GL_FUNCTION_TYPE nullGLDeleteFramebuffers(GrGLsizei n, const GrGLuint *framebuffers) {}
146GrGLvoid GR_GL_FUNCTION_TYPE nullGLDeleteRenderbuffers(GrGLsizei n, const GrGLuint *renderbuffers) {}
147GrGLvoid GR_GL_FUNCTION_TYPE nullGLFramebufferRenderbuffer(GrGLenum target, GrGLenum attachment, GrGLenum renderbuffertarget, GrGLuint renderbuffer) {}
148GrGLvoid GR_GL_FUNCTION_TYPE nullGLFramebufferTexture2D(GrGLenum target, GrGLenum attachment, GrGLenum textarget, GrGLuint texture, GrGLint level) {}
bsalomon@google.com74913722011-10-27 20:44:19 +0000149
150GrGLuint GR_GL_FUNCTION_TYPE nullGLCreateProgram() {
robertphillips@google.comd6543e52013-07-18 17:39:14 +0000151 static GrGLuint gCurrID = 0;
bsalomon@google.com74913722011-10-27 20:44:19 +0000152 return ++gCurrID;
153}
154
155GrGLuint GR_GL_FUNCTION_TYPE nullGLCreateShader(GrGLenum type) {
robertphillips@google.comd6543e52013-07-18 17:39:14 +0000156 static GrGLuint gCurrID = 0;
bsalomon@google.com74913722011-10-27 20:44:19 +0000157 return ++gCurrID;
158}
159
160// same delete used for shaders and programs
161GrGLvoid GR_GL_FUNCTION_TYPE nullGLDelete(GrGLuint program) {
162}
163
bsalomon@google.com74913722011-10-27 20:44:19 +0000164GrGLvoid GR_GL_FUNCTION_TYPE nullGLBindBuffer(GrGLenum target, GrGLuint buffer) {
165 switch (target) {
166 case GR_GL_ARRAY_BUFFER:
167 gCurrArrayBuffer = buffer;
168 break;
169 case GR_GL_ELEMENT_ARRAY_BUFFER:
170 gCurrElementArrayBuffer = buffer;
171 break;
172 }
173}
174
175// deleting a bound buffer has the side effect of binding 0
176GrGLvoid GR_GL_FUNCTION_TYPE nullGLDeleteBuffers(GrGLsizei n, const GrGLuint* ids) {
177 for (int i = 0; i < n; ++i) {
178 if (ids[i] == gCurrArrayBuffer) {
179 gCurrArrayBuffer = 0;
180 }
181 if (ids[i] == gCurrElementArrayBuffer) {
182 gCurrElementArrayBuffer = 0;
183 }
robertphillips@google.comd6543e52013-07-18 17:39:14 +0000184
185 GrBufferObj* buffer = look_up(ids[i]);
186 delete_buffer(buffer);
bsalomon@google.com74913722011-10-27 20:44:19 +0000187 }
188}
189
190GrGLvoid* GR_GL_FUNCTION_TYPE nullGLMapBuffer(GrGLenum target, GrGLenum access) {
robertphillips@google.comd6543e52013-07-18 17:39:14 +0000191
192 GrGLuint id = 0;
bsalomon@google.com74913722011-10-27 20:44:19 +0000193 switch (target) {
194 case GR_GL_ARRAY_BUFFER:
robertphillips@google.comd6543e52013-07-18 17:39:14 +0000195 id = gCurrArrayBuffer;
bsalomon@google.com74913722011-10-27 20:44:19 +0000196 break;
197 case GR_GL_ELEMENT_ARRAY_BUFFER:
robertphillips@google.comd6543e52013-07-18 17:39:14 +0000198 id = gCurrElementArrayBuffer;
bsalomon@google.com74913722011-10-27 20:44:19 +0000199 break;
200 }
robertphillips@google.comd6543e52013-07-18 17:39:14 +0000201
202 if (id > 0) {
203 GrBufferObj* buffer = look_up(id);
tfarina@chromium.orgf6de4752013-08-17 00:02:59 +0000204 SkASSERT(!buffer->mapped());
robertphillips@google.comd6543e52013-07-18 17:39:14 +0000205 buffer->setMapped(true);
206 return buffer->dataPtr();
bsalomon@google.com74913722011-10-27 20:44:19 +0000207 }
robertphillips@google.comd6543e52013-07-18 17:39:14 +0000208
tfarina@chromium.orgf6de4752013-08-17 00:02:59 +0000209 SkASSERT(false);
robertphillips@google.comd6543e52013-07-18 17:39:14 +0000210 return NULL; // no buffer bound to target
bsalomon@google.com74913722011-10-27 20:44:19 +0000211}
212
213GrGLboolean GR_GL_FUNCTION_TYPE nullGLUnmapBuffer(GrGLenum target) {
robertphillips@google.comd6543e52013-07-18 17:39:14 +0000214 GrGLuint id = 0;
bsalomon@google.com74913722011-10-27 20:44:19 +0000215 switch (target) {
216 case GR_GL_ARRAY_BUFFER:
robertphillips@google.comd6543e52013-07-18 17:39:14 +0000217 id = gCurrArrayBuffer;
bsalomon@google.com74913722011-10-27 20:44:19 +0000218 break;
219 case GR_GL_ELEMENT_ARRAY_BUFFER:
robertphillips@google.comd6543e52013-07-18 17:39:14 +0000220 id = gCurrElementArrayBuffer;
bsalomon@google.com74913722011-10-27 20:44:19 +0000221 break;
222 }
robertphillips@google.comd6543e52013-07-18 17:39:14 +0000223 if (id > 0) {
224 GrBufferObj* buffer = look_up(id);
tfarina@chromium.orgf6de4752013-08-17 00:02:59 +0000225 SkASSERT(buffer->mapped());
robertphillips@google.comd6543e52013-07-18 17:39:14 +0000226 buffer->setMapped(false);
227 return GR_GL_TRUE;
bsalomon@google.com74913722011-10-27 20:44:19 +0000228 }
robertphillips@google.comd6543e52013-07-18 17:39:14 +0000229
230 GrAlwaysAssert(false);
231 return GR_GL_FALSE; // GR_GL_INVALID_OPERATION;
bsalomon@google.com74913722011-10-27 20:44:19 +0000232}
233
234GrGLvoid GR_GL_FUNCTION_TYPE nullGLGetBufferParameteriv(GrGLenum target, GrGLenum pname, GrGLint* params) {
235 switch (pname) {
236 case GR_GL_BUFFER_MAPPED: {
237 *params = GR_GL_FALSE;
robertphillips@google.comd6543e52013-07-18 17:39:14 +0000238 GrGLuint id = 0;
bsalomon@google.com74913722011-10-27 20:44:19 +0000239 switch (target) {
240 case GR_GL_ARRAY_BUFFER:
robertphillips@google.comd6543e52013-07-18 17:39:14 +0000241 id = gCurrArrayBuffer;
bsalomon@google.com74913722011-10-27 20:44:19 +0000242 break;
243 case GR_GL_ELEMENT_ARRAY_BUFFER:
robertphillips@google.comd6543e52013-07-18 17:39:14 +0000244 id = gCurrElementArrayBuffer;
rmistry@google.comfbfcd562012-08-23 18:09:54 +0000245 break;
bsalomon@google.com74913722011-10-27 20:44:19 +0000246 }
robertphillips@google.comd6543e52013-07-18 17:39:14 +0000247 if (id > 0) {
248 GrBufferObj* buffer = look_up(id);
249 if (buffer->mapped()) {
250 *params = GR_GL_TRUE;
bsalomon@google.com74913722011-10-27 20:44:19 +0000251 }
252 }
253 break; }
254 default:
255 GrCrash("Unexpected pname to GetBufferParamateriv");
256 break;
257 }
258};
259
caryclark@google.comcf6285b2012-06-06 12:09:01 +0000260} // end anonymous namespace
261
bsalomon@google.com74913722011-10-27 20:44:19 +0000262const GrGLInterface* GrGLCreateNullInterface() {
rmistry@google.comfbfcd562012-08-23 18:09:54 +0000263 // The gl functions are not context-specific so we create one global
bsalomon@google.com74913722011-10-27 20:44:19 +0000264 // interface
265 static SkAutoTUnref<GrGLInterface> glInterface;
266 if (!glInterface.get()) {
tomhudson@google.comc377baf2012-07-09 20:17:56 +0000267 GrGLInterface* interface = SkNEW(GrGLInterface);
bsalomon@google.com74913722011-10-27 20:44:19 +0000268 glInterface.reset(interface);
269 interface->fBindingsExported = kDesktop_GrGLBinding;
270 interface->fActiveTexture = nullGLActiveTexture;
271 interface->fAttachShader = nullGLAttachShader;
272 interface->fBeginQuery = nullGLBeginQuery;
273 interface->fBindAttribLocation = nullGLBindAttribLocation;
274 interface->fBindBuffer = nullGLBindBuffer;
bsalomon@google.com8f943612013-02-26 14:34:43 +0000275 interface->fBindFragDataLocation = noOpGLBindFragDataLocation;
bsalomon@google.com74913722011-10-27 20:44:19 +0000276 interface->fBindTexture = nullGLBindTexture;
bsalomon@google.comecd84842013-03-01 15:36:02 +0000277 interface->fBindVertexArray = nullGLBindVertexArray;
bsalomon@google.com8f943612013-02-26 14:34:43 +0000278 interface->fBlendColor = noOpGLBlendColor;
279 interface->fBlendFunc = noOpGLBlendFunc;
bsalomon@google.com74913722011-10-27 20:44:19 +0000280 interface->fBufferData = nullGLBufferData;
bsalomon@google.com8f943612013-02-26 14:34:43 +0000281 interface->fBufferSubData = noOpGLBufferSubData;
282 interface->fClear = noOpGLClear;
283 interface->fClearColor = noOpGLClearColor;
284 interface->fClearStencil = noOpGLClearStencil;
commit-bot@chromium.org46fbfe02013-08-30 15:52:12 +0000285 interface->fClientActiveTexture = nullGLClientActiveTexture;
bsalomon@google.com8f943612013-02-26 14:34:43 +0000286 interface->fColorMask = noOpGLColorMask;
287 interface->fCompileShader = noOpGLCompileShader;
288 interface->fCompressedTexImage2D = noOpGLCompressedTexImage2D;
commit-bot@chromium.org98168bb2013-04-11 22:00:34 +0000289 interface->fCopyTexSubImage2D = noOpGLCopyTexSubImage2D;
bsalomon@google.com74913722011-10-27 20:44:19 +0000290 interface->fCreateProgram = nullGLCreateProgram;
291 interface->fCreateShader = nullGLCreateShader;
bsalomon@google.com8f943612013-02-26 14:34:43 +0000292 interface->fCullFace = noOpGLCullFace;
bsalomon@google.com74913722011-10-27 20:44:19 +0000293 interface->fDeleteBuffers = nullGLDeleteBuffers;
294 interface->fDeleteProgram = nullGLDelete;
bsalomon@google.com8f943612013-02-26 14:34:43 +0000295 interface->fDeleteQueries = noOpGLDeleteIds;
bsalomon@google.com74913722011-10-27 20:44:19 +0000296 interface->fDeleteShader = nullGLDelete;
bsalomon@google.com8f943612013-02-26 14:34:43 +0000297 interface->fDeleteTextures = noOpGLDeleteIds;
bsalomon@google.comecd84842013-03-01 15:36:02 +0000298 interface->fDeleteVertexArrays = noOpGLDeleteIds;
bsalomon@google.com8f943612013-02-26 14:34:43 +0000299 interface->fDepthMask = noOpGLDepthMask;
300 interface->fDisable = noOpGLDisable;
commit-bot@chromium.org46fbfe02013-08-30 15:52:12 +0000301 interface->fDisableClientState = noOpGLDisableClientState;
bsalomon@google.com8f943612013-02-26 14:34:43 +0000302 interface->fDisableVertexAttribArray = noOpGLDisableVertexAttribArray;
303 interface->fDrawArrays = noOpGLDrawArrays;
304 interface->fDrawBuffer = noOpGLDrawBuffer;
305 interface->fDrawBuffers = noOpGLDrawBuffers;
306 interface->fDrawElements = noOpGLDrawElements;
307 interface->fEnable = noOpGLEnable;
commit-bot@chromium.org46fbfe02013-08-30 15:52:12 +0000308 interface->fEnableClientState = noOpGLEnableClientState;
bsalomon@google.com8f943612013-02-26 14:34:43 +0000309 interface->fEnableVertexAttribArray = noOpGLEnableVertexAttribArray;
310 interface->fEndQuery = noOpGLEndQuery;
311 interface->fFinish = noOpGLFinish;
312 interface->fFlush = noOpGLFlush;
313 interface->fFrontFace = noOpGLFrontFace;
robertphillips@google.comd6543e52013-07-18 17:39:14 +0000314 interface->fGenBuffers = nullGLGenBuffers;
commit-bot@chromium.orgcffff792013-07-26 16:36:04 +0000315 interface->fGenerateMipmap = nullGLGenerateMipmap;
bsalomon@google.com8f943612013-02-26 14:34:43 +0000316 interface->fGenQueries = noOpGLGenIds;
317 interface->fGenTextures = noOpGLGenIds;
bsalomon@google.comecd84842013-03-01 15:36:02 +0000318 interface->fGenVertexArrays = noOpGLGenIds;
bsalomon@google.com74913722011-10-27 20:44:19 +0000319 interface->fGetBufferParameteriv = nullGLGetBufferParameteriv;
bsalomon@google.com8f943612013-02-26 14:34:43 +0000320 interface->fGetError = noOpGLGetError;
321 interface->fGetIntegerv = noOpGLGetIntegerv;
322 interface->fGetQueryObjecti64v = noOpGLGetQueryObjecti64v;
323 interface->fGetQueryObjectiv = noOpGLGetQueryObjectiv;
324 interface->fGetQueryObjectui64v = noOpGLGetQueryObjectui64v;
325 interface->fGetQueryObjectuiv = noOpGLGetQueryObjectuiv;
326 interface->fGetQueryiv = noOpGLGetQueryiv;
327 interface->fGetProgramInfoLog = noOpGLGetInfoLog;
328 interface->fGetProgramiv = noOpGLGetShaderOrProgramiv;
329 interface->fGetShaderInfoLog = noOpGLGetInfoLog;
330 interface->fGetShaderiv = noOpGLGetShaderOrProgramiv;
331 interface->fGetString = noOpGLGetString;
bsalomon@google.com1744f972013-02-26 21:46:32 +0000332 interface->fGetStringi = noOpGLGetStringi;
bsalomon@google.com8f943612013-02-26 14:34:43 +0000333 interface->fGetTexLevelParameteriv = noOpGLGetTexLevelParameteriv;
334 interface->fGetUniformLocation = noOpGLGetUniformLocation;
commit-bot@chromium.org46fbfe02013-08-30 15:52:12 +0000335 interface->fLoadIdentity = noOpGLLoadIdentity;
336 interface->fLoadMatrixf = noOpGLLoadMatrixf;
bsalomon@google.com8f943612013-02-26 14:34:43 +0000337 interface->fLineWidth = noOpGLLineWidth;
338 interface->fLinkProgram = noOpGLLinkProgram;
commit-bot@chromium.org46fbfe02013-08-30 15:52:12 +0000339 interface->fMatrixMode = noOpGLMatrixMode;
bsalomon@google.com74913722011-10-27 20:44:19 +0000340 interface->fPixelStorei = nullGLPixelStorei;
bsalomon@google.com8f943612013-02-26 14:34:43 +0000341 interface->fQueryCounter = noOpGLQueryCounter;
342 interface->fReadBuffer = noOpGLReadBuffer;
bsalomon@google.com74913722011-10-27 20:44:19 +0000343 interface->fReadPixels = nullGLReadPixels;
bsalomon@google.com8f943612013-02-26 14:34:43 +0000344 interface->fScissor = noOpGLScissor;
345 interface->fShaderSource = noOpGLShaderSource;
346 interface->fStencilFunc = noOpGLStencilFunc;
347 interface->fStencilFuncSeparate = noOpGLStencilFuncSeparate;
348 interface->fStencilMask = noOpGLStencilMask;
349 interface->fStencilMaskSeparate = noOpGLStencilMaskSeparate;
350 interface->fStencilOp = noOpGLStencilOp;
351 interface->fStencilOpSeparate = noOpGLStencilOpSeparate;
commit-bot@chromium.org46fbfe02013-08-30 15:52:12 +0000352 interface->fTexGenf = noOpGLTexGenf;
353 interface->fTexGenfv = noOpGLTexGenfv;
354 interface->fTexGeni = noOpGLTexGeni;
bsalomon@google.com8f943612013-02-26 14:34:43 +0000355 interface->fTexImage2D = noOpGLTexImage2D;
356 interface->fTexParameteri = noOpGLTexParameteri;
357 interface->fTexParameteriv = noOpGLTexParameteriv;
358 interface->fTexSubImage2D = noOpGLTexSubImage2D;
359 interface->fTexStorage2D = noOpGLTexStorage2D;
robertphillips@google.coma6ffb582013-04-29 16:50:17 +0000360 interface->fDiscardFramebuffer = noOpGLDiscardFramebuffer;
bsalomon@google.com8f943612013-02-26 14:34:43 +0000361 interface->fUniform1f = noOpGLUniform1f;
362 interface->fUniform1i = noOpGLUniform1i;
363 interface->fUniform1fv = noOpGLUniform1fv;
364 interface->fUniform1iv = noOpGLUniform1iv;
365 interface->fUniform2f = noOpGLUniform2f;
366 interface->fUniform2i = noOpGLUniform2i;
367 interface->fUniform2fv = noOpGLUniform2fv;
368 interface->fUniform2iv = noOpGLUniform2iv;
369 interface->fUniform3f = noOpGLUniform3f;
370 interface->fUniform3i = noOpGLUniform3i;
371 interface->fUniform3fv = noOpGLUniform3fv;
372 interface->fUniform3iv = noOpGLUniform3iv;
373 interface->fUniform4f = noOpGLUniform4f;
374 interface->fUniform4i = noOpGLUniform4i;
375 interface->fUniform4fv = noOpGLUniform4fv;
376 interface->fUniform4iv = noOpGLUniform4iv;
377 interface->fUniformMatrix2fv = noOpGLUniformMatrix2fv;
378 interface->fUniformMatrix3fv = noOpGLUniformMatrix3fv;
379 interface->fUniformMatrix4fv = noOpGLUniformMatrix4fv;
bsalomon@google.com74913722011-10-27 20:44:19 +0000380 interface->fUseProgram = nullGLUseProgram;
bsalomon@google.com8f943612013-02-26 14:34:43 +0000381 interface->fVertexAttrib4fv = noOpGLVertexAttrib4fv;
382 interface->fVertexAttribPointer = noOpGLVertexAttribPointer;
commit-bot@chromium.org46fbfe02013-08-30 15:52:12 +0000383 interface->fVertexPointer = noOpGLVertexPointer;
bsalomon@google.com74913722011-10-27 20:44:19 +0000384 interface->fViewport = nullGLViewport;
385 interface->fBindFramebuffer = nullGLBindFramebuffer;
386 interface->fBindRenderbuffer = nullGLBindRenderbuffer;
bsalomon@google.com8f943612013-02-26 14:34:43 +0000387 interface->fCheckFramebufferStatus = noOpGLCheckFramebufferStatus;
bsalomon@google.com74913722011-10-27 20:44:19 +0000388 interface->fDeleteFramebuffers = nullGLDeleteFramebuffers;
389 interface->fDeleteRenderbuffers = nullGLDeleteRenderbuffers;
390 interface->fFramebufferRenderbuffer = nullGLFramebufferRenderbuffer;
391 interface->fFramebufferTexture2D = nullGLFramebufferTexture2D;
bsalomon@google.com8f943612013-02-26 14:34:43 +0000392 interface->fGenFramebuffers = noOpGLGenIds;
393 interface->fGenRenderbuffers = noOpGLGenIds;
394 interface->fGetFramebufferAttachmentParameteriv = noOpGLGetFramebufferAttachmentParameteriv;
395 interface->fGetRenderbufferParameteriv = noOpGLGetRenderbufferParameteriv;
396 interface->fRenderbufferStorage = noOpGLRenderbufferStorage;
397 interface->fRenderbufferStorageMultisample = noOpGLRenderbufferStorageMultisample;
398 interface->fBlitFramebuffer = noOpGLBlitFramebuffer;
399 interface->fResolveMultisampleFramebuffer = noOpGLResolveMultisampleFramebuffer;
bsalomon@google.com74913722011-10-27 20:44:19 +0000400 interface->fMapBuffer = nullGLMapBuffer;
401 interface->fUnmapBuffer = nullGLUnmapBuffer;
bsalomon@google.com8f943612013-02-26 14:34:43 +0000402 interface->fBindFragDataLocationIndexed = noOpGLBindFragDataLocationIndexed;
bsalomon@google.com74913722011-10-27 20:44:19 +0000403 }
404 glInterface.get()->ref();
405 return glInterface.get();
406}