twiz@google.com | 59a190b | 2011-03-14 21:23:01 +0000 | [diff] [blame] | 1 | /* |
epoger@google.com | ec3ed6a | 2011-07-28 14:26:00 +0000 | [diff] [blame] | 2 | * Copyright 2011 Google Inc. |
| 3 | * |
| 4 | * Use of this source code is governed by a BSD-style license that can be |
| 5 | * found in the LICENSE file. |
twiz@google.com | 59a190b | 2011-03-14 21:23:01 +0000 | [diff] [blame] | 6 | */ |
| 7 | |
twiz@google.com | 59a190b | 2011-03-14 21:23:01 +0000 | [diff] [blame] | 8 | #ifndef GrGLInterface_DEFINED |
| 9 | #define GrGLInterface_DEFINED |
| 10 | |
bsalomon@google.com | 637d5e9 | 2012-05-07 21:33:56 +0000 | [diff] [blame] | 11 | #include "GrGLFunctions.h" |
commit-bot@chromium.org | 90313cc | 2014-01-17 15:05:38 +0000 | [diff] [blame] | 12 | #include "GrGLExtensions.h" |
commit-bot@chromium.org | a4de8c2 | 2013-09-09 13:38:37 +0000 | [diff] [blame] | 13 | #include "SkRefCnt.h" |
twiz@google.com | 59a190b | 2011-03-14 21:23:01 +0000 | [diff] [blame] | 14 | |
twiz@google.com | 59a190b | 2011-03-14 21:23:01 +0000 | [diff] [blame] | 15 | //////////////////////////////////////////////////////////////////////////////// |
| 16 | |
| 17 | /** |
bsalomon@google.com | 0b77d68 | 2011-08-19 13:28:54 +0000 | [diff] [blame] | 18 | * Rather than depend on platform-specific GL headers and libraries, we require |
| 19 | * the client to provide a struct of GL function pointers. This struct can be |
| 20 | * specified per-GrContext as a parameter to GrContext::Create. If NULL is |
commit-bot@chromium.org | a3b15ed | 2014-01-15 19:32:03 +0000 | [diff] [blame] | 21 | * passed to Create then a "default" GL interface is created. If the default is |
bsalomon@google.com | 0b77d68 | 2011-08-19 13:28:54 +0000 | [diff] [blame] | 22 | * also NULL GrContext creation will fail. |
| 23 | * |
bsalomon@google.com | 6fb736f | 2011-09-16 18:51:57 +0000 | [diff] [blame] | 24 | * The default interface is returned by GrGLDefaultInterface. This function's |
robertphillips@google.com | 0da3719 | 2012-03-19 14:42:13 +0000 | [diff] [blame] | 25 | * implementation is platform-specific. Several have been provided, along with |
commit-bot@chromium.org | a3b15ed | 2014-01-15 19:32:03 +0000 | [diff] [blame] | 26 | * an implementation that simply returns NULL. |
bsalomon@google.com | 56bfc5a | 2011-09-01 13:28:16 +0000 | [diff] [blame] | 27 | * |
| 28 | * By defining GR_GL_PER_GL_CALL_IFACE_CALLBACK to 1 the client can specify a |
| 29 | * callback function that will be called prior to each GL function call. See |
| 30 | * comments in GrGLConfig.h |
twiz@google.com | 59a190b | 2011-03-14 21:23:01 +0000 | [diff] [blame] | 31 | */ |
twiz@google.com | 59a190b | 2011-03-14 21:23:01 +0000 | [diff] [blame] | 32 | |
bsalomon@google.com | 0b77d68 | 2011-08-19 13:28:54 +0000 | [diff] [blame] | 33 | struct GrGLInterface; |
| 34 | |
bsalomon@google.com | 6fb736f | 2011-09-16 18:51:57 +0000 | [diff] [blame] | 35 | const GrGLInterface* GrGLDefaultInterface(); |
twiz@google.com | 59a190b | 2011-03-14 21:23:01 +0000 | [diff] [blame] | 36 | |
bsalomon@google.com | 57f5d98 | 2011-10-24 21:17:53 +0000 | [diff] [blame] | 37 | /** |
| 38 | * Creates a GrGLInterface for a "native" GL context (e.g. WGL on windows, |
commit-bot@chromium.org | a3b15ed | 2014-01-15 19:32:03 +0000 | [diff] [blame] | 39 | * GLX on linux, AGL on Mac). The interface is only valid for the GL context |
| 40 | * that is current when the interface is created. |
bsalomon@google.com | 57f5d98 | 2011-10-24 21:17:53 +0000 | [diff] [blame] | 41 | */ |
bsalomon@google.com | 373a663 | 2011-10-19 20:43:20 +0000 | [diff] [blame] | 42 | const GrGLInterface* GrGLCreateNativeInterface(); |
| 43 | |
robertphillips@google.com | d3b9fbb | 2012-03-28 16:19:11 +0000 | [diff] [blame] | 44 | #if SK_MESA |
bsalomon@google.com | 57f5d98 | 2011-10-24 21:17:53 +0000 | [diff] [blame] | 45 | /** |
| 46 | * Creates a GrGLInterface for an OSMesa context. |
| 47 | */ |
bsalomon@google.com | 373a663 | 2011-10-19 20:43:20 +0000 | [diff] [blame] | 48 | const GrGLInterface* GrGLCreateMesaInterface(); |
robertphillips@google.com | d3b9fbb | 2012-03-28 16:19:11 +0000 | [diff] [blame] | 49 | #endif |
| 50 | |
| 51 | #if SK_ANGLE |
| 52 | /** |
| 53 | * Creates a GrGLInterface for an ANGLE context. |
| 54 | */ |
| 55 | const GrGLInterface* GrGLCreateANGLEInterface(); |
| 56 | #endif |
bsalomon@google.com | 373a663 | 2011-10-19 20:43:20 +0000 | [diff] [blame] | 57 | |
bsalomon@google.com | 7491372 | 2011-10-27 20:44:19 +0000 | [diff] [blame] | 58 | /** |
| 59 | * Creates a null GrGLInterface that doesn't draw anything. Used for measuring |
| 60 | * CPU overhead. |
| 61 | */ |
commit-bot@chromium.org | aae7c2a | 2013-11-25 20:39:27 +0000 | [diff] [blame] | 62 | const SK_API GrGLInterface* GrGLCreateNullInterface(); |
bsalomon@google.com | 7491372 | 2011-10-27 20:44:19 +0000 | [diff] [blame] | 63 | |
robertphillips@google.com | 0da3719 | 2012-03-19 14:42:13 +0000 | [diff] [blame] | 64 | /** |
rmistry@google.com | fbfcd56 | 2012-08-23 18:09:54 +0000 | [diff] [blame] | 65 | * Creates a debugging GrGLInterface that doesn't draw anything. Used for |
robertphillips@google.com | 0da3719 | 2012-03-19 14:42:13 +0000 | [diff] [blame] | 66 | * finding memory leaks and invalid memory accesses. |
| 67 | */ |
| 68 | const GrGLInterface* GrGLCreateDebugInterface(); |
| 69 | |
bsalomon@google.com | 56bfc5a | 2011-09-01 13:28:16 +0000 | [diff] [blame] | 70 | #if GR_GL_PER_GL_FUNC_CALLBACK |
| 71 | typedef void (*GrGLInterfaceCallbackProc)(const GrGLInterface*); |
| 72 | typedef intptr_t GrGLInterfaceCallbackData; |
| 73 | #endif |
| 74 | |
commit-bot@chromium.org | d8ed851 | 2014-01-24 20:49:44 +0000 | [diff] [blame] | 75 | /** Function that returns a new interface identical to "interface" but without support for |
| 76 | GL_NV_path_rendering. */ |
| 77 | const GrGLInterface* GrGLInterfaceRemoveNVPR(const GrGLInterface*); |
| 78 | |
commit-bot@chromium.org | a3baf3b | 2014-02-21 18:45:30 +0000 | [diff] [blame] | 79 | /** Function that returns a new interface identical to "interface" but with support for |
| 80 | test version of GL_EXT_debug_marker. */ |
| 81 | const GrGLInterface* GrGLInterfaceAddTestDebugMarker(const GrGLInterface*, |
| 82 | GrGLInsertEventMarkerProc insertEventMarkerFn, |
| 83 | GrGLPushGroupMarkerProc pushGroupMarkerFn, |
| 84 | GrGLPopGroupMarkerProc popGroupMarkerFn); |
| 85 | |
commit-bot@chromium.org | d8ed851 | 2014-01-24 20:49:44 +0000 | [diff] [blame] | 86 | /** |
bsalomon@google.com | cc61b17 | 2012-05-07 21:45:48 +0000 | [diff] [blame] | 87 | * GrContext uses the following interface to make all calls into OpenGL. When a |
| 88 | * GrContext is created it is given a GrGLInterface. The interface's function |
| 89 | * pointers must be valid for the OpenGL context associated with the GrContext. |
| 90 | * On some platforms, such as Windows, function pointers for OpenGL extensions |
| 91 | * may vary between OpenGL contexts. So the caller must be careful to use a |
| 92 | * GrGLInterface initialized for the correct context. All functions that should |
| 93 | * be available based on the OpenGL's version and extension string must be |
| 94 | * non-NULL or GrContext creation will fail. This can be tested with the |
| 95 | * validate() method when the OpenGL context has been made current. |
bsalomon@google.com | bf2a469 | 2011-05-04 12:35:39 +0000 | [diff] [blame] | 96 | */ |
commit-bot@chromium.org | a4de8c2 | 2013-09-09 13:38:37 +0000 | [diff] [blame] | 97 | struct SK_API GrGLInterface : public SkRefCnt { |
bsalomon@google.com | ba800e2 | 2012-03-29 21:04:52 +0000 | [diff] [blame] | 98 | private: |
bsalomon@google.com | 9c1f1ac | 2012-05-07 17:09:37 +0000 | [diff] [blame] | 99 | // simple wrapper class that exists only to initialize a pointer to NULL |
bsalomon@google.com | ba800e2 | 2012-03-29 21:04:52 +0000 | [diff] [blame] | 100 | template <typename FNPTR_TYPE> class GLPtr { |
| 101 | public: |
| 102 | GLPtr() : fPtr(NULL) {} |
commit-bot@chromium.org | c72425a | 2014-01-21 16:09:18 +0000 | [diff] [blame] | 103 | GLPtr operator=(FNPTR_TYPE ptr) { fPtr = ptr; return *this; } |
bsalomon@google.com | ba800e2 | 2012-03-29 21:04:52 +0000 | [diff] [blame] | 104 | operator FNPTR_TYPE() const { return fPtr; } |
| 105 | private: |
| 106 | FNPTR_TYPE fPtr; |
| 107 | }; |
bsalomon@google.com | 0b77d68 | 2011-08-19 13:28:54 +0000 | [diff] [blame] | 108 | |
commit-bot@chromium.org | c72425a | 2014-01-21 16:09:18 +0000 | [diff] [blame] | 109 | // This is a temporary workaround to keep Chromium's GrGLInterface factories compiling until |
| 110 | // they're updated to use the Functions struct. |
| 111 | template <typename FNPTR_TYPE> class GLPtrAlias { |
| 112 | public: |
| 113 | GLPtrAlias(GLPtr<FNPTR_TYPE>* base) : fBase(base) {} |
| 114 | void operator=(FNPTR_TYPE ptr) { *fBase = ptr; } |
| 115 | private: |
| 116 | GLPtr<FNPTR_TYPE>* fBase; |
| 117 | }; |
| 118 | |
commit-bot@chromium.org | a4de8c2 | 2013-09-09 13:38:37 +0000 | [diff] [blame] | 119 | typedef SkRefCnt INHERITED; |
robertphillips@google.com | 15e9d3e | 2012-06-21 20:25:03 +0000 | [diff] [blame] | 120 | |
bsalomon@google.com | ba800e2 | 2012-03-29 21:04:52 +0000 | [diff] [blame] | 121 | public: |
robertphillips@google.com | 15e9d3e | 2012-06-21 20:25:03 +0000 | [diff] [blame] | 122 | SK_DECLARE_INST_COUNT(GrGLInterface) |
| 123 | |
bsalomon@google.com | 0b77d68 | 2011-08-19 13:28:54 +0000 | [diff] [blame] | 124 | GrGLInterface(); |
| 125 | |
commit-bot@chromium.org | d8ed851 | 2014-01-24 20:49:44 +0000 | [diff] [blame] | 126 | static GrGLInterface* NewClone(const GrGLInterface*); |
| 127 | |
commit-bot@chromium.org | 9e90aed | 2014-01-16 16:35:09 +0000 | [diff] [blame] | 128 | // Validates that the GrGLInterface supports its advertised standard. This means the necessary |
| 129 | // function pointers have been initialized for both the GL version and any advertised |
| 130 | // extensions. |
| 131 | bool validate() const; |
bsalomon@google.com | 89ec61e | 2012-02-10 20:05:18 +0000 | [diff] [blame] | 132 | |
commit-bot@chromium.org | 9e90aed | 2014-01-16 16:35:09 +0000 | [diff] [blame] | 133 | // Indicates the type of GL implementation |
| 134 | union { |
| 135 | GrGLStandard fStandard; |
| 136 | GrGLStandard fBindingsExported; // Legacy name, will be remove when Chromium is updated. |
| 137 | }; |
twiz@google.com | b65e0cb | 2011-03-18 20:41:44 +0000 | [diff] [blame] | 138 | |
commit-bot@chromium.org | 90313cc | 2014-01-17 15:05:38 +0000 | [diff] [blame] | 139 | GrGLExtensions fExtensions; |
| 140 | |
commit-bot@chromium.org | f535561 | 2014-02-28 20:28:50 +0000 | [diff] [blame] | 141 | bool hasExtension(const char ext[]) const { return fExtensions.has(ext); } |
commit-bot@chromium.org | 90313cc | 2014-01-17 15:05:38 +0000 | [diff] [blame] | 142 | |
commit-bot@chromium.org | c72425a | 2014-01-21 16:09:18 +0000 | [diff] [blame] | 143 | /** |
| 144 | * The function pointers are in a struct so that we can have a compiler generated assignment |
| 145 | * operator. |
| 146 | */ |
| 147 | struct Functions { |
| 148 | GLPtr<GrGLActiveTextureProc> fActiveTexture; |
| 149 | GLPtr<GrGLAttachShaderProc> fAttachShader; |
| 150 | GLPtr<GrGLBeginQueryProc> fBeginQuery; |
| 151 | GLPtr<GrGLBindAttribLocationProc> fBindAttribLocation; |
| 152 | GLPtr<GrGLBindBufferProc> fBindBuffer; |
| 153 | GLPtr<GrGLBindFragDataLocationProc> fBindFragDataLocation; |
| 154 | GLPtr<GrGLBindFragDataLocationIndexedProc> fBindFragDataLocationIndexed; |
| 155 | GLPtr<GrGLBindFramebufferProc> fBindFramebuffer; |
| 156 | GLPtr<GrGLBindRenderbufferProc> fBindRenderbuffer; |
| 157 | GLPtr<GrGLBindTextureProc> fBindTexture; |
| 158 | GLPtr<GrGLBindVertexArrayProc> fBindVertexArray; |
| 159 | GLPtr<GrGLBlendColorProc> fBlendColor; |
| 160 | GLPtr<GrGLBlendFuncProc> fBlendFunc; |
| 161 | GLPtr<GrGLBlitFramebufferProc> fBlitFramebuffer; |
| 162 | GLPtr<GrGLBufferDataProc> fBufferData; |
| 163 | GLPtr<GrGLBufferSubDataProc> fBufferSubData; |
| 164 | GLPtr<GrGLCheckFramebufferStatusProc> fCheckFramebufferStatus; |
| 165 | GLPtr<GrGLClearProc> fClear; |
| 166 | GLPtr<GrGLClearColorProc> fClearColor; |
| 167 | GLPtr<GrGLClearStencilProc> fClearStencil; |
commit-bot@chromium.org | c72425a | 2014-01-21 16:09:18 +0000 | [diff] [blame] | 168 | GLPtr<GrGLColorMaskProc> fColorMask; |
| 169 | GLPtr<GrGLCompileShaderProc> fCompileShader; |
| 170 | GLPtr<GrGLCompressedTexImage2DProc> fCompressedTexImage2D; |
krajcevski | 37d20f7 | 2014-06-11 10:38:47 -0700 | [diff] [blame] | 171 | GLPtr<GrGLCompressedTexSubImage2DProc> fCompressedTexSubImage2D; |
commit-bot@chromium.org | c72425a | 2014-01-21 16:09:18 +0000 | [diff] [blame] | 172 | GLPtr<GrGLCopyTexSubImage2DProc> fCopyTexSubImage2D; |
junov | f238091 | 2014-09-23 07:30:09 -0700 | [diff] [blame] | 173 | GLPtr<GrGLCopyTextureCHROMIUMProc> fCopyTextureCHROMIUM; |
commit-bot@chromium.org | c72425a | 2014-01-21 16:09:18 +0000 | [diff] [blame] | 174 | GLPtr<GrGLCreateProgramProc> fCreateProgram; |
| 175 | GLPtr<GrGLCreateShaderProc> fCreateShader; |
| 176 | GLPtr<GrGLCullFaceProc> fCullFace; |
| 177 | GLPtr<GrGLDeleteBuffersProc> fDeleteBuffers; |
| 178 | GLPtr<GrGLDeleteFramebuffersProc> fDeleteFramebuffers; |
| 179 | GLPtr<GrGLDeleteProgramProc> fDeleteProgram; |
| 180 | GLPtr<GrGLDeleteQueriesProc> fDeleteQueries; |
| 181 | GLPtr<GrGLDeleteRenderbuffersProc> fDeleteRenderbuffers; |
| 182 | GLPtr<GrGLDeleteShaderProc> fDeleteShader; |
| 183 | GLPtr<GrGLDeleteTexturesProc> fDeleteTextures; |
| 184 | GLPtr<GrGLDeleteVertexArraysProc> fDeleteVertexArrays; |
| 185 | GLPtr<GrGLDepthMaskProc> fDepthMask; |
| 186 | GLPtr<GrGLDisableProc> fDisable; |
commit-bot@chromium.org | c72425a | 2014-01-21 16:09:18 +0000 | [diff] [blame] | 187 | GLPtr<GrGLDisableVertexAttribArrayProc> fDisableVertexAttribArray; |
| 188 | GLPtr<GrGLDrawArraysProc> fDrawArrays; |
| 189 | GLPtr<GrGLDrawBufferProc> fDrawBuffer; |
| 190 | GLPtr<GrGLDrawBuffersProc> fDrawBuffers; |
| 191 | GLPtr<GrGLDrawElementsProc> fDrawElements; |
| 192 | GLPtr<GrGLEnableProc> fEnable; |
commit-bot@chromium.org | c72425a | 2014-01-21 16:09:18 +0000 | [diff] [blame] | 193 | GLPtr<GrGLEnableVertexAttribArrayProc> fEnableVertexAttribArray; |
| 194 | GLPtr<GrGLEndQueryProc> fEndQuery; |
| 195 | GLPtr<GrGLFinishProc> fFinish; |
| 196 | GLPtr<GrGLFlushProc> fFlush; |
commit-bot@chromium.org | 160b478 | 2014-05-05 12:32:37 +0000 | [diff] [blame] | 197 | GLPtr<GrGLFlushMappedBufferRangeProc> fFlushMappedBufferRange; |
commit-bot@chromium.org | c72425a | 2014-01-21 16:09:18 +0000 | [diff] [blame] | 198 | GLPtr<GrGLFramebufferRenderbufferProc> fFramebufferRenderbuffer; |
| 199 | GLPtr<GrGLFramebufferTexture2DProc> fFramebufferTexture2D; |
| 200 | GLPtr<GrGLFramebufferTexture2DMultisampleProc> fFramebufferTexture2DMultisample; |
| 201 | GLPtr<GrGLFrontFaceProc> fFrontFace; |
| 202 | GLPtr<GrGLGenBuffersProc> fGenBuffers; |
| 203 | GLPtr<GrGLGenFramebuffersProc> fGenFramebuffers; |
| 204 | GLPtr<GrGLGenerateMipmapProc> fGenerateMipmap; |
| 205 | GLPtr<GrGLGenQueriesProc> fGenQueries; |
| 206 | GLPtr<GrGLGenRenderbuffersProc> fGenRenderbuffers; |
| 207 | GLPtr<GrGLGenTexturesProc> fGenTextures; |
| 208 | GLPtr<GrGLGenVertexArraysProc> fGenVertexArrays; |
| 209 | GLPtr<GrGLGetBufferParameterivProc> fGetBufferParameteriv; |
| 210 | GLPtr<GrGLGetErrorProc> fGetError; |
| 211 | GLPtr<GrGLGetFramebufferAttachmentParameterivProc> fGetFramebufferAttachmentParameteriv; |
| 212 | GLPtr<GrGLGetIntegervProc> fGetIntegerv; |
| 213 | GLPtr<GrGLGetQueryObjecti64vProc> fGetQueryObjecti64v; |
| 214 | GLPtr<GrGLGetQueryObjectivProc> fGetQueryObjectiv; |
| 215 | GLPtr<GrGLGetQueryObjectui64vProc> fGetQueryObjectui64v; |
| 216 | GLPtr<GrGLGetQueryObjectuivProc> fGetQueryObjectuiv; |
| 217 | GLPtr<GrGLGetQueryivProc> fGetQueryiv; |
| 218 | GLPtr<GrGLGetProgramInfoLogProc> fGetProgramInfoLog; |
| 219 | GLPtr<GrGLGetProgramivProc> fGetProgramiv; |
| 220 | GLPtr<GrGLGetRenderbufferParameterivProc> fGetRenderbufferParameteriv; |
| 221 | GLPtr<GrGLGetShaderInfoLogProc> fGetShaderInfoLog; |
| 222 | GLPtr<GrGLGetShaderivProc> fGetShaderiv; |
| 223 | GLPtr<GrGLGetStringProc> fGetString; |
| 224 | GLPtr<GrGLGetStringiProc> fGetStringi; |
| 225 | GLPtr<GrGLGetTexLevelParameterivProc> fGetTexLevelParameteriv; |
| 226 | GLPtr<GrGLGetUniformLocationProc> fGetUniformLocation; |
commit-bot@chromium.org | a3baf3b | 2014-02-21 18:45:30 +0000 | [diff] [blame] | 227 | GLPtr<GrGLInsertEventMarkerProc> fInsertEventMarker; |
bsalomon@google.com | a34bb60 | 2014-04-01 13:07:29 +0000 | [diff] [blame] | 228 | GLPtr<GrGLInvalidateBufferDataProc> fInvalidateBufferData; |
| 229 | GLPtr<GrGLInvalidateBufferSubDataProc> fInvalidateBufferSubData; |
| 230 | GLPtr<GrGLInvalidateFramebufferProc> fInvalidateFramebuffer; |
| 231 | GLPtr<GrGLInvalidateSubFramebufferProc> fInvalidateSubFramebuffer; |
| 232 | GLPtr<GrGLInvalidateTexImageProc> fInvalidateTexImage; |
| 233 | GLPtr<GrGLInvalidateTexSubImageProc> fInvalidateTexSubImage; |
commit-bot@chromium.org | c72425a | 2014-01-21 16:09:18 +0000 | [diff] [blame] | 234 | GLPtr<GrGLLineWidthProc> fLineWidth; |
| 235 | GLPtr<GrGLLinkProgramProc> fLinkProgram; |
commit-bot@chromium.org | c72425a | 2014-01-21 16:09:18 +0000 | [diff] [blame] | 236 | GLPtr<GrGLMapBufferProc> fMapBuffer; |
commit-bot@chromium.org | 160b478 | 2014-05-05 12:32:37 +0000 | [diff] [blame] | 237 | GLPtr<GrGLMapBufferRangeProc> fMapBufferRange; |
commit-bot@chromium.org | beb8b3a | 2014-04-15 15:37:51 +0000 | [diff] [blame] | 238 | GLPtr<GrGLMapBufferSubDataProc> fMapBufferSubData; |
| 239 | GLPtr<GrGLMapTexSubImage2DProc> fMapTexSubImage2D; |
commit-bot@chromium.org | f669672 | 2014-04-25 06:21:30 +0000 | [diff] [blame] | 240 | GLPtr<GrGLMatrixLoadfProc> fMatrixLoadf; |
| 241 | GLPtr<GrGLMatrixLoadIdentityProc> fMatrixLoadIdentity; |
commit-bot@chromium.org | c72425a | 2014-01-21 16:09:18 +0000 | [diff] [blame] | 242 | GLPtr<GrGLPixelStoreiProc> fPixelStorei; |
commit-bot@chromium.org | a3baf3b | 2014-02-21 18:45:30 +0000 | [diff] [blame] | 243 | GLPtr<GrGLPopGroupMarkerProc> fPopGroupMarker; |
| 244 | GLPtr<GrGLPushGroupMarkerProc> fPushGroupMarker; |
commit-bot@chromium.org | c72425a | 2014-01-21 16:09:18 +0000 | [diff] [blame] | 245 | GLPtr<GrGLQueryCounterProc> fQueryCounter; |
| 246 | GLPtr<GrGLReadBufferProc> fReadBuffer; |
| 247 | GLPtr<GrGLReadPixelsProc> fReadPixels; |
| 248 | GLPtr<GrGLRenderbufferStorageProc> fRenderbufferStorage; |
commit-bot@chromium.org | a8e5a06 | 2013-09-05 23:44:09 +0000 | [diff] [blame] | 249 | |
commit-bot@chromium.org | c72425a | 2014-01-21 16:09:18 +0000 | [diff] [blame] | 250 | // On OpenGL ES there are multiple incompatible extensions that add support for MSAA |
| 251 | // and ES3 adds MSAA support to the standard. On an ES3 driver we may still use the |
| 252 | // older extensions for performance reasons or due to ES3 driver bugs. We want the function |
| 253 | // that creates the GrGLInterface to provide all available functions and internally |
| 254 | // we will select among them. They all have a method called glRenderbufferStorageMultisample*. |
| 255 | // So we have separate function pointers for GL_IMG/EXT_multisampled_to_texture, |
| 256 | // GL_CHROMIUM/ANGLE_framebuffer_multisample/ES3, and GL_APPLE_framebuffer_multisample |
| 257 | // variations. |
| 258 | // |
| 259 | // If a driver supports multiple GL_ARB_framebuffer_multisample-style extensions then we will |
| 260 | // assume the function pointers for the standard (or equivalent GL_ARB) version have |
| 261 | // been preferred over GL_EXT, GL_CHROMIUM, or GL_ANGLE variations that have reduced |
| 262 | // functionality. |
commit-bot@chromium.org | a8e5a06 | 2013-09-05 23:44:09 +0000 | [diff] [blame] | 263 | |
commit-bot@chromium.org | c72425a | 2014-01-21 16:09:18 +0000 | [diff] [blame] | 264 | // GL_EXT_multisampled_render_to_texture (preferred) or GL_IMG_multisampled_render_to_texture |
| 265 | GLPtr<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisampleES2EXT; |
| 266 | // GL_APPLE_framebuffer_multisample |
| 267 | GLPtr<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisampleES2APPLE; |
commit-bot@chromium.org | 92b7884 | 2014-01-16 20:49:46 +0000 | [diff] [blame] | 268 | |
commit-bot@chromium.org | c72425a | 2014-01-21 16:09:18 +0000 | [diff] [blame] | 269 | // This is used to store the pointer for GL_ARB/EXT/ANGLE/CHROMIUM_framebuffer_multisample or |
| 270 | // the standard function in ES3+ or GL 3.0+. |
| 271 | GLPtr<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisample; |
commit-bot@chromium.org | a8e5a06 | 2013-09-05 23:44:09 +0000 | [diff] [blame] | 272 | |
commit-bot@chromium.org | c72425a | 2014-01-21 16:09:18 +0000 | [diff] [blame] | 273 | // Pointer to BindUniformLocationCHROMIUM from the GL_CHROMIUM_bind_uniform_location extension. |
| 274 | GLPtr<GrGLBindUniformLocation> fBindUniformLocation; |
commit-bot@chromium.org | d3baf20 | 2013-11-07 22:06:08 +0000 | [diff] [blame] | 275 | |
commit-bot@chromium.org | c72425a | 2014-01-21 16:09:18 +0000 | [diff] [blame] | 276 | GLPtr<GrGLResolveMultisampleFramebufferProc> fResolveMultisampleFramebuffer; |
| 277 | GLPtr<GrGLScissorProc> fScissor; |
| 278 | GLPtr<GrGLShaderSourceProc> fShaderSource; |
| 279 | GLPtr<GrGLStencilFuncProc> fStencilFunc; |
| 280 | GLPtr<GrGLStencilFuncSeparateProc> fStencilFuncSeparate; |
| 281 | GLPtr<GrGLStencilMaskProc> fStencilMask; |
| 282 | GLPtr<GrGLStencilMaskSeparateProc> fStencilMaskSeparate; |
| 283 | GLPtr<GrGLStencilOpProc> fStencilOp; |
| 284 | GLPtr<GrGLStencilOpSeparateProc> fStencilOpSeparate; |
commit-bot@chromium.org | c72425a | 2014-01-21 16:09:18 +0000 | [diff] [blame] | 285 | GLPtr<GrGLTexImage2DProc> fTexImage2D; |
| 286 | GLPtr<GrGLTexParameteriProc> fTexParameteri; |
| 287 | GLPtr<GrGLTexParameterivProc> fTexParameteriv; |
| 288 | GLPtr<GrGLTexSubImage2DProc> fTexSubImage2D; |
| 289 | GLPtr<GrGLTexStorage2DProc> fTexStorage2D; |
| 290 | GLPtr<GrGLDiscardFramebufferProc> fDiscardFramebuffer; |
| 291 | GLPtr<GrGLUniform1fProc> fUniform1f; |
| 292 | GLPtr<GrGLUniform1iProc> fUniform1i; |
| 293 | GLPtr<GrGLUniform1fvProc> fUniform1fv; |
| 294 | GLPtr<GrGLUniform1ivProc> fUniform1iv; |
| 295 | GLPtr<GrGLUniform2fProc> fUniform2f; |
| 296 | GLPtr<GrGLUniform2iProc> fUniform2i; |
| 297 | GLPtr<GrGLUniform2fvProc> fUniform2fv; |
| 298 | GLPtr<GrGLUniform2ivProc> fUniform2iv; |
| 299 | GLPtr<GrGLUniform3fProc> fUniform3f; |
| 300 | GLPtr<GrGLUniform3iProc> fUniform3i; |
| 301 | GLPtr<GrGLUniform3fvProc> fUniform3fv; |
| 302 | GLPtr<GrGLUniform3ivProc> fUniform3iv; |
| 303 | GLPtr<GrGLUniform4fProc> fUniform4f; |
| 304 | GLPtr<GrGLUniform4iProc> fUniform4i; |
| 305 | GLPtr<GrGLUniform4fvProc> fUniform4fv; |
| 306 | GLPtr<GrGLUniform4ivProc> fUniform4iv; |
| 307 | GLPtr<GrGLUniformMatrix2fvProc> fUniformMatrix2fv; |
| 308 | GLPtr<GrGLUniformMatrix3fvProc> fUniformMatrix3fv; |
| 309 | GLPtr<GrGLUniformMatrix4fvProc> fUniformMatrix4fv; |
| 310 | GLPtr<GrGLUnmapBufferProc> fUnmapBuffer; |
commit-bot@chromium.org | beb8b3a | 2014-04-15 15:37:51 +0000 | [diff] [blame] | 311 | GLPtr<GrGLUnmapBufferSubDataProc> fUnmapBufferSubData; |
| 312 | GLPtr<GrGLUnmapTexSubImage2DProc> fUnmapTexSubImage2D; |
commit-bot@chromium.org | c72425a | 2014-01-21 16:09:18 +0000 | [diff] [blame] | 313 | GLPtr<GrGLUseProgramProc> fUseProgram; |
egdaniel | 27c1521 | 2014-10-24 15:00:50 -0700 | [diff] [blame] | 314 | GLPtr<GrGLVertexAttrib1fProc> fVertexAttrib1f; |
| 315 | GLPtr<GrGLVertexAttrib2fvProc> fVertexAttrib2fv; |
| 316 | GLPtr<GrGLVertexAttrib3fvProc> fVertexAttrib3fv; |
commit-bot@chromium.org | c72425a | 2014-01-21 16:09:18 +0000 | [diff] [blame] | 317 | GLPtr<GrGLVertexAttrib4fvProc> fVertexAttrib4fv; |
| 318 | GLPtr<GrGLVertexAttribPointerProc> fVertexAttribPointer; |
commit-bot@chromium.org | c72425a | 2014-01-21 16:09:18 +0000 | [diff] [blame] | 319 | GLPtr<GrGLViewportProc> fViewport; |
bsalomon@google.com | 271cffc | 2011-05-20 14:13:56 +0000 | [diff] [blame] | 320 | |
commit-bot@chromium.org | c72425a | 2014-01-21 16:09:18 +0000 | [diff] [blame] | 321 | // Experimental: Functions for GL_NV_path_rendering. These will be |
| 322 | // alphabetized with the above functions once this is fully supported |
| 323 | // (and functions we are unlikely to use will possibly be omitted). |
kkinnunen | 32b9a3b | 2014-07-02 22:56:35 -0700 | [diff] [blame] | 324 | GLPtr<GrGLGetProgramResourceLocationProc> fGetProgramResourceLocation; |
commit-bot@chromium.org | c72425a | 2014-01-21 16:09:18 +0000 | [diff] [blame] | 325 | GLPtr<GrGLPathCommandsProc> fPathCommands; |
| 326 | GLPtr<GrGLPathCoordsProc> fPathCoords; |
commit-bot@chromium.org | c72425a | 2014-01-21 16:09:18 +0000 | [diff] [blame] | 327 | GLPtr<GrGLPathParameteriProc> fPathParameteri; |
commit-bot@chromium.org | c72425a | 2014-01-21 16:09:18 +0000 | [diff] [blame] | 328 | GLPtr<GrGLPathParameterfProc> fPathParameterf; |
commit-bot@chromium.org | c72425a | 2014-01-21 16:09:18 +0000 | [diff] [blame] | 329 | GLPtr<GrGLGenPathsProc> fGenPaths; |
| 330 | GLPtr<GrGLDeletePathsProc> fDeletePaths; |
cdalton | 8dd90cb | 2014-07-17 09:28:36 -0700 | [diff] [blame] | 331 | GLPtr<GrGLIsPathProc> fIsPath; |
commit-bot@chromium.org | c72425a | 2014-01-21 16:09:18 +0000 | [diff] [blame] | 332 | GLPtr<GrGLPathStencilFuncProc> fPathStencilFunc; |
commit-bot@chromium.org | c72425a | 2014-01-21 16:09:18 +0000 | [diff] [blame] | 333 | GLPtr<GrGLStencilFillPathProc> fStencilFillPath; |
| 334 | GLPtr<GrGLStencilStrokePathProc> fStencilStrokePath; |
| 335 | GLPtr<GrGLStencilFillPathInstancedProc> fStencilFillPathInstanced; |
| 336 | GLPtr<GrGLStencilStrokePathInstancedProc> fStencilStrokePathInstanced; |
commit-bot@chromium.org | c72425a | 2014-01-21 16:09:18 +0000 | [diff] [blame] | 337 | GLPtr<GrGLPathTexGenProc> fPathTexGen; |
commit-bot@chromium.org | c72425a | 2014-01-21 16:09:18 +0000 | [diff] [blame] | 338 | GLPtr<GrGLCoverFillPathProc> fCoverFillPath; |
| 339 | GLPtr<GrGLCoverStrokePathProc> fCoverStrokePath; |
| 340 | GLPtr<GrGLCoverFillPathInstancedProc> fCoverFillPathInstanced; |
| 341 | GLPtr<GrGLCoverStrokePathInstancedProc> fCoverStrokePathInstanced; |
cdalton | c7103a1 | 2014-08-11 14:05:05 -0700 | [diff] [blame] | 342 | // NV_path_rendering v1.2 |
cdalton | c8f5204 | 2014-07-29 15:25:51 -0700 | [diff] [blame] | 343 | GLPtr<GrGLStencilThenCoverFillPathProc> fStencilThenCoverFillPath; |
| 344 | GLPtr<GrGLStencilThenCoverStrokePathProc> fStencilThenCoverStrokePath; |
| 345 | GLPtr<GrGLStencilThenCoverFillPathInstancedProc> fStencilThenCoverFillPathInstanced; |
| 346 | GLPtr<GrGLStencilThenCoverStrokePathInstancedProc> fStencilThenCoverStrokePathInstanced; |
cdalton | c7103a1 | 2014-08-11 14:05:05 -0700 | [diff] [blame] | 347 | // NV_path_rendering v1.3 |
kkinnunen | 32b9a3b | 2014-07-02 22:56:35 -0700 | [diff] [blame] | 348 | GLPtr<GrGLProgramPathFragmentInputGenProc> fProgramPathFragmentInputGen; |
cdalton | 149b3ec | 2014-09-17 09:19:18 -0700 | [diff] [blame] | 349 | GLPtr<GrGLPathMemoryGlyphIndexArrayProc> fPathMemoryGlyphIndexArray; |
commit-bot@chromium.org | c72425a | 2014-01-21 16:09:18 +0000 | [diff] [blame] | 350 | } fFunctions; |
| 351 | |
bsalomon@google.com | 56bfc5a | 2011-09-01 13:28:16 +0000 | [diff] [blame] | 352 | // Per-GL func callback |
| 353 | #if GR_GL_PER_GL_FUNC_CALLBACK |
| 354 | GrGLInterfaceCallbackProc fCallback; |
| 355 | GrGLInterfaceCallbackData fCallbackData; |
| 356 | #endif |
bsalomon | 944bcf0 | 2014-07-29 08:01:52 -0700 | [diff] [blame] | 357 | |
| 358 | // This exists for internal testing. |
| 359 | virtual void abandon() const {} |
bsalomon@google.com | bf2a469 | 2011-05-04 12:35:39 +0000 | [diff] [blame] | 360 | }; |
twiz@google.com | 59a190b | 2011-03-14 21:23:01 +0000 | [diff] [blame] | 361 | |
| 362 | #endif |