1137a4ca42423bbb6d683067ea544c9a48f18f06cDerek 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. 7137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger */ 8137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger 9137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger 101cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 11137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger#ifndef GrGLInterface_DEFINED 12137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger#define GrGLInterface_DEFINED 13137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger 1487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger#include "GrGLConfig.h" 151cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#include "GrRefCnt.h" 16137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger 17137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger#if !defined(GR_GL_FUNCTION_TYPE) 18137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger #define GR_GL_FUNCTION_TYPE 19137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger#endif 20137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger 21137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger//////////////////////////////////////////////////////////////////////////////// 22137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger 23137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger/** 244f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger * Classifies GL contexts (currently as Desktop vs. ES2). This is a bitfield. 254f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger * A GrGLInterface (defined below) may support multiple bindings. 264f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger */ 274f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenbergerenum GrGLBinding { 284f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger kNone_GrGLBinding = 0x0, 294f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger 304f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger kDesktop_GrGLBinding = 0x01, 314f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger kES2_GrGLBinding = 0x02, 324f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger 334f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger // for iteration of GrGLBindings 344f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger kFirstGrGLBinding = kDesktop_GrGLBinding, 354f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger kLastGrGLBinding = kES2_GrGLBinding 364f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger}; 374f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger 384f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger//////////////////////////////////////////////////////////////////////////////// 394f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger 404f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger/** 41137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger * Helpers for glGetString() 42137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger */ 4387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 441cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergertypedef uint32_t GrGLVersion; 451cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergertypedef uint32_t GrGLSLVersion; 4687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 471cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#define GR_GL_VER(major, minor) ((static_cast<int>(major) << 16) | \ 481cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger static_cast<int>(minor)) 491cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#define GR_GLSL_VER(major, minor) ((static_cast<int>(major) << 16) | \ 501cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger static_cast<int>(minor)) 51137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger 521cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger// these variants assume caller already has a string from glGetString() 531cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLVersion GrGLGetVersionFromString(const char* versionString); 544f1dae40e24d57d647db01443b8bf2410514b8b5Derek SollenbergerGrGLBinding GrGLGetBindingInUseFromString(const char* versionString); 551cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLSLVersion GrGLGetGLSLVersionFromString(const char* versionString); 561cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerbool GrGLHasExtensionFromString(const char* ext, const char* extensionString); 571cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 581cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger// these variants call glGetString() 591cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerbool GrGLHasExtension(const GrGLInterface*, const char* ext); 604f1dae40e24d57d647db01443b8bf2410514b8b5Derek SollenbergerGrGLBinding GrGLGetBindingInUse(const GrGLInterface*); 611cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLVersion GrGLGetVersion(const GrGLInterface*); 621cab2921ab279367f8206cdadc9259d12e603548Derek SollenbergerGrGLSLVersion GrGLGetGLSLVersion(const GrGLInterface*); 6387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 64137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger//////////////////////////////////////////////////////////////////////////////// 65137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger 661cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/** 671cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Rather than depend on platform-specific GL headers and libraries, we require 681cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * the client to provide a struct of GL function pointers. This struct can be 691cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * specified per-GrContext as a parameter to GrContext::Create. If NULL is 701cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * passed to Create then the "default" GL interface is used. If the default is 711cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * also NULL GrContext creation will fail. 721cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * 731cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * The default interface is returned by GrGLDefaultInterface. This function's 741cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * implementation is platform-specifc. Several have been provided, along with an 751cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * implementation that simply returns NULL. It is implementation-specific 761cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * whether the same GrGLInterface is returned or whether a new one is created 771cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * at each call. Some platforms may not be able to use a single GrGLInterface 781cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * because extension function ptrs vary across contexts. Note that GrGLInterface 791cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * is ref-counted. So if the same object is returned by multiple calls to 801cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * GrGLDefaultInterface, each should bump the ref count. 811cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * 821cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * By defining GR_GL_PER_GL_CALL_IFACE_CALLBACK to 1 the client can specify a 831cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * callback function that will be called prior to each GL function call. See 841cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * comments in GrGLConfig.h 85137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger */ 861cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 87137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenbergerstruct GrGLInterface; 88137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger 891cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerconst GrGLInterface* GrGLDefaultInterface(); 901cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 911cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/** 921cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Creates a GrGLInterface for a "native" GL context (e.g. WGL on windows, 931cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * GLX on linux, AGL on Mac). On platforms that have context-specific function 941cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * pointers for GL extensions (e.g. windows) the returned interface is only 951cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * valid for the context that was current at creation. 96137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger */ 971cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerconst GrGLInterface* GrGLCreateNativeInterface(); 981cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 991cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/** 1001cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Creates a GrGLInterface for an OSMesa context. 1011cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */ 1021cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerconst GrGLInterface* GrGLCreateMesaInterface(); 1031cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 1041cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger/** 1051cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * Creates a null GrGLInterface that doesn't draw anything. Used for measuring 1061cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger * CPU overhead. 1071cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger */ 1081cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerconst GrGLInterface* GrGLCreateNullInterface(); 10987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 11087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergertypedef unsigned int GrGLenum; 11187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergertypedef unsigned char GrGLboolean; 11287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergertypedef unsigned int GrGLbitfield; 11387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergertypedef signed char GrGLbyte; 1140b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenbergertypedef char GrGLchar; 11587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergertypedef short GrGLshort; 11687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergertypedef int GrGLint; 11787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergertypedef int GrGLsizei; 1181cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergertypedef int64_t GrGLint64; 11987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergertypedef unsigned char GrGLubyte; 12087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergertypedef unsigned short GrGLushort; 12187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergertypedef unsigned int GrGLuint; 1221cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergertypedef uint64_t GrGLuint64; 12387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergertypedef float GrGLfloat; 12487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergertypedef float GrGLclampf; 12587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergertypedef double GrGLdouble; 12687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergertypedef double GrGLclampd; 12787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergertypedef void GrGLvoid; 12887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergertypedef long GrGLintptr; 12987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenbergertypedef long GrGLsizeiptr; 13087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 131137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenbergerextern "C" { 13287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLActiveTextureProc)(GrGLenum texture); 13387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLAttachShaderProc)(GrGLuint program, GrGLuint shader); 1341cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLBeginQueryProc)(GrGLenum target, GrGLuint id); 13587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLBindAttribLocationProc)(GrGLuint program, GrGLuint index, const char* name); 13687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLBindBufferProc)(GrGLenum target, GrGLuint buffer); 13787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLBindTextureProc)(GrGLenum target, GrGLuint texture); 13887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLBlendColorProc)(GrGLclampf red, GrGLclampf green, GrGLclampf blue, GrGLclampf alpha); 1391cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLBindFragDataLocationProc)(GrGLuint program, GrGLuint colorNumber, const GrGLchar* name); 14087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLBlendFuncProc)(GrGLenum sfactor, GrGLenum dfactor); 14187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLBufferDataProc)(GrGLenum target, GrGLsizeiptr size, const GrGLvoid* data, GrGLenum usage); 14287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLBufferSubDataProc)(GrGLenum target, GrGLintptr offset, GrGLsizeiptr size, const GrGLvoid* data); 14387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLClearProc)(GrGLbitfield mask); 14487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLClearColorProc)(GrGLclampf red, GrGLclampf green, GrGLclampf blue, GrGLclampf alpha); 14587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLClearStencilProc)(GrGLint s); 14687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLColorMaskProc)(GrGLboolean red, GrGLboolean green, GrGLboolean blue, GrGLboolean alpha); 14787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLColorPointerProc)(GrGLint size, GrGLenum type, GrGLsizei stride, const GrGLvoid* pointer); 14887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLCompileShaderProc)(GrGLuint shader); 14987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLCompressedTexImage2DProc)(GrGLenum target, GrGLint level, GrGLenum internalformat, GrGLsizei width, GrGLsizei height, GrGLint border, GrGLsizei imageSize, const GrGLvoid* data); 15087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLuint (GR_GL_FUNCTION_TYPE *GrGLCreateProgramProc)(void); 15187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLuint (GR_GL_FUNCTION_TYPE *GrGLCreateShaderProc)(GrGLenum type); 15287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLCullFaceProc)(GrGLenum mode); 15387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLDeleteBuffersProc)(GrGLsizei n, const GrGLuint* buffers); 15487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLDeleteProgramProc)(GrGLuint program); 1551cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLDeleteQueriesProc)(GrGLsizei n, const GrGLuint *ids); 15687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLDeleteShaderProc)(GrGLuint shader); 15787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLDeleteTexturesProc)(GrGLsizei n, const GrGLuint* textures); 15887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLDepthMaskProc)(GrGLboolean flag); 15987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLDisableProc)(GrGLenum cap); 16087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLDisableVertexAttribArrayProc)(GrGLuint index); 16187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLDrawArraysProc)(GrGLenum mode, GrGLint first, GrGLsizei count); 1621cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLDrawBufferProc)(GrGLenum mode); 1631cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLDrawBuffersProc)(GrGLsizei n, const GrGLenum* bufs); 16487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLDrawElementsProc)(GrGLenum mode, GrGLsizei count, GrGLenum type, const GrGLvoid* indices); 16587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLEnableProc)(GrGLenum cap); 16687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLEnableVertexAttribArrayProc)(GrGLuint index); 1671cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLEndQueryProc)(GrGLenum target); 1681cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLFinishProc)(); 1691cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLFlushProc)(); 17087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLFrontFaceProc)(GrGLenum mode); 17187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLGenBuffersProc)(GrGLsizei n, GrGLuint* buffers); 1721cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLGenQueriesProc)(GrGLsizei n, GrGLuint *ids); 17387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLGenTexturesProc)(GrGLsizei n, GrGLuint* textures); 17487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLGetBufferParameterivProc)(GrGLenum target, GrGLenum pname, GrGLint* params); 1751cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger typedef GrGLenum (GR_GL_FUNCTION_TYPE *GrGLGetErrorProc)(); 17687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLGetIntegervProc)(GrGLenum pname, GrGLint* params); 17787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLGetProgramInfoLogProc)(GrGLuint program, GrGLsizei bufsize, GrGLsizei* length, char* infolog); 17887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLGetProgramivProc)(GrGLuint program, GrGLenum pname, GrGLint* params); 1791cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLGetQueryivProc)(GrGLenum GLtarget, GrGLenum pname, GrGLint *params); 1801cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLGetQueryObjecti64vProc)(GrGLuint id, GrGLenum pname, GrGLint64 *params); 1811cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLGetQueryObjectivProc)(GrGLuint id, GrGLenum pname, GrGLint *params); 1821cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLGetQueryObjectui64vProc)(GrGLuint id, GrGLenum pname, GrGLuint64 *params); 1831cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLGetQueryObjectuivProc)(GrGLuint id, GrGLenum pname, GrGLuint *params); 18487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLGetShaderInfoLogProc)(GrGLuint shader, GrGLsizei bufsize, GrGLsizei* length, char* infolog); 18587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLGetShaderivProc)(GrGLuint shader, GrGLenum pname, GrGLint* params); 18687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef const GrGLubyte* (GR_GL_FUNCTION_TYPE *GrGLGetStringProc)(GrGLenum name); 1871cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLGetTexLevelParameterivProc)(GrGLenum target, GrGLint level, GrGLenum pname, GrGLint* params); 18887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLint (GR_GL_FUNCTION_TYPE *GrGLGetUniformLocationProc)(GrGLuint program, const char* name); 18987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLLineWidthProc)(GrGLfloat width); 19087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLLinkProgramProc)(GrGLuint program); 19187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLPixelStoreiProc)(GrGLenum pname, GrGLint param); 1921cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLQueryCounterProc)(GrGLuint id, GrGLenum target); 1931cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLReadBufferProc)(GrGLenum src); 19487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLReadPixelsProc)(GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height, GrGLenum format, GrGLenum type, GrGLvoid* pixels); 19587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLScissorProc)(GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height); 19687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLShaderSourceProc)(GrGLuint shader, GrGLsizei count, const char** str, const GrGLint* length); 19787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLStencilFuncProc)(GrGLenum func, GrGLint ref, GrGLuint mask); 19887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLStencilFuncSeparateProc)(GrGLenum face, GrGLenum func, GrGLint ref, GrGLuint mask); 19987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLStencilMaskProc)(GrGLuint mask); 20087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLStencilMaskSeparateProc)(GrGLenum face, GrGLuint mask); 20187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLStencilOpProc)(GrGLenum fail, GrGLenum zfail, GrGLenum zpass); 20287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLStencilOpSeparateProc)(GrGLenum face, GrGLenum fail, GrGLenum zfail, GrGLenum zpass); 20387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLTexImage2DProc)(GrGLenum target, GrGLint level, GrGLint internalformat, GrGLsizei width, GrGLsizei height, GrGLint border, GrGLenum format, GrGLenum type, const GrGLvoid* pixels); 20487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLTexParameteriProc)(GrGLenum target, GrGLenum pname, GrGLint param); 2051cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLTexStorage2DProc)(GrGLenum target, GrGLsizei levels, GrGLenum internalformat, GrGLsizei width, GrGLsizei height); 20687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLTexSubImage2DProc)(GrGLenum target, GrGLint level, GrGLint xoffset, GrGLint yoffset, GrGLsizei width, GrGLsizei height, GrGLenum format, GrGLenum type, const GrGLvoid* pixels); 20735e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLUniform1fProc)(GrGLint location, GrGLfloat v0); 20835e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLUniform1iProc)(GrGLint location, GrGLint v0); 20987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLUniform1fvProc)(GrGLint location, GrGLsizei count, const GrGLfloat* v); 21035e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLUniform1ivProc)(GrGLint location, GrGLsizei count, const GrGLint* v); 21135e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLUniform2fProc)(GrGLint location, GrGLfloat v0, GrGLfloat v1); 21235e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLUniform2iProc)(GrGLint location, GrGLint v0, GrGLint v1); 21335e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLUniform2fvProc)(GrGLint location, GrGLsizei count, const GrGLfloat* v); 21435e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLUniform2ivProc)(GrGLint location, GrGLsizei count, const GrGLint* v); 21535e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLUniform3fProc)(GrGLint location, GrGLfloat v0, GrGLfloat v1, GrGLfloat v2); 21635e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLUniform3iProc)(GrGLint location, GrGLint v0, GrGLint v1, GrGLint v2); 21735e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLUniform3fvProc)(GrGLint location, GrGLsizei count, const GrGLfloat* v); 21835e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLUniform3ivProc)(GrGLint location, GrGLsizei count, const GrGLint* v); 21935e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLUniform4fProc)(GrGLint location, GrGLfloat v0, GrGLfloat v1, GrGLfloat v2, GrGLfloat v3); 22035e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLUniform4iProc)(GrGLint location, GrGLint v0, GrGLint v1, GrGLint v2, GrGLint v3); 22187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLUniform4fvProc)(GrGLint location, GrGLsizei count, const GrGLfloat* v); 22235e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLUniform4ivProc)(GrGLint location, GrGLsizei count, const GrGLint* v); 22335e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLUniformMatrix2fvProc)(GrGLint location, GrGLsizei count, GrGLboolean transpose, const GrGLfloat* value); 22487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLUniformMatrix3fvProc)(GrGLint location, GrGLsizei count, GrGLboolean transpose, const GrGLfloat* value); 22535e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLUniformMatrix4fvProc)(GrGLint location, GrGLsizei count, GrGLboolean transpose, const GrGLfloat* value); 22687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLUseProgramProc)(GrGLuint program); 22787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLVertexAttrib4fvProc)(GrGLuint indx, const GrGLfloat* values); 22887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLVertexAttribPointerProc)(GrGLuint indx, GrGLint size, GrGLenum type, GrGLboolean normalized, GrGLsizei stride, const GrGLvoid* ptr); 22987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLViewportProc)(GrGLint x, GrGLint y, GrGLsizei width, GrGLsizei height); 230137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger 231137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger // FBO Extension Functions 23287b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLBindFramebufferProc)(GrGLenum target, GrGLuint framebuffer); 23387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLBindRenderbufferProc)(GrGLenum target, GrGLuint renderbuffer); 23487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLenum (GR_GL_FUNCTION_TYPE *GrGLCheckFramebufferStatusProc)(GrGLenum target); 23587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLDeleteFramebuffersProc)(GrGLsizei n, const GrGLuint *framebuffers); 23687b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLDeleteRenderbuffersProc)(GrGLsizei n, const GrGLuint *renderbuffers); 23787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLFramebufferRenderbufferProc)(GrGLenum target, GrGLenum attachment, GrGLenum renderbuffertarget, GrGLuint renderbuffer); 23887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLFramebufferTexture2DProc)(GrGLenum target, GrGLenum attachment, GrGLenum textarget, GrGLuint texture, GrGLint level); 23987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLGenFramebuffersProc)(GrGLsizei n, GrGLuint *framebuffers); 24087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLGenRenderbuffersProc)(GrGLsizei n, GrGLuint *renderbuffers); 2411cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLGetFramebufferAttachmentParameterivProc)(GrGLenum target, GrGLenum attachment, GrGLenum pname, GrGLint* params); 2421cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLGetRenderbufferParameterivProc)(GrGLenum target, GrGLenum pname, GrGLint* params); 24387b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLRenderbufferStorageProc)(GrGLenum target, GrGLenum internalformat, GrGLsizei width, GrGLsizei height); 244137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger 245137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger // Multisampling Extension Functions 246137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger // same prototype for ARB_FBO, EXT_FBO, GL 3.0, & Apple ES extension 24787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLRenderbufferStorageMultisampleProc)(GrGLenum target, GrGLsizei samples, GrGLenum internalformat, GrGLsizei width, GrGLsizei height); 248137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger // desktop: ext_fbo_blit, arb_fbo, gl 3.0 24987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLBlitFramebufferProc)(GrGLint srcX0, GrGLint srcY0, GrGLint srcX1, GrGLint srcY1, GrGLint dstX0, GrGLint dstY0, GrGLint dstX1, GrGLint dstY1, GrGLbitfield mask, GrGLenum filter); 250137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger // apple's es extension 25187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLResolveMultisampleFramebufferProc)(); 252137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger 253137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger // Buffer mapping (extension in ES). 25487b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLvoid* (GR_GL_FUNCTION_TYPE *GrGLMapBufferProc)(GrGLenum target, GrGLenum access); 25587b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger typedef GrGLboolean (GR_GL_FUNCTION_TYPE *GrGLUnmapBufferProc)(GrGLenum target); 2560b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 2570b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger // Dual source blending 2580b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger typedef GrGLvoid (GR_GL_FUNCTION_TYPE *GrGLBindFragDataLocationIndexedProc)(GrGLuint program, GrGLuint colorNumber, GrGLuint index, const GrGLchar * name); 25935e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger} // extern "C" 26035e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger 2611cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#if GR_GL_PER_GL_FUNC_CALLBACK 2621cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergertypedef void (*GrGLInterfaceCallbackProc)(const GrGLInterface*); 2631cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergertypedef intptr_t GrGLInterfaceCallbackData; 2641cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#endif 2651cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 2661cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 2671cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerenum GrGLCapability { 2681cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger kProbe_GrGLCapability = -1 2691cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger}; 2701cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 27135e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger/* 27235e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger * The following interface exports the OpenGL entry points used by the system. 27335e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger * Use of OpenGL calls is disallowed. All calls should be invoked through 27435e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger * the global instance of this struct, defined above. 27535e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger * 27635e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger * IMPORTANT NOTE: The OpenGL entry points exposed here include both core GL 27735e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger * functions, and extensions. The system assumes that the address of the 27835e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger * extension pointer will be valid across contexts. 27935e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger */ 2801cab2921ab279367f8206cdadc9259d12e603548Derek Sollenbergerstruct GR_API GrGLInterface : public GrRefCnt { 2811cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 2821cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrGLInterface(); 2831cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger 2844f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger // Validates that the GrGLInterface supports a binding. This means that 2854f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger // the GrGLinterface advertises the binding in fBindingsExported and all 2864f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger // the necessary function pointers have been initialized. 2874f1dae40e24d57d647db01443b8bf2410514b8b5Derek Sollenberger bool validate(GrGLBinding binding) const; 28887b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 28987b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger // Indicator variable specifying the type of GL implementation 29087b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger // exported: GLES{1|2} or Desktop. 29187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger GrGLBinding fBindingsExported; 292137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger 293137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLActiveTextureProc fActiveTexture; 294137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLAttachShaderProc fAttachShader; 2951cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrGLBeginQueryProc fBeginQuery; 296137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLBindAttribLocationProc fBindAttribLocation; 297137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLBindBufferProc fBindBuffer; 2981cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrGLBindFragDataLocationProc fBindFragDataLocation; 299137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLBindTextureProc fBindTexture; 300137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLBlendColorProc fBlendColor; 30187b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger GrGLBlendFuncProc fBlendFunc; 302137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLBufferDataProc fBufferData; 303137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLBufferSubDataProc fBufferSubData; 304137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLClearProc fClear; 305137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLClearColorProc fClearColor; 306137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLClearStencilProc fClearStencil; 307137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLColorMaskProc fColorMask; 308137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLColorPointerProc fColorPointer; 309137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLCompileShaderProc fCompileShader; 310137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLCompressedTexImage2DProc fCompressedTexImage2D; 311137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLCreateProgramProc fCreateProgram; 312137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLCreateShaderProc fCreateShader; 313137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLCullFaceProc fCullFace; 314137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLDeleteBuffersProc fDeleteBuffers; 315137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLDeleteProgramProc fDeleteProgram; 3161cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrGLDeleteQueriesProc fDeleteQueries; 317137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLDeleteShaderProc fDeleteShader; 318137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLDeleteTexturesProc fDeleteTextures; 319137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLDepthMaskProc fDepthMask; 320137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLDisableProc fDisable; 321137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLDisableVertexAttribArrayProc fDisableVertexAttribArray; 322137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLDrawArraysProc fDrawArrays; 3231cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrGLDrawBufferProc fDrawBuffer; 3241cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrGLDrawBuffersProc fDrawBuffers; 325137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLDrawElementsProc fDrawElements; 326137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLEnableProc fEnable; 327137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLEnableVertexAttribArrayProc fEnableVertexAttribArray; 3281cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrGLEndQueryProc fEndQuery; 3291cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrGLFinishProc fFinish; 3301cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrGLFlushProc fFlush; 331137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLFrontFaceProc fFrontFace; 332137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLGenBuffersProc fGenBuffers; 3331cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrGLGenQueriesProc fGenQueries; 334137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLGenTexturesProc fGenTextures; 335137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLGetBufferParameterivProc fGetBufferParameteriv; 336137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLGetErrorProc fGetError; 337137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLGetIntegervProc fGetIntegerv; 3381cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrGLGetQueryObjecti64vProc fGetQueryObjecti64v; 3391cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrGLGetQueryObjectivProc fGetQueryObjectiv; 3401cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrGLGetQueryObjectui64vProc fGetQueryObjectui64v; 3411cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrGLGetQueryObjectuivProc fGetQueryObjectuiv; 3421cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrGLGetQueryivProc fGetQueryiv; 343137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLGetProgramInfoLogProc fGetProgramInfoLog; 344137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLGetProgramivProc fGetProgramiv; 345137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLGetShaderInfoLogProc fGetShaderInfoLog; 346137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLGetShaderivProc fGetShaderiv; 347137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLGetStringProc fGetString; 3481cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrGLGetTexLevelParameterivProc fGetTexLevelParameteriv; 349137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLGetUniformLocationProc fGetUniformLocation; 350137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLLineWidthProc fLineWidth; 351137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLLinkProgramProc fLinkProgram; 352137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLPixelStoreiProc fPixelStorei; 3531cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrGLQueryCounterProc fQueryCounter; 3541cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrGLReadBufferProc fReadBuffer; 355137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLReadPixelsProc fReadPixels; 356137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLScissorProc fScissor; 357137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLShaderSourceProc fShaderSource; 358137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLStencilFuncProc fStencilFunc; 359137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLStencilFuncSeparateProc fStencilFuncSeparate; 360137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLStencilMaskProc fStencilMask; 361137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLStencilMaskSeparateProc fStencilMaskSeparate; 362137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLStencilOpProc fStencilOp; 363137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLStencilOpSeparateProc fStencilOpSeparate; 364137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLTexImage2DProc fTexImage2D; 365137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLTexParameteriProc fTexParameteri; 366137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLTexSubImage2DProc fTexSubImage2D; 3671cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrGLTexStorage2DProc fTexStorage2D; 36835e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger GrGLUniform1fProc fUniform1f; 369137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLUniform1iProc fUniform1i; 37035e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger GrGLUniform1fvProc fUniform1fv; 37135e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger GrGLUniform1ivProc fUniform1iv; 37235e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger GrGLUniform2fProc fUniform2f; 37335e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger GrGLUniform2iProc fUniform2i; 37435e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger GrGLUniform2fvProc fUniform2fv; 37535e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger GrGLUniform2ivProc fUniform2iv; 37635e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger GrGLUniform3fProc fUniform3f; 37735e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger GrGLUniform3iProc fUniform3i; 37835e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger GrGLUniform3fvProc fUniform3fv; 37935e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger GrGLUniform3ivProc fUniform3iv; 38035e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger GrGLUniform4fProc fUniform4f; 38135e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger GrGLUniform4iProc fUniform4i; 382137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLUniform4fvProc fUniform4fv; 38335e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger GrGLUniform4ivProc fUniform4iv; 38435e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger GrGLUniformMatrix2fvProc fUniformMatrix2fv; 385137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLUniformMatrix3fvProc fUniformMatrix3fv; 38635e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger GrGLUniformMatrix4fvProc fUniformMatrix4fv; 387137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLUseProgramProc fUseProgram; 388137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLVertexAttrib4fvProc fVertexAttrib4fv; 389137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLVertexAttribPointerProc fVertexAttribPointer; 390137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLViewportProc fViewport; 391137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger 392137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger // FBO Extension Functions 393137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLBindFramebufferProc fBindFramebuffer; 394137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLBindRenderbufferProc fBindRenderbuffer; 395137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLCheckFramebufferStatusProc fCheckFramebufferStatus; 396137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLDeleteFramebuffersProc fDeleteFramebuffers; 397137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLDeleteRenderbuffersProc fDeleteRenderbuffers; 398137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLFramebufferRenderbufferProc fFramebufferRenderbuffer; 399137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLFramebufferTexture2DProc fFramebufferTexture2D; 400137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLGenFramebuffersProc fGenFramebuffers; 401137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLGenRenderbuffersProc fGenRenderbuffers; 4021cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrGLGetFramebufferAttachmentParameterivProc fGetFramebufferAttachmentParameteriv; 4031cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrGLGetRenderbufferParameterivProc fGetRenderbufferParameteriv; 404137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLRenderbufferStorageProc fRenderbufferStorage; 405137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger 406137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger // Multisampling Extension Functions 407137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger // same prototype for ARB_FBO, EXT_FBO, GL 3.0, & Apple ES extension 408137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLRenderbufferStorageMultisampleProc fRenderbufferStorageMultisample; 409137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger // desktop: ext_fbo_blit, arb_fbo, gl 3.0 410137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLBlitFramebufferProc fBlitFramebuffer; 411137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger // apple's es extension 412137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLResolveMultisampleFramebufferProc fResolveMultisampleFramebuffer; 413137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger 414137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger // Buffer mapping (extension in ES). 415137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLMapBufferProc fMapBuffer; 416137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger GrGLUnmapBufferProc fUnmapBuffer; 41787b8e645865f9633f410c02252a0fd3feb18f09bDerek Sollenberger 4180b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger // Dual Source Blending 4190b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger GrGLBindFragDataLocationIndexedProc fBindFragDataLocationIndexed; 4200b15698a8c76bb8abc1b555c1d91892669b4118fDerek Sollenberger 4211cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger // Per-GL func callback 4221cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#if GR_GL_PER_GL_FUNC_CALLBACK 4231cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrGLInterfaceCallbackProc fCallback; 4241cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger GrGLInterfaceCallbackData fCallbackData; 4251cab2921ab279367f8206cdadc9259d12e603548Derek Sollenberger#endif 426137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger 42735e2e62b55598210f6999fc2ea26ff8f41446ffeDerek Sollenberger}; 428137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger 429137a4ca42423bbb6d683067ea544c9a48f18f06cDerek Sollenberger#endif 430