174913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com/* 274913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com * Copyright 2011 Google Inc. 374913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com * 474913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com * Use of this source code is governed by a BSD-style license that can be 574913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com * found in the LICENSE file. 674913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com */ 774913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com 874913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com 96bf38b59c9de1cd35cd091cf8766117f4e1f66a0tomhudson@google.com#include "gl/GrGLInterface.h" 1091bcc94e8710c1ec5126a31cd805a6c64bb3c39dbsalomon@google.com#include "GrGLDefines.h" 1121cbec4870660f776f470e3a5e327599b6433dd2bsalomon@google.com#include "SkTDArray.h" 128f9436161a83ea89818a486db1577e24ad33ec7bbsalomon@google.com#include "GrGLNoOpInterface.h" 13776d355147307357e47cc65d51706a4231ff95b5bsalomon#include "SkTLS.h" 148f9436161a83ea89818a486db1577e24ad33ec7bbsalomon@google.com 15776d355147307357e47cc65d51706a4231ff95b5bsalomonclass BufferObj { 16d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.compublic: 17776d355147307357e47cc65d51706a4231ff95b5bsalomon SK_DECLARE_INST_COUNT_ROOT(BufferObj); 18776d355147307357e47cc65d51706a4231ff95b5bsalomon 19776d355147307357e47cc65d51706a4231ff95b5bsalomon BufferObj(GrGLuint id) : fID(id), fDataPtr(NULL), fSize(0), fMapped(false) { 20d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com } 21776d355147307357e47cc65d51706a4231ff95b5bsalomon ~BufferObj() { SkDELETE_ARRAY(fDataPtr); } 22d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com 23ae6b777ba6d37b5330cdadc15ccff796fe172ca2robertphillips@google.com void allocate(GrGLsizeiptr size, const GrGLchar* dataPtr) { 2449f085dddff10473b6ebf832a974288300224e60bsalomon if (fDataPtr) { 25f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org SkASSERT(0 != fSize); 26d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com SkDELETE_ARRAY(fDataPtr); 27d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com } 28d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com 29d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com fSize = size; 30d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com fDataPtr = SkNEW_ARRAY(char, size); 31d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com } 32d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com 33d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com GrGLuint id() const { return fID; } 34d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com GrGLchar* dataPtr() { return fDataPtr; } 35ae6b777ba6d37b5330cdadc15ccff796fe172ca2robertphillips@google.com GrGLsizeiptr size() const { return fSize; } 36d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com 37d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com void setMapped(bool mapped) { fMapped = mapped; } 38d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com bool mapped() const { return fMapped; } 39d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com 40d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.comprivate: 41d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com GrGLuint fID; 42d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com GrGLchar* fDataPtr; 43ae6b777ba6d37b5330cdadc15ccff796fe172ca2robertphillips@google.com GrGLsizeiptr fSize; // size in bytes 44d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com bool fMapped; 45d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com}; 46d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com 47776d355147307357e47cc65d51706a4231ff95b5bsalomon// This class maintains a sparsely populated array of buffer pointers. 48776d355147307357e47cc65d51706a4231ff95b5bsalomonclass BufferManager { 49776d355147307357e47cc65d51706a4231ff95b5bsalomonpublic: 50776d355147307357e47cc65d51706a4231ff95b5bsalomon SK_DECLARE_INST_COUNT_ROOT(BufferManager); 51d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com 52776d355147307357e47cc65d51706a4231ff95b5bsalomon BufferManager() : fFreeListHead(kFreeListEnd) {} 53776d355147307357e47cc65d51706a4231ff95b5bsalomon 54776d355147307357e47cc65d51706a4231ff95b5bsalomon ~BufferManager() { 55776d355147307357e47cc65d51706a4231ff95b5bsalomon // NULL out the entries that are really free list links rather than ptrs before deleting. 56776d355147307357e47cc65d51706a4231ff95b5bsalomon intptr_t curr = fFreeListHead; 57776d355147307357e47cc65d51706a4231ff95b5bsalomon while (kFreeListEnd != curr) { 58776d355147307357e47cc65d51706a4231ff95b5bsalomon intptr_t next = reinterpret_cast<intptr_t>(fBuffers[SkToS32(curr)]); 59776d355147307357e47cc65d51706a4231ff95b5bsalomon fBuffers[SkToS32(curr)] = NULL; 60776d355147307357e47cc65d51706a4231ff95b5bsalomon curr = next; 61776d355147307357e47cc65d51706a4231ff95b5bsalomon } 62d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com 63776d355147307357e47cc65d51706a4231ff95b5bsalomon fBuffers.deleteAll(); 64d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com } 65d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com 66776d355147307357e47cc65d51706a4231ff95b5bsalomon BufferObj* lookUp(GrGLuint id) { 67776d355147307357e47cc65d51706a4231ff95b5bsalomon BufferObj* buffer = fBuffers[id]; 6849f085dddff10473b6ebf832a974288300224e60bsalomon SkASSERT(buffer && buffer->id() == id); 69776d355147307357e47cc65d51706a4231ff95b5bsalomon return buffer; 70d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com } 71d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com 72776d355147307357e47cc65d51706a4231ff95b5bsalomon BufferObj* create() { 73776d355147307357e47cc65d51706a4231ff95b5bsalomon GrGLuint id; 74776d355147307357e47cc65d51706a4231ff95b5bsalomon BufferObj* buffer; 75776d355147307357e47cc65d51706a4231ff95b5bsalomon 76776d355147307357e47cc65d51706a4231ff95b5bsalomon if (kFreeListEnd == fFreeListHead) { 77776d355147307357e47cc65d51706a4231ff95b5bsalomon // no free slots - create a new one 78776d355147307357e47cc65d51706a4231ff95b5bsalomon id = fBuffers.count(); 79776d355147307357e47cc65d51706a4231ff95b5bsalomon buffer = SkNEW_ARGS(BufferObj, (id)); 80776d355147307357e47cc65d51706a4231ff95b5bsalomon *fBuffers.append() = buffer; 81776d355147307357e47cc65d51706a4231ff95b5bsalomon } else { 82776d355147307357e47cc65d51706a4231ff95b5bsalomon // grab the head of the free list and advance the head to the next free slot. 83776d355147307357e47cc65d51706a4231ff95b5bsalomon id = static_cast<GrGLuint>(fFreeListHead); 84776d355147307357e47cc65d51706a4231ff95b5bsalomon fFreeListHead = reinterpret_cast<intptr_t>(fBuffers[id]); 85776d355147307357e47cc65d51706a4231ff95b5bsalomon 86776d355147307357e47cc65d51706a4231ff95b5bsalomon buffer = SkNEW_ARGS(BufferObj, (id)); 87776d355147307357e47cc65d51706a4231ff95b5bsalomon fBuffers[id] = buffer; 88776d355147307357e47cc65d51706a4231ff95b5bsalomon } 89d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com 90776d355147307357e47cc65d51706a4231ff95b5bsalomon return buffer; 91776d355147307357e47cc65d51706a4231ff95b5bsalomon } 92d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com 93776d355147307357e47cc65d51706a4231ff95b5bsalomon void free(BufferObj* buffer) { 94776d355147307357e47cc65d51706a4231ff95b5bsalomon SkASSERT(fBuffers.count() > 0); 95d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com 96776d355147307357e47cc65d51706a4231ff95b5bsalomon GrGLuint id = buffer->id(); 97776d355147307357e47cc65d51706a4231ff95b5bsalomon SkDELETE(buffer); 98776d355147307357e47cc65d51706a4231ff95b5bsalomon 99776d355147307357e47cc65d51706a4231ff95b5bsalomon fBuffers[id] = reinterpret_cast<BufferObj*>(fFreeListHead); 100776d355147307357e47cc65d51706a4231ff95b5bsalomon fFreeListHead = id; 101776d355147307357e47cc65d51706a4231ff95b5bsalomon } 102776d355147307357e47cc65d51706a4231ff95b5bsalomon 103776d355147307357e47cc65d51706a4231ff95b5bsalomonprivate: 104776d355147307357e47cc65d51706a4231ff95b5bsalomon static const intptr_t kFreeListEnd = -1; 105776d355147307357e47cc65d51706a4231ff95b5bsalomon // Index of the first entry of fBuffers in the free list. Free slots in fBuffers are indices to 106776d355147307357e47cc65d51706a4231ff95b5bsalomon // the next free slot. The last free slot has a value of kFreeListEnd. 107776d355147307357e47cc65d51706a4231ff95b5bsalomon intptr_t fFreeListHead; 108776d355147307357e47cc65d51706a4231ff95b5bsalomon SkTDArray<BufferObj*> fBuffers; 109776d355147307357e47cc65d51706a4231ff95b5bsalomon}; 110776d355147307357e47cc65d51706a4231ff95b5bsalomon 111776d355147307357e47cc65d51706a4231ff95b5bsalomon/** 112776d355147307357e47cc65d51706a4231ff95b5bsalomon * The global-to-thread state object for the null interface. All null interfaces on the 113776d355147307357e47cc65d51706a4231ff95b5bsalomon * same thread currently share one of these. This means two null contexts on the same thread 114776d355147307357e47cc65d51706a4231ff95b5bsalomon * can interfere with each other. It may make sense to more integrate this into SkNullGLContext 115776d355147307357e47cc65d51706a4231ff95b5bsalomon * and use it's makeCurrent mechanism. 116776d355147307357e47cc65d51706a4231ff95b5bsalomon */ 117776d355147307357e47cc65d51706a4231ff95b5bsalomonstruct ThreadContext { 118776d355147307357e47cc65d51706a4231ff95b5bsalomonpublic: 119776d355147307357e47cc65d51706a4231ff95b5bsalomon SK_DECLARE_INST_COUNT_ROOT(ThreadContext); 120776d355147307357e47cc65d51706a4231ff95b5bsalomon 121776d355147307357e47cc65d51706a4231ff95b5bsalomon BufferManager fBufferManager; 122776d355147307357e47cc65d51706a4231ff95b5bsalomon GrGLuint fCurrArrayBuffer; 123776d355147307357e47cc65d51706a4231ff95b5bsalomon GrGLuint fCurrElementArrayBuffer; 124776d355147307357e47cc65d51706a4231ff95b5bsalomon GrGLuint fCurrProgramID; 125776d355147307357e47cc65d51706a4231ff95b5bsalomon GrGLuint fCurrShaderID; 126776d355147307357e47cc65d51706a4231ff95b5bsalomon 127776d355147307357e47cc65d51706a4231ff95b5bsalomon static ThreadContext* Get() { 128776d355147307357e47cc65d51706a4231ff95b5bsalomon return reinterpret_cast<ThreadContext*>(SkTLS::Get(Create, Delete)); 129776d355147307357e47cc65d51706a4231ff95b5bsalomon } 130776d355147307357e47cc65d51706a4231ff95b5bsalomon 131776d355147307357e47cc65d51706a4231ff95b5bsalomon ThreadContext() 132776d355147307357e47cc65d51706a4231ff95b5bsalomon : fCurrArrayBuffer(0) 133776d355147307357e47cc65d51706a4231ff95b5bsalomon , fCurrElementArrayBuffer(0) 134776d355147307357e47cc65d51706a4231ff95b5bsalomon , fCurrProgramID(0) 135776d355147307357e47cc65d51706a4231ff95b5bsalomon , fCurrShaderID(0) {} 136776d355147307357e47cc65d51706a4231ff95b5bsalomon 137776d355147307357e47cc65d51706a4231ff95b5bsalomonprivate: 138776d355147307357e47cc65d51706a4231ff95b5bsalomon static void* Create() { return SkNEW(ThreadContext ); } 139776d355147307357e47cc65d51706a4231ff95b5bsalomon static void Delete(void* context) { SkDELETE(reinterpret_cast<ThreadContext *>(context)); } 140776d355147307357e47cc65d51706a4231ff95b5bsalomon}; 141776d355147307357e47cc65d51706a4231ff95b5bsalomon 142776d355147307357e47cc65d51706a4231ff95b5bsalomon// Functions not declared in GrGLBogusInterface.h (not common with the Debug GL interface). 143776d355147307357e47cc65d51706a4231ff95b5bsalomon 144776d355147307357e47cc65d51706a4231ff95b5bsalomonnamespace { // added to suppress 'no previous prototype' warning 145d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com 14674913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.comGrGLvoid GR_GL_FUNCTION_TYPE nullGLActiveTexture(GrGLenum texture) {} 14774913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.comGrGLvoid GR_GL_FUNCTION_TYPE nullGLAttachShader(GrGLuint program, GrGLuint shader) {} 14874913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.comGrGLvoid GR_GL_FUNCTION_TYPE nullGLBeginQuery(GrGLenum target, GrGLuint id) {} 14974913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.comGrGLvoid GR_GL_FUNCTION_TYPE nullGLBindAttribLocation(GrGLuint program, GrGLuint index, const char* name) {} 15074913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.comGrGLvoid GR_GL_FUNCTION_TYPE nullGLBindTexture(GrGLenum target, GrGLuint texture) {} 151ecd84842b3f65918eb040c53391172b6413fd7adbsalomon@google.comGrGLvoid GR_GL_FUNCTION_TYPE nullGLBindVertexArray(GrGLuint id) {} 152d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com 153d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.comGrGLvoid GR_GL_FUNCTION_TYPE nullGLGenBuffers(GrGLsizei n, GrGLuint* ids) { 154776d355147307357e47cc65d51706a4231ff95b5bsalomon ThreadContext* ctx = ThreadContext::Get(); 155d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com for (int i = 0; i < n; ++i) { 156776d355147307357e47cc65d51706a4231ff95b5bsalomon BufferObj* buffer = ctx->fBufferManager.create(); 157d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com ids[i] = buffer->id(); 158d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com } 159d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com} 160d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com 161cffff79a40bd7672e13b31b9801a3f3cda64875ecommit-bot@chromium.orgGrGLvoid GR_GL_FUNCTION_TYPE nullGLGenerateMipmap(GrGLenum target) {} 162cffff79a40bd7672e13b31b9801a3f3cda64875ecommit-bot@chromium.org 163a79919883e275e7a5e00afc50be10cc721f6ba1dskia.committer@gmail.comGrGLvoid GR_GL_FUNCTION_TYPE nullGLBufferData(GrGLenum target, 164a79919883e275e7a5e00afc50be10cc721f6ba1dskia.committer@gmail.com GrGLsizeiptr size, 165a79919883e275e7a5e00afc50be10cc721f6ba1dskia.committer@gmail.com const GrGLvoid* data, 166d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com GrGLenum usage) { 167776d355147307357e47cc65d51706a4231ff95b5bsalomon ThreadContext* ctx = ThreadContext::Get(); 168d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com GrGLuint id = 0; 169d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com 170d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com switch (target) { 171d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com case GR_GL_ARRAY_BUFFER: 172776d355147307357e47cc65d51706a4231ff95b5bsalomon id = ctx->fCurrArrayBuffer; 173d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com break; 174d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com case GR_GL_ELEMENT_ARRAY_BUFFER: 175776d355147307357e47cc65d51706a4231ff95b5bsalomon id = ctx->fCurrElementArrayBuffer; 176d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com break; 177d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com default: 17888cb22b6b4816c7a9ca6c5b795965b4606f9eb7bcommit-bot@chromium.org SkFAIL("Unexpected target to nullGLBufferData"); 179d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com break; 180d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com } 181d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com 182d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com if (id > 0) { 183776d355147307357e47cc65d51706a4231ff95b5bsalomon BufferObj* buffer = ctx->fBufferManager.lookUp(id); 184d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com buffer->allocate(size, (const GrGLchar*) data); 185d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com } 186d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com} 187d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com 18874913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.comGrGLvoid GR_GL_FUNCTION_TYPE nullGLPixelStorei(GrGLenum pname, GrGLint param) {} 18974913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.comGrGLvoid GR_GL_FUNCTION_TYPE nullGLReadPixels(GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height, GrGLenum format, GrGLenum type, GrGLvoid* pixels) {} 19074913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.comGrGLvoid GR_GL_FUNCTION_TYPE nullGLUseProgram(GrGLuint program) {} 19174913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.comGrGLvoid GR_GL_FUNCTION_TYPE nullGLViewport(GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height) {} 19274913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.comGrGLvoid GR_GL_FUNCTION_TYPE nullGLBindFramebuffer(GrGLenum target, GrGLuint framebuffer) {} 19374913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.comGrGLvoid GR_GL_FUNCTION_TYPE nullGLBindRenderbuffer(GrGLenum target, GrGLuint renderbuffer) {} 19474913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.comGrGLvoid GR_GL_FUNCTION_TYPE nullGLDeleteFramebuffers(GrGLsizei n, const GrGLuint *framebuffers) {} 19574913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.comGrGLvoid GR_GL_FUNCTION_TYPE nullGLDeleteRenderbuffers(GrGLsizei n, const GrGLuint *renderbuffers) {} 19674913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.comGrGLvoid GR_GL_FUNCTION_TYPE nullGLFramebufferRenderbuffer(GrGLenum target, GrGLenum attachment, GrGLenum renderbuffertarget, GrGLuint renderbuffer) {} 19774913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.comGrGLvoid GR_GL_FUNCTION_TYPE nullGLFramebufferTexture2D(GrGLenum target, GrGLenum attachment, GrGLenum textarget, GrGLuint texture, GrGLint level) {} 19874913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com 19974913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.comGrGLuint GR_GL_FUNCTION_TYPE nullGLCreateProgram() { 200776d355147307357e47cc65d51706a4231ff95b5bsalomon return ++ThreadContext::Get()->fCurrProgramID; 20174913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com} 20274913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com 20374913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.comGrGLuint GR_GL_FUNCTION_TYPE nullGLCreateShader(GrGLenum type) { 204776d355147307357e47cc65d51706a4231ff95b5bsalomon return ++ThreadContext::Get()->fCurrShaderID; 20574913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com} 20674913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com 20774913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com// same delete used for shaders and programs 20874913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.comGrGLvoid GR_GL_FUNCTION_TYPE nullGLDelete(GrGLuint program) { 20974913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com} 21074913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com 21174913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.comGrGLvoid GR_GL_FUNCTION_TYPE nullGLBindBuffer(GrGLenum target, GrGLuint buffer) { 212776d355147307357e47cc65d51706a4231ff95b5bsalomon ThreadContext* ctx = ThreadContext::Get(); 21374913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com switch (target) { 21474913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com case GR_GL_ARRAY_BUFFER: 215776d355147307357e47cc65d51706a4231ff95b5bsalomon ctx->fCurrArrayBuffer = buffer; 21674913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com break; 21774913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com case GR_GL_ELEMENT_ARRAY_BUFFER: 218776d355147307357e47cc65d51706a4231ff95b5bsalomon ctx->fCurrElementArrayBuffer = buffer; 21974913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com break; 22074913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com } 22174913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com} 22274913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com 22374913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com// deleting a bound buffer has the side effect of binding 0 22474913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.comGrGLvoid GR_GL_FUNCTION_TYPE nullGLDeleteBuffers(GrGLsizei n, const GrGLuint* ids) { 225776d355147307357e47cc65d51706a4231ff95b5bsalomon ThreadContext* ctx = ThreadContext::Get(); 22674913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com for (int i = 0; i < n; ++i) { 227776d355147307357e47cc65d51706a4231ff95b5bsalomon if (ids[i] == ctx->fCurrArrayBuffer) { 228776d355147307357e47cc65d51706a4231ff95b5bsalomon ctx->fCurrArrayBuffer = 0; 22974913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com } 230776d355147307357e47cc65d51706a4231ff95b5bsalomon if (ids[i] == ctx->fCurrElementArrayBuffer) { 231776d355147307357e47cc65d51706a4231ff95b5bsalomon ctx->fCurrElementArrayBuffer = 0; 23274913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com } 233d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com 234776d355147307357e47cc65d51706a4231ff95b5bsalomon BufferObj* buffer = ctx->fBufferManager.lookUp(ids[i]); 235776d355147307357e47cc65d51706a4231ff95b5bsalomon ctx->fBufferManager.free(buffer); 23674913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com } 23774913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com} 23874913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com 239160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.orgGrGLvoid* GR_GL_FUNCTION_TYPE nullGLMapBufferRange(GrGLenum target, GrGLintptr offset, 240160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org GrGLsizeiptr length, GrGLbitfield access) { 241776d355147307357e47cc65d51706a4231ff95b5bsalomon ThreadContext* ctx = ThreadContext::Get(); 242160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org GrGLuint id = 0; 243160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org switch (target) { 244160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org case GR_GL_ARRAY_BUFFER: 245776d355147307357e47cc65d51706a4231ff95b5bsalomon id = ctx->fCurrArrayBuffer; 246160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org break; 247160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org case GR_GL_ELEMENT_ARRAY_BUFFER: 248776d355147307357e47cc65d51706a4231ff95b5bsalomon id = ctx->fCurrElementArrayBuffer; 249160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org break; 250160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org } 25153b614b567c2213dfe3835f14145ab60e265c76edjsollen@google.com 252160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org if (id > 0) { 253160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org // We just ignore the offset and length here. 254776d355147307357e47cc65d51706a4231ff95b5bsalomon BufferObj* buffer = ctx->fBufferManager.lookUp(id); 255160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org SkASSERT(!buffer->mapped()); 256160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org buffer->setMapped(true); 257160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org return buffer->dataPtr(); 258160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org } 259160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org return NULL; 260160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org} 261160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org 262160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.orgGrGLvoid* GR_GL_FUNCTION_TYPE nullGLMapBuffer(GrGLenum target, GrGLenum access) { 263776d355147307357e47cc65d51706a4231ff95b5bsalomon ThreadContext* ctx = ThreadContext::Get(); 264d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com GrGLuint id = 0; 26574913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com switch (target) { 26674913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com case GR_GL_ARRAY_BUFFER: 267776d355147307357e47cc65d51706a4231ff95b5bsalomon id = ctx->fCurrArrayBuffer; 26874913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com break; 26974913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com case GR_GL_ELEMENT_ARRAY_BUFFER: 270776d355147307357e47cc65d51706a4231ff95b5bsalomon id = ctx->fCurrElementArrayBuffer; 27174913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com break; 27274913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com } 273d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com 274d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com if (id > 0) { 275776d355147307357e47cc65d51706a4231ff95b5bsalomon BufferObj* buffer = ctx->fBufferManager.lookUp(id); 276f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org SkASSERT(!buffer->mapped()); 277d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com buffer->setMapped(true); 278d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com return buffer->dataPtr(); 27974913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com } 280d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com 281f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org SkASSERT(false); 282d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com return NULL; // no buffer bound to target 28374913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com} 28474913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com 285160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.orgGrGLvoid GR_GL_FUNCTION_TYPE nullGLFlushMappedBufferRange(GrGLenum target, 286160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org GrGLintptr offset, 287160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org GrGLsizeiptr length) {} 288160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org 289160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org 29074913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.comGrGLboolean GR_GL_FUNCTION_TYPE nullGLUnmapBuffer(GrGLenum target) { 291776d355147307357e47cc65d51706a4231ff95b5bsalomon ThreadContext* ctx = ThreadContext::Get(); 292d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com GrGLuint id = 0; 29374913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com switch (target) { 29474913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com case GR_GL_ARRAY_BUFFER: 295776d355147307357e47cc65d51706a4231ff95b5bsalomon id = ctx->fCurrArrayBuffer; 29674913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com break; 29774913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com case GR_GL_ELEMENT_ARRAY_BUFFER: 298776d355147307357e47cc65d51706a4231ff95b5bsalomon id = ctx->fCurrElementArrayBuffer; 29974913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com break; 30074913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com } 301d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com if (id > 0) { 302776d355147307357e47cc65d51706a4231ff95b5bsalomon BufferObj* buffer = ctx->fBufferManager.lookUp(id); 303f6de475e5cbd143f348ff7738919e397b7fe7f57tfarina@chromium.org SkASSERT(buffer->mapped()); 304d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com buffer->setMapped(false); 305d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com return GR_GL_TRUE; 30674913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com } 307d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com 308d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com GrAlwaysAssert(false); 309d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com return GR_GL_FALSE; // GR_GL_INVALID_OPERATION; 31074913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com} 31174913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com 31274913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.comGrGLvoid GR_GL_FUNCTION_TYPE nullGLGetBufferParameteriv(GrGLenum target, GrGLenum pname, GrGLint* params) { 313776d355147307357e47cc65d51706a4231ff95b5bsalomon ThreadContext* ctx = ThreadContext::Get(); 31474913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com switch (pname) { 31574913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com case GR_GL_BUFFER_MAPPED: { 31674913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com *params = GR_GL_FALSE; 317d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com GrGLuint id = 0; 31874913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com switch (target) { 31974913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com case GR_GL_ARRAY_BUFFER: 320776d355147307357e47cc65d51706a4231ff95b5bsalomon id = ctx->fCurrArrayBuffer; 32174913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com break; 32274913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com case GR_GL_ELEMENT_ARRAY_BUFFER: 323776d355147307357e47cc65d51706a4231ff95b5bsalomon id = ctx->fCurrElementArrayBuffer; 324fbfcd5602128ec010c82cb733c9cdc0a3254f9f3rmistry@google.com break; 32574913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com } 326d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com if (id > 0) { 327776d355147307357e47cc65d51706a4231ff95b5bsalomon BufferObj* buffer = ctx->fBufferManager.lookUp(id); 328d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com if (buffer->mapped()) { 329d6543e5edae5d2fe9f364a563f41c1654b14e5f4robertphillips@google.com *params = GR_GL_TRUE; 33074913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com } 33174913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com } 33274913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com break; } 33374913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com default: 33488cb22b6b4816c7a9ca6c5b795965b4606f9eb7bcommit-bot@chromium.org SkFAIL("Unexpected pname to GetBufferParamateriv"); 33574913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com break; 33674913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com } 33774913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com}; 33874913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com 339cf6285b89b8820641ffb6871d4b3275bfe783f51caryclark@google.com} // end anonymous namespace 340cf6285b89b8820641ffb6871d4b3275bfe783f51caryclark@google.com 34174913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.comconst GrGLInterface* GrGLCreateNullInterface() { 342f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org GrGLInterface* interface = SkNEW(GrGLInterface); 343f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org 344f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org interface->fStandard = kGL_GrGLStandard; 345f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org 346f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org GrGLInterface::Functions* functions = &interface->fFunctions; 347f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fActiveTexture = nullGLActiveTexture; 348f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fAttachShader = nullGLAttachShader; 349f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fBeginQuery = nullGLBeginQuery; 350f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fBindAttribLocation = nullGLBindAttribLocation; 351f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fBindBuffer = nullGLBindBuffer; 352f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fBindFragDataLocation = noOpGLBindFragDataLocation; 353f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fBindTexture = nullGLBindTexture; 354f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fBindVertexArray = nullGLBindVertexArray; 355f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fBlendColor = noOpGLBlendColor; 356f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fBlendFunc = noOpGLBlendFunc; 357f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fBufferData = nullGLBufferData; 358f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fBufferSubData = noOpGLBufferSubData; 359f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fClear = noOpGLClear; 360f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fClearColor = noOpGLClearColor; 361f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fClearStencil = noOpGLClearStencil; 362f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fColorMask = noOpGLColorMask; 363f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fCompileShader = noOpGLCompileShader; 364f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fCompressedTexImage2D = noOpGLCompressedTexImage2D; 36537d20f75320e8182f4cdbce5f3d59a339f915e05krajcevski functions->fCompressedTexSubImage2D = noOpGLCompressedTexSubImage2D; 366f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fCopyTexSubImage2D = noOpGLCopyTexSubImage2D; 367f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fCreateProgram = nullGLCreateProgram; 368f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fCreateShader = nullGLCreateShader; 369f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fCullFace = noOpGLCullFace; 370f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fDeleteBuffers = nullGLDeleteBuffers; 371f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fDeleteProgram = nullGLDelete; 372f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fDeleteQueries = noOpGLDeleteIds; 373f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fDeleteShader = nullGLDelete; 374f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fDeleteTextures = noOpGLDeleteIds; 375f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fDeleteVertexArrays = noOpGLDeleteIds; 376f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fDepthMask = noOpGLDepthMask; 377f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fDisable = noOpGLDisable; 378f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fDisableVertexAttribArray = noOpGLDisableVertexAttribArray; 379f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fDrawArrays = noOpGLDrawArrays; 380f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fDrawBuffer = noOpGLDrawBuffer; 381f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fDrawBuffers = noOpGLDrawBuffers; 382f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fDrawElements = noOpGLDrawElements; 383f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fEnable = noOpGLEnable; 384f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fEnableVertexAttribArray = noOpGLEnableVertexAttribArray; 385f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fEndQuery = noOpGLEndQuery; 386f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fFinish = noOpGLFinish; 387f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fFlush = noOpGLFlush; 388160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org functions->fFlushMappedBufferRange = nullGLFlushMappedBufferRange; 389f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fFrontFace = noOpGLFrontFace; 390f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fGenBuffers = nullGLGenBuffers; 391f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fGenerateMipmap = nullGLGenerateMipmap; 392f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fGenQueries = noOpGLGenIds; 393f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fGenTextures = noOpGLGenIds; 394f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fGenVertexArrays = noOpGLGenIds; 395f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fGetBufferParameteriv = nullGLGetBufferParameteriv; 396f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fGetError = noOpGLGetError; 397f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fGetIntegerv = noOpGLGetIntegerv; 398f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fGetQueryObjecti64v = noOpGLGetQueryObjecti64v; 399f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fGetQueryObjectiv = noOpGLGetQueryObjectiv; 400f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fGetQueryObjectui64v = noOpGLGetQueryObjectui64v; 401f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fGetQueryObjectuiv = noOpGLGetQueryObjectuiv; 402f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fGetQueryiv = noOpGLGetQueryiv; 403f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fGetProgramInfoLog = noOpGLGetInfoLog; 404f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fGetProgramiv = noOpGLGetShaderOrProgramiv; 405f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fGetShaderInfoLog = noOpGLGetInfoLog; 406f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fGetShaderiv = noOpGLGetShaderOrProgramiv; 407f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fGetString = noOpGLGetString; 408f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fGetStringi = noOpGLGetStringi; 409f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fGetTexLevelParameteriv = noOpGLGetTexLevelParameteriv; 410f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fGetUniformLocation = noOpGLGetUniformLocation; 411f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fInsertEventMarker = noOpGLInsertEventMarker; 412f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fLineWidth = noOpGLLineWidth; 413f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fLinkProgram = noOpGLLinkProgram; 414160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org functions->fMapBuffer = nullGLMapBuffer; 415160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org functions->fMapBufferRange = nullGLMapBufferRange; 416f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fPixelStorei = nullGLPixelStorei; 417f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fPopGroupMarker = noOpGLPopGroupMarker; 418f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fPushGroupMarker = noOpGLPushGroupMarker; 419f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fQueryCounter = noOpGLQueryCounter; 420f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fReadBuffer = noOpGLReadBuffer; 421f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fReadPixels = nullGLReadPixels; 422f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fScissor = noOpGLScissor; 423f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fShaderSource = noOpGLShaderSource; 424f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fStencilFunc = noOpGLStencilFunc; 425f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fStencilFuncSeparate = noOpGLStencilFuncSeparate; 426f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fStencilMask = noOpGLStencilMask; 427f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fStencilMaskSeparate = noOpGLStencilMaskSeparate; 428f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fStencilOp = noOpGLStencilOp; 429f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fStencilOpSeparate = noOpGLStencilOpSeparate; 430f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fTexImage2D = noOpGLTexImage2D; 431f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fTexParameteri = noOpGLTexParameteri; 432f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fTexParameteriv = noOpGLTexParameteriv; 433f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fTexSubImage2D = noOpGLTexSubImage2D; 434f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fTexStorage2D = noOpGLTexStorage2D; 435f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fDiscardFramebuffer = noOpGLDiscardFramebuffer; 436f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fUniform1f = noOpGLUniform1f; 437f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fUniform1i = noOpGLUniform1i; 438f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fUniform1fv = noOpGLUniform1fv; 439f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fUniform1iv = noOpGLUniform1iv; 440f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fUniform2f = noOpGLUniform2f; 441f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fUniform2i = noOpGLUniform2i; 442f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fUniform2fv = noOpGLUniform2fv; 443f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fUniform2iv = noOpGLUniform2iv; 444f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fUniform3f = noOpGLUniform3f; 445f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fUniform3i = noOpGLUniform3i; 446f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fUniform3fv = noOpGLUniform3fv; 447f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fUniform3iv = noOpGLUniform3iv; 448f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fUniform4f = noOpGLUniform4f; 449f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fUniform4i = noOpGLUniform4i; 450f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fUniform4fv = noOpGLUniform4fv; 451f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fUniform4iv = noOpGLUniform4iv; 452f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fUniformMatrix2fv = noOpGLUniformMatrix2fv; 453f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fUniformMatrix3fv = noOpGLUniformMatrix3fv; 454f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fUniformMatrix4fv = noOpGLUniformMatrix4fv; 455160b478eed1dd4924a86a87fd60c91139e08ff71commit-bot@chromium.org functions->fUnmapBuffer = nullGLUnmapBuffer; 456f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fUseProgram = nullGLUseProgram; 457f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fVertexAttrib4fv = noOpGLVertexAttrib4fv; 458f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fVertexAttribPointer = noOpGLVertexAttribPointer; 459f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fViewport = nullGLViewport; 460f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fBindFramebuffer = nullGLBindFramebuffer; 461f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fBindRenderbuffer = nullGLBindRenderbuffer; 462f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fCheckFramebufferStatus = noOpGLCheckFramebufferStatus; 463f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fDeleteFramebuffers = nullGLDeleteFramebuffers; 464f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fDeleteRenderbuffers = nullGLDeleteRenderbuffers; 465f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fFramebufferRenderbuffer = nullGLFramebufferRenderbuffer; 466f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fFramebufferTexture2D = nullGLFramebufferTexture2D; 467f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fGenFramebuffers = noOpGLGenIds; 468f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fGenRenderbuffers = noOpGLGenIds; 469f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fGetFramebufferAttachmentParameteriv = noOpGLGetFramebufferAttachmentParameteriv; 470f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fGetRenderbufferParameteriv = noOpGLGetRenderbufferParameteriv; 471f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fRenderbufferStorage = noOpGLRenderbufferStorage; 472f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fRenderbufferStorageMultisample = noOpGLRenderbufferStorageMultisample; 473f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fBlitFramebuffer = noOpGLBlitFramebuffer; 474f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fResolveMultisampleFramebuffer = noOpGLResolveMultisampleFramebuffer; 475f66967243c3732523c2035f7d6dbf65c2d20b264commit-bot@chromium.org functions->fMatrixLoadf = noOpGLMatrixLoadf; 476f66967243c3732523c2035f7d6dbf65c2d20b264commit-bot@chromium.org functions->fMatrixLoadIdentity = noOpGLMatrixLoadIdentity; 477f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fBindFragDataLocationIndexed = noOpGLBindFragDataLocationIndexed; 478f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org 479f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org interface->fExtensions.init(kGL_GrGLStandard, functions->fGetString, functions->fGetStringi, 480f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org functions->fGetIntegerv); 481f535561b3baeb5f19c5b81fb439818bdde00d882commit-bot@chromium.org return interface; 48274913722bfe5e4b6810545891958e3d8e9c63791bsalomon@google.com} 483