11cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 21cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/* 31cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Copyright 2011 Google Inc. 41cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * 51cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Use of this source code is governed by a BSD-style license that can be 61cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * found in the LICENSE file. 71cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */ 81cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 91cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 104f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger#include "gl/GrGLInterface.h" 114f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger#include "../GrTDArray.h" 121cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 131cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLActiveTexture(GrGLenum texture) {} 141cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLAttachShader(GrGLuint program, GrGLuint shader) {} 151cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLBeginQuery(GrGLenum target, GrGLuint id) {} 161cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLBindAttribLocation(GrGLuint program, GrGLuint index, const char* name) {} 171cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLBindTexture(GrGLenum target, GrGLuint texture) {} 181cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLBlendColor(GrGLclampf red, GrGLclampf green, GrGLclampf blue, GrGLclampf alpha) {} 191cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLBindFragDataLocation(GrGLuint program, GrGLuint colorNumber, const GrGLchar* name) {} 201cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLBlendFunc(GrGLenum sfactor, GrGLenum dfactor) {} 211cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLBufferData(GrGLenum target, GrGLsizeiptr size, const GrGLvoid* data, GrGLenum usage) {} 221cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLBufferSubData(GrGLenum target, GrGLintptr offset, GrGLsizeiptr size, const GrGLvoid* data) {} 231cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLClear(GrGLbitfield mask) {} 241cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLClearColor(GrGLclampf red, GrGLclampf green, GrGLclampf blue, GrGLclampf alpha) {} 251cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLClearStencil(GrGLint s) {} 261cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLColorMask(GrGLboolean red, GrGLboolean green, GrGLboolean blue, GrGLboolean alpha) {} 271cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLCompileShader(GrGLuint shader) {} 281cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLCompressedTexImage2D(GrGLenum target, GrGLint level, GrGLenum internalformat, GrGLsizei width, GrGLsizei height, GrGLint border, GrGLsizei imageSize, const GrGLvoid* data) {} 291cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLCullFace(GrGLenum mode) {} 301cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLDepthMask(GrGLboolean flag) {} 311cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLDisable(GrGLenum cap) {} 321cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLDisableVertexAttribArray(GrGLuint index) {} 331cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLDrawArrays(GrGLenum mode, GrGLint first, GrGLsizei count) {} 341cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLDrawBuffer(GrGLenum mode) {} 351cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLDrawBuffers(GrGLsizei n, const GrGLenum* bufs) {} 361cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLDrawElements(GrGLenum mode, GrGLsizei count, GrGLenum type, const GrGLvoid* indices) {} 371cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLEnable(GrGLenum cap) {} 381cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLEnableVertexAttribArray(GrGLuint index) {} 391cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLEndQuery(GrGLenum target) {} 401cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLFinish() {} 411cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLFlush() {} 421cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLFrontFace(GrGLenum mode) {} 431cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLLineWidth(GrGLfloat width) {} 441cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLLinkProgram(GrGLuint program) {} 451cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLPixelStorei(GrGLenum pname, GrGLint param) {} 461cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLQueryCounter(GrGLuint id, GrGLenum target) {} 471cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLReadBuffer(GrGLenum src) {} 481cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLReadPixels(GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height, GrGLenum format, GrGLenum type, GrGLvoid* pixels) {} 491cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLScissor(GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height) {} 501cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLShaderSource(GrGLuint shader, GrGLsizei count, const char** str, const GrGLint* length) {} 511cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLStencilFunc(GrGLenum func, GrGLint ref, GrGLuint mask) {} 521cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLStencilFuncSeparate(GrGLenum face, GrGLenum func, GrGLint ref, GrGLuint mask) {} 531cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLStencilMask(GrGLuint mask) {} 541cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLStencilMaskSeparate(GrGLenum face, GrGLuint mask) {} 551cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLStencilOp(GrGLenum fail, GrGLenum zfail, GrGLenum zpass) {} 561cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLStencilOpSeparate(GrGLenum face, GrGLenum fail, GrGLenum zfail, GrGLenum zpass) {} 571cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLTexImage2D(GrGLenum target, GrGLint level, GrGLint internalformat, GrGLsizei width, GrGLsizei height, GrGLint border, GrGLenum format, GrGLenum type, const GrGLvoid* pixels) {} 581cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLTexParameteri(GrGLenum target, GrGLenum pname, GrGLint param) {} 591cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLTexStorage2D(GrGLenum target, GrGLsizei levels, GrGLenum internalformat, GrGLsizei width, GrGLsizei height) {} 601cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLTexSubImage2D(GrGLenum target, GrGLint level, GrGLint xoffset, GrGLint yoffset, GrGLsizei width, GrGLsizei height, GrGLenum format, GrGLenum type, const GrGLvoid* pixels) {} 611cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLUniform1f(GrGLint location, GrGLfloat v0) {} 621cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLUniform1i(GrGLint location, GrGLint v0) {} 631cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLUniform1fv(GrGLint location, GrGLsizei count, const GrGLfloat* v) {} 641cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLUniform1iv(GrGLint location, GrGLsizei count, const GrGLint* v) {} 651cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLUniform2f(GrGLint location, GrGLfloat v0, GrGLfloat v1) {} 661cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLUniform2i(GrGLint location, GrGLint v0, GrGLint v1) {} 671cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLUniform2fv(GrGLint location, GrGLsizei count, const GrGLfloat* v) {} 681cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLUniform2iv(GrGLint location, GrGLsizei count, const GrGLint* v) {} 691cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLUniform3f(GrGLint location, GrGLfloat v0, GrGLfloat v1, GrGLfloat v2) {} 701cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLUniform3i(GrGLint location, GrGLint v0, GrGLint v1, GrGLint v2) {} 711cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLUniform3fv(GrGLint location, GrGLsizei count, const GrGLfloat* v) {} 721cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLUniform3iv(GrGLint location, GrGLsizei count, const GrGLint* v) {} 731cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLUniform4f(GrGLint location, GrGLfloat v0, GrGLfloat v1, GrGLfloat v2, GrGLfloat v3) {} 741cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLUniform4i(GrGLint location, GrGLint v0, GrGLint v1, GrGLint v2, GrGLint v3) {} 751cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLUniform4fv(GrGLint location, GrGLsizei count, const GrGLfloat* v) {} 761cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLUniform4iv(GrGLint location, GrGLsizei count, const GrGLint* v) {} 771cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLUniformMatrix2fv(GrGLint location, GrGLsizei count, GrGLboolean transpose, const GrGLfloat* value) {} 781cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLUniformMatrix3fv(GrGLint location, GrGLsizei count, GrGLboolean transpose, const GrGLfloat* value) {} 791cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLUniformMatrix4fv(GrGLint location, GrGLsizei count, GrGLboolean transpose, const GrGLfloat* value) {} 801cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLUseProgram(GrGLuint program) {} 811cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLVertexAttrib4fv(GrGLuint indx, const GrGLfloat* values) {} 821cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLVertexAttribPointer(GrGLuint indx, GrGLint size, GrGLenum type, GrGLboolean normalized, GrGLsizei stride, const GrGLvoid* ptr) {} 831cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLViewport(GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height) {} 841cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLBindFramebuffer(GrGLenum target, GrGLuint framebuffer) {} 851cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLBindRenderbuffer(GrGLenum target, GrGLuint renderbuffer) {} 861cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLDeleteFramebuffers(GrGLsizei n, const GrGLuint *framebuffers) {} 871cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLDeleteRenderbuffers(GrGLsizei n, const GrGLuint *renderbuffers) {} 881cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLFramebufferRenderbuffer(GrGLenum target, GrGLenum attachment, GrGLenum renderbuffertarget, GrGLuint renderbuffer) {} 891cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLFramebufferTexture2D(GrGLenum target, GrGLenum attachment, GrGLenum textarget, GrGLuint texture, GrGLint level) {} 901cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLGetFramebufferAttachmentParameteriv(GrGLenum target, GrGLenum attachment, GrGLenum pname, GrGLint* params) {} 911cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLGetRenderbufferParameteriv(GrGLenum target, GrGLenum pname, GrGLint* params) {} 921cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLRenderbufferStorage(GrGLenum target, GrGLenum internalformat, GrGLsizei width, GrGLsizei height) {} 931cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLRenderbufferStorageMultisample(GrGLenum target, GrGLsizei samples, GrGLenum internalformat, GrGLsizei width, GrGLsizei height) {} 941cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLBlitFramebuffer(GrGLint srcX0, GrGLint srcY0, GrGLint srcX1, GrGLint srcY1, GrGLint dstX0, GrGLint dstY0, GrGLint dstX1, GrGLint dstY1, GrGLbitfield mask, GrGLenum filter) {} 951cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLResolveMultisampleFramebuffer() {} 961cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLBindFragDataLocationIndexed(GrGLuint program, GrGLuint colorNumber, GrGLuint index, const GrGLchar * name) {} 971cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 981cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLenum GR_GL_FUNCTION_TYPE nullGLCheckFramebufferStatus(GrGLenum target) { 991cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger return GR_GL_FRAMEBUFFER_COMPLETE; 1001cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger} 1011cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 1021cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLuint GR_GL_FUNCTION_TYPE nullGLCreateProgram() { 1031cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger static int gCurrID = 0; 1041cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger return ++gCurrID; 1051cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger} 1061cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 1071cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLuint GR_GL_FUNCTION_TYPE nullGLCreateShader(GrGLenum type) { 1081cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger static int gCurrID = 0; 1091cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger return ++gCurrID; 1101cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger} 1111cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 1121cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger// same delete used for shaders and programs 1131cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLDelete(GrGLuint program) { 1141cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger} 1151cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 1161cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger// same function used for all glGen*(GLsize i, GLuint*) functions 1171cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLGenIds(GrGLsizei n, GrGLuint* ids) { 1181cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger static int gCurrID = 0; 1191cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger for (int i = 0; i < n; ++i) { 1201cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger ids[i] = ++gCurrID; 1211cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 1221cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger} 1231cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger// same delete function for all glDelete*(GLsize i, const GLuint*) except buffers 1241cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLDeleteIds(GrGLsizei n, const GrGLuint* ids) {} 1251cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 1261cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger// In debug builds we do asserts that ensure we agree with GL about when a buffer 1271cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger// is mapped. 1281cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerstatic GrTDArray<GrGLuint> gMappedBuffers; 1291cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerstatic GrGLuint gCurrArrayBuffer; 1301cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerstatic GrGLuint gCurrElementArrayBuffer; 1311cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 1321cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLBindBuffer(GrGLenum target, GrGLuint buffer) { 1331cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger switch (target) { 1341cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_ARRAY_BUFFER: 1351cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger gCurrArrayBuffer = buffer; 1361cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; 1371cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_ELEMENT_ARRAY_BUFFER: 1381cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger gCurrElementArrayBuffer = buffer; 1391cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; 1401cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 1411cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger} 1421cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 1431cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger// deleting a bound buffer has the side effect of binding 0 1441cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLDeleteBuffers(GrGLsizei n, const GrGLuint* ids) { 1451cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger for (int i = 0; i < n; ++i) { 1461cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger if (ids[i] == gCurrArrayBuffer) { 1471cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger gCurrArrayBuffer = 0; 1481cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 1491cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger if (ids[i] == gCurrElementArrayBuffer) { 1501cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger gCurrElementArrayBuffer = 0; 1511cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 1521cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger for (int j = 0; j < gMappedBuffers.count(); ++j) { 1531cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger if (gMappedBuffers[j] == ids[i]) { 1541cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger gMappedBuffers.remove(j); 1551cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger // don't break b/c we didn't check for dupes on insert 1561cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger --j; 1571cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 1581cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 1591cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 1601cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger} 1611cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 1621cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid* GR_GL_FUNCTION_TYPE nullGLMapBuffer(GrGLenum target, GrGLenum access) { 1631cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger // We just reserve 32MB of RAM for all locks and hope its big enough 1641cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger static SkAutoMalloc gBufferData(32 * (1 << 20)); 1651cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrGLuint buf = 0; 1661cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger switch (target) { 1671cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_ARRAY_BUFFER: 1681cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger buf = gCurrArrayBuffer; 1691cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; 1701cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_ELEMENT_ARRAY_BUFFER: 1711cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger buf = gCurrElementArrayBuffer; 1721cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; 1731cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 1741cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger if (buf) { 1751cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *gMappedBuffers.append() = buf; 1761cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 1771cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger return gBufferData.get(); 1781cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger} 1791cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 1801cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLboolean GR_GL_FUNCTION_TYPE nullGLUnmapBuffer(GrGLenum target) { 1811cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrGLuint buf = 0; 1821cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger switch (target) { 1831cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_ARRAY_BUFFER: 1841cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger buf = gCurrArrayBuffer; 1851cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; 1861cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_ELEMENT_ARRAY_BUFFER: 1871cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger buf = gCurrElementArrayBuffer; 1881cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; 1891cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 1901cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger if (buf) { 1911cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger for (int i = 0; i < gMappedBuffers.count(); ++i) { 1921cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger if (gMappedBuffers[i] == buf) { 1931cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger gMappedBuffers.remove(i); 1941cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger // don't break b/c we didn't check for dupes on insert 1951cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger --i; 1961cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 1971cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 1981cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 1991cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger return GR_GL_TRUE; 2001cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger} 2011cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 2021cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLGetBufferParameteriv(GrGLenum target, GrGLenum pname, GrGLint* params) { 2031cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger switch (pname) { 2041cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_BUFFER_MAPPED: { 2051cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *params = GR_GL_FALSE; 2061cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrGLuint buf = 0; 2071cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger switch (target) { 2081cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_ARRAY_BUFFER: 2091cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger buf = gCurrArrayBuffer; 2101cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; 2111cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_ELEMENT_ARRAY_BUFFER: 2121cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger buf = gCurrElementArrayBuffer; 2131cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; 2141cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 2151cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger if (buf) { 2161cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger for (int i = 0; i < gMappedBuffers.count(); ++i) { 2171cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger if (gMappedBuffers[i] == buf) { 2181cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *params = GR_GL_TRUE; 2191cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; 2201cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 2211cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 2221cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 2231cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; } 2241cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger default: 2251cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrCrash("Unexpected pname to GetBufferParamateriv"); 2261cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; 2271cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 2281cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger}; 2291cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 2301cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLenum GR_GL_FUNCTION_TYPE nullGLGetError() { 2311cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger return GR_GL_NO_ERROR; 2321cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger} 2331cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 2341cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLGetIntegerv(GrGLenum pname, GrGLint* params) { 2351cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger switch (pname) { 2361cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_STENCIL_BITS: 2371cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *params = 8; 2381cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; 2391cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_SAMPLES: 2401cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *params = 1; 2411cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; 2421cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_FRAMEBUFFER_BINDING: 2431cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *params = 0; 2441cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; 2451cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_VIEWPORT: 2461cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger params[0] = 0; 2471cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger params[1] = 0; 2481cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger params[2] = 800; 2491cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger params[3] = 600; 2501cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; 2511cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_MAX_TEXTURE_IMAGE_UNITS: 2521cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *params = 8; 2531cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; 2541cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_MAX_FRAGMENT_UNIFORM_VECTORS: 2551cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *params = 16; 2561cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; 2571cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_MAX_FRAGMENT_UNIFORM_COMPONENTS: 2581cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *params = 16 * 4; 2591cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; 2601cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_NUM_COMPRESSED_TEXTURE_FORMATS: 2611cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *params = 0; 2621cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; 2631cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_COMPRESSED_TEXTURE_FORMATS: 2641cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; 2651cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_MAX_TEXTURE_SIZE: 2661cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *params = 8192; 2671cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; 2681cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_MAX_RENDERBUFFER_SIZE: 2691cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *params = 8192; 2701cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; 2711cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_MAX_SAMPLES: 2721cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *params = 32; 2731cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; 2741cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_MAX_VERTEX_ATTRIBS: 2751cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *params = 16; 2761cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; 2771cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_MAX_TEXTURE_UNITS: 2781cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *params = 8; 2791cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; 2801cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger default: 2811cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrCrash("Unexpected pname to GetIntegerv"); 2821cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 2831cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger} 2841cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger// used for both the program and shader info logs 2851cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLGetInfoLog(GrGLuint program, GrGLsizei bufsize, GrGLsizei* length, char* infolog) { 2861cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger if (length) { 2871cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *length = 0; 2881cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 2891cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger if (bufsize > 0) { 2901cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *infolog = 0; 2911cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 2921cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger} 2931cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 2941cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger// used for both the program and shader params 2951cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLGetShaderOrProgramiv(GrGLuint program, GrGLenum pname, GrGLint* params) { 2961cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger switch (pname) { 2971cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_LINK_STATUS: // fallthru 2981cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_COMPILE_STATUS: 2991cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *params = GR_GL_TRUE; 3001cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; 3011cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_INFO_LOG_LENGTH: 3021cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *params = 0; 3031cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; 3041cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger // we don't expect any other pnames 3051cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger default: 3061cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrCrash("Unexpected pname to GetProgramiv"); 3071cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; 3081cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 3091cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger} 3101cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 3111cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergernamespace { 3121cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergertemplate <typename T> 3131cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergervoid query_result(GrGLenum GLtarget, GrGLenum pname, T *params) { 3141cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger switch (pname) { 3151cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_QUERY_RESULT_AVAILABLE: 3161cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *params = GR_GL_TRUE; 3171cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; 3181cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_QUERY_RESULT: 3191cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *params = 0; 3201cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; 3211cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger default: 3221cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrCrash("Unexpected pname passed to GetQueryObject."); 3231cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; 3241cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 3251cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger} 3261cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger} 3271cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 3281cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger// Queries on the null GL just don't do anything at all. We could potentially make 3291cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger// the timers work. 3301cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLGetQueryiv(GrGLenum GLtarget, GrGLenum pname, GrGLint *params) { 3311cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger switch (pname) { 3321cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_CURRENT_QUERY: 3331cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *params = 0; 3341cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; 3351cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_QUERY_COUNTER_BITS: 3361cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger *params = 32; 3371cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger break; 3381cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger default: 3391cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrCrash("Unexpected pname passed GetQueryiv."); 3401cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 3411cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger} 3421cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLGetQueryObjecti64v(GrGLuint id, GrGLenum pname, GrGLint64 *params) { 3431cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger query_result(id, pname, params); 3441cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger} 3451cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLGetQueryObjectiv(GrGLuint id, GrGLenum pname, GrGLint *params) { 3461cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger query_result(id, pname, params); 3471cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger} 3481cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLGetQueryObjectui64v(GrGLuint id, GrGLenum pname, GrGLuint64 *params) { 3491cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger query_result(id, pname, params); 3501cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger} 3511cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLGetQueryObjectuiv(GrGLuint id, GrGLenum pname, GrGLuint *params) { 3521cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger query_result(id, pname, params); 3531cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger} 3541cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 3551cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerconst GrGLubyte* GR_GL_FUNCTION_TYPE nullGLGetString(GrGLenum name) { 3561cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger switch (name) { 3571cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_EXTENSIONS: 3581cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger return (const GrGLubyte*)"GL_ARB_framebuffer_object GL_ARB_blend_func_extended GL_ARB_timer_query GL_ARB_draw_buffers GL_ARB_occlusion_query GL_EXT_blend_color GL_EXT_stencil_wrap"; 3591cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_VERSION: 3601cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger return (const GrGLubyte*)"4.0 Null GL"; 3611cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger case GR_GL_SHADING_LANGUAGE_VERSION: 3621cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger return (const GrGLubyte*)"4.20.8 Null GLSL"; 3631cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger default: 3641cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrCrash("Unexpected name to GetString"); 3651cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger return NULL; 3661cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 3671cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger} 3681cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 3691cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger// we used to use this to query stuff about externally created textures, now we just 3701cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger// require clients to tell us everything about the texture. 3711cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLvoid GR_GL_FUNCTION_TYPE nullGLGetTexLevelParameteriv(GrGLenum target, GrGLint level, GrGLenum pname, GrGLint* params) { 3721cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrCrash("Should never query texture parameters."); 3731cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger} 3741cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 3751cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLint GR_GL_FUNCTION_TYPE nullGLGetUniformLocation(GrGLuint program, const char* name) { 3761cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger static int gUniLocation = 0; 3771cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger return ++gUniLocation; 3781cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger} 3791cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 3801cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerconst GrGLInterface* GrGLCreateNullInterface() { 3811cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger // The gl functions are not context-specific so we create one global 3821cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger // interface 3831cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger static SkAutoTUnref<GrGLInterface> glInterface; 3841cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger if (!glInterface.get()) { 3851cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrGLInterface* interface = new GrGLInterface; 3861cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger glInterface.reset(interface); 3871cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fBindingsExported = kDesktop_GrGLBinding; 3881cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fActiveTexture = nullGLActiveTexture; 3891cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fAttachShader = nullGLAttachShader; 3901cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fBeginQuery = nullGLBeginQuery; 3911cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fBindAttribLocation = nullGLBindAttribLocation; 3921cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fBindBuffer = nullGLBindBuffer; 3931cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fBindFragDataLocation = nullGLBindFragDataLocation; 3941cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fBindTexture = nullGLBindTexture; 3951cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fBlendColor = nullGLBlendColor; 3961cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fBlendFunc = nullGLBlendFunc; 3971cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fBufferData = nullGLBufferData; 3981cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fBufferSubData = nullGLBufferSubData; 3991cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fClear = nullGLClear; 4001cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fClearColor = nullGLClearColor; 4011cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fClearStencil = nullGLClearStencil; 4021cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fColorMask = nullGLColorMask; 4031cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fCompileShader = nullGLCompileShader; 4041cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fCompressedTexImage2D = nullGLCompressedTexImage2D; 4051cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fCreateProgram = nullGLCreateProgram; 4061cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fCreateShader = nullGLCreateShader; 4071cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fCullFace = nullGLCullFace; 4081cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fDeleteBuffers = nullGLDeleteBuffers; 4091cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fDeleteProgram = nullGLDelete; 4101cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fDeleteQueries = nullGLDeleteIds; 4111cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fDeleteShader = nullGLDelete; 4121cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fDeleteTextures = nullGLDeleteIds; 4131cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fDepthMask = nullGLDepthMask; 4141cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fDisable = nullGLDisable; 4151cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fDisableVertexAttribArray = nullGLDisableVertexAttribArray; 4161cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fDrawArrays = nullGLDrawArrays; 4171cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fDrawBuffer = nullGLDrawBuffer; 4181cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fDrawBuffers = nullGLDrawBuffers; 4191cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fDrawElements = nullGLDrawElements; 4201cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fEnable = nullGLEnable; 4211cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fEnableVertexAttribArray = nullGLEnableVertexAttribArray; 4221cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fEndQuery = nullGLEndQuery; 4231cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fFinish = nullGLFinish; 4241cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fFlush = nullGLFlush; 4251cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fFrontFace = nullGLFrontFace; 4261cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fGenBuffers = nullGLGenIds; 4271cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fGenQueries = nullGLGenIds; 4281cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fGenTextures = nullGLGenIds; 4291cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fGetBufferParameteriv = nullGLGetBufferParameteriv; 4301cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fGetError = nullGLGetError; 4311cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fGetIntegerv = nullGLGetIntegerv; 4321cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fGetQueryObjecti64v = nullGLGetQueryObjecti64v; 4331cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fGetQueryObjectiv = nullGLGetQueryObjectiv; 4341cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fGetQueryObjectui64v = nullGLGetQueryObjectui64v; 4351cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fGetQueryObjectuiv = nullGLGetQueryObjectuiv; 4361cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fGetQueryiv = nullGLGetQueryiv; 4371cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fGetProgramInfoLog = nullGLGetInfoLog; 4381cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fGetProgramiv = nullGLGetShaderOrProgramiv; 4391cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fGetShaderInfoLog = nullGLGetInfoLog; 4401cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fGetShaderiv = nullGLGetShaderOrProgramiv; 4411cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fGetString = nullGLGetString; 4421cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fGetTexLevelParameteriv = nullGLGetTexLevelParameteriv; 4431cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fGetUniformLocation = nullGLGetUniformLocation; 4441cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fLineWidth = nullGLLineWidth; 4451cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fLinkProgram = nullGLLinkProgram; 4461cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fPixelStorei = nullGLPixelStorei; 4471cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fQueryCounter = nullGLQueryCounter; 4481cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fReadBuffer = nullGLReadBuffer; 4491cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fReadPixels = nullGLReadPixels; 4501cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fScissor = nullGLScissor; 4511cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fShaderSource = nullGLShaderSource; 4521cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fStencilFunc = nullGLStencilFunc; 4531cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fStencilFuncSeparate = nullGLStencilFuncSeparate; 4541cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fStencilMask = nullGLStencilMask; 4551cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fStencilMaskSeparate = nullGLStencilMaskSeparate; 4561cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fStencilOp = nullGLStencilOp; 4571cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fStencilOpSeparate = nullGLStencilOpSeparate; 4581cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fTexImage2D = nullGLTexImage2D; 4591cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fTexParameteri = nullGLTexParameteri; 4601cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fTexSubImage2D = nullGLTexSubImage2D; 4611cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fTexStorage2D = nullGLTexStorage2D; 4621cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fUniform1f = nullGLUniform1f; 4631cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fUniform1i = nullGLUniform1i; 4641cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fUniform1fv = nullGLUniform1fv; 4651cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fUniform1iv = nullGLUniform1iv; 4661cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fUniform2f = nullGLUniform2f; 4671cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fUniform2i = nullGLUniform2i; 4681cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fUniform2fv = nullGLUniform2fv; 4691cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fUniform2iv = nullGLUniform2iv; 4701cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fUniform3f = nullGLUniform3f; 4711cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fUniform3i = nullGLUniform3i; 4721cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fUniform3fv = nullGLUniform3fv; 4731cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fUniform3iv = nullGLUniform3iv; 4741cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fUniform4f = nullGLUniform4f; 4751cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fUniform4i = nullGLUniform4i; 4761cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fUniform4fv = nullGLUniform4fv; 4771cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fUniform4iv = nullGLUniform4iv; 4781cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fUniformMatrix2fv = nullGLUniformMatrix2fv; 4791cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fUniformMatrix3fv = nullGLUniformMatrix3fv; 4801cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fUniformMatrix4fv = nullGLUniformMatrix4fv; 4811cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fUseProgram = nullGLUseProgram; 4821cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fVertexAttrib4fv = nullGLVertexAttrib4fv; 4831cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fVertexAttribPointer = nullGLVertexAttribPointer; 4841cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fViewport = nullGLViewport; 4851cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fBindFramebuffer = nullGLBindFramebuffer; 4861cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fBindRenderbuffer = nullGLBindRenderbuffer; 4871cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fCheckFramebufferStatus = nullGLCheckFramebufferStatus; 4881cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fDeleteFramebuffers = nullGLDeleteFramebuffers; 4891cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fDeleteRenderbuffers = nullGLDeleteRenderbuffers; 4901cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fFramebufferRenderbuffer = nullGLFramebufferRenderbuffer; 4911cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fFramebufferTexture2D = nullGLFramebufferTexture2D; 4921cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fGenFramebuffers = nullGLGenIds; 4931cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fGenRenderbuffers = nullGLGenIds; 4941cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fGetFramebufferAttachmentParameteriv = nullGLGetFramebufferAttachmentParameteriv; 4951cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fGetRenderbufferParameteriv = nullGLGetRenderbufferParameteriv; 4961cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fRenderbufferStorage = nullGLRenderbufferStorage; 4971cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fRenderbufferStorageMultisample = nullGLRenderbufferStorageMultisample; 4981cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fBlitFramebuffer = nullGLBlitFramebuffer; 4991cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fResolveMultisampleFramebuffer = nullGLResolveMultisampleFramebuffer; 5001cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fMapBuffer = nullGLMapBuffer; 5011cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fUnmapBuffer = nullGLUnmapBuffer; 5021cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger interface->fBindFragDataLocationIndexed = nullGLBindFragDataLocationIndexed; 5031cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger } 5041cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger glInterface.get()->ref(); 5051cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger return glInterface.get(); 5061cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger} 507