diff options
Diffstat (limited to 'chromium/third_party/skia/include/gpu/gl/GrGLInterface.h')
-rw-r--r-- | chromium/third_party/skia/include/gpu/gl/GrGLInterface.h | 529 |
1 files changed, 272 insertions, 257 deletions
diff --git a/chromium/third_party/skia/include/gpu/gl/GrGLInterface.h b/chromium/third_party/skia/include/gpu/gl/GrGLInterface.h index 0d4749a836e..6c5ab24fdc4 100644 --- a/chromium/third_party/skia/include/gpu/gl/GrGLInterface.h +++ b/chromium/third_party/skia/include/gpu/gl/GrGLInterface.h @@ -9,45 +9,21 @@ #define GrGLInterface_DEFINED #include "GrGLFunctions.h" +#include "GrGLExtensions.h" #include "SkRefCnt.h" //////////////////////////////////////////////////////////////////////////////// /** - * Classifies GL contexts (currently as Desktop vs. ES2). This is a bitfield. - * A GrGLInterface (defined below) may support multiple bindings. - */ -enum GrGLBinding { - kNone_GrGLBinding = 0x0, - - kDesktop_GrGLBinding = 0x01, - kES_GrGLBinding = 0x02, // ES2+ only - - // for iteration of GrGLBindings - kFirstGrGLBinding = kDesktop_GrGLBinding, - kLastGrGLBinding = kES_GrGLBinding -}; - -// Temporary alias until Chromium can be updated. -static const GrGLBinding kES2_GrGLBinding = kES_GrGLBinding; - -//////////////////////////////////////////////////////////////////////////////// - -/** * Rather than depend on platform-specific GL headers and libraries, we require * the client to provide a struct of GL function pointers. This struct can be * specified per-GrContext as a parameter to GrContext::Create. If NULL is - * passed to Create then the "default" GL interface is used. If the default is + * passed to Create then a "default" GL interface is created. If the default is * also NULL GrContext creation will fail. * * The default interface is returned by GrGLDefaultInterface. This function's * implementation is platform-specific. Several have been provided, along with - * an implementation that simply returns NULL. It is implementation-specific - * whether the same GrGLInterface is returned or whether a new one is created - * at each call. Some platforms may not be able to use a single GrGLInterface - * because extension function ptrs vary across contexts. Note that GrGLInterface - * is ref-counted. So if the same object is returned by multiple calls to - * GrGLDefaultInterface, each should bump the ref count. + * an implementation that simply returns NULL. * * By defining GR_GL_PER_GL_CALL_IFACE_CALLBACK to 1 the client can specify a * callback function that will be called prior to each GL function call. See @@ -60,9 +36,8 @@ const GrGLInterface* GrGLDefaultInterface(); /** * Creates a GrGLInterface for a "native" GL context (e.g. WGL on windows, - * GLX on linux, AGL on Mac). On platforms that have context-specific function - * pointers for GL extensions (e.g. windows) the returned interface is only - * valid for the context that was current at creation. + * GLX on linux, AGL on Mac). The interface is only valid for the GL context + * that is current when the interface is created. */ const GrGLInterface* GrGLCreateNativeInterface(); @@ -97,7 +72,18 @@ typedef void (*GrGLInterfaceCallbackProc)(const GrGLInterface*); typedef intptr_t GrGLInterfaceCallbackData; #endif -/* +/** Function that returns a new interface identical to "interface" but without support for + GL_NV_path_rendering. */ +const GrGLInterface* GrGLInterfaceRemoveNVPR(const GrGLInterface*); + +/** Function that returns a new interface identical to "interface" but with support for + test version of GL_EXT_debug_marker. */ +const GrGLInterface* GrGLInterfaceAddTestDebugMarker(const GrGLInterface*, + GrGLInsertEventMarkerProc insertEventMarkerFn, + GrGLPushGroupMarkerProc pushGroupMarkerFn, + GrGLPopGroupMarkerProc popGroupMarkerFn); + +/** * GrContext uses the following interface to make all calls into OpenGL. When a * GrContext is created it is given a GrGLInterface. The interface's function * pointers must be valid for the OpenGL context associated with the GrContext. @@ -114,12 +100,22 @@ private: template <typename FNPTR_TYPE> class GLPtr { public: GLPtr() : fPtr(NULL) {} - GLPtr operator =(FNPTR_TYPE ptr) { fPtr = ptr; return *this; } + GLPtr operator=(FNPTR_TYPE ptr) { fPtr = ptr; return *this; } operator FNPTR_TYPE() const { return fPtr; } private: FNPTR_TYPE fPtr; }; + // This is a temporary workaround to keep Chromium's GrGLInterface factories compiling until + // they're updated to use the Functions struct. + template <typename FNPTR_TYPE> class GLPtrAlias { + public: + GLPtrAlias(GLPtr<FNPTR_TYPE>* base) : fBase(base) {} + void operator=(FNPTR_TYPE ptr) { *fBase = ptr; } + private: + GLPtr<FNPTR_TYPE>* fBase; + }; + typedef SkRefCnt INHERITED; public: @@ -127,237 +123,256 @@ public: GrGLInterface(); - // Validates that the GrGLInterface supports a binding. This means that - // the GrGLinterface advertises the binding in fBindingsExported and all - // the necessary function pointers have been initialized. The interface is - // validated for the current OpenGL context. - bool validate(GrGLBinding binding) const; - - // Indicator variable specifying the type of GL implementation - // exported: GLES2 and/or Desktop. - GrGLBinding fBindingsExported; - - GLPtr<GrGLActiveTextureProc> fActiveTexture; - GLPtr<GrGLAttachShaderProc> fAttachShader; - GLPtr<GrGLBeginQueryProc> fBeginQuery; - GLPtr<GrGLBindAttribLocationProc> fBindAttribLocation; - GLPtr<GrGLBindBufferProc> fBindBuffer; - GLPtr<GrGLBindFragDataLocationProc> fBindFragDataLocation; - GLPtr<GrGLBindFragDataLocationIndexedProc> fBindFragDataLocationIndexed; - GLPtr<GrGLBindFramebufferProc> fBindFramebuffer; - GLPtr<GrGLBindRenderbufferProc> fBindRenderbuffer; - GLPtr<GrGLBindTextureProc> fBindTexture; - GLPtr<GrGLBindVertexArrayProc> fBindVertexArray; - GLPtr<GrGLBlendColorProc> fBlendColor; - GLPtr<GrGLBlendFuncProc> fBlendFunc; - GLPtr<GrGLBlitFramebufferProc> fBlitFramebuffer; - GLPtr<GrGLBufferDataProc> fBufferData; - GLPtr<GrGLBufferSubDataProc> fBufferSubData; - GLPtr<GrGLCheckFramebufferStatusProc> fCheckFramebufferStatus; - GLPtr<GrGLClearProc> fClear; - GLPtr<GrGLClearColorProc> fClearColor; - GLPtr<GrGLClearStencilProc> fClearStencil; - GLPtr<GrGLClientActiveTextureProc> fClientActiveTexture; - GLPtr<GrGLColorMaskProc> fColorMask; - GLPtr<GrGLCompileShaderProc> fCompileShader; - GLPtr<GrGLCompressedTexImage2DProc> fCompressedTexImage2D; - GLPtr<GrGLCopyTexSubImage2DProc> fCopyTexSubImage2D; - GLPtr<GrGLCreateProgramProc> fCreateProgram; - GLPtr<GrGLCreateShaderProc> fCreateShader; - GLPtr<GrGLCullFaceProc> fCullFace; - GLPtr<GrGLDeleteBuffersProc> fDeleteBuffers; - GLPtr<GrGLDeleteFramebuffersProc> fDeleteFramebuffers; - GLPtr<GrGLDeleteProgramProc> fDeleteProgram; - GLPtr<GrGLDeleteQueriesProc> fDeleteQueries; - GLPtr<GrGLDeleteRenderbuffersProc> fDeleteRenderbuffers; - GLPtr<GrGLDeleteShaderProc> fDeleteShader; - GLPtr<GrGLDeleteTexturesProc> fDeleteTextures; - GLPtr<GrGLDeleteVertexArraysProc> fDeleteVertexArrays; - GLPtr<GrGLDepthMaskProc> fDepthMask; - GLPtr<GrGLDisableProc> fDisable; - GLPtr<GrGLDisableClientStateProc> fDisableClientState; - GLPtr<GrGLDisableVertexAttribArrayProc> fDisableVertexAttribArray; - GLPtr<GrGLDrawArraysProc> fDrawArrays; - GLPtr<GrGLDrawBufferProc> fDrawBuffer; - GLPtr<GrGLDrawBuffersProc> fDrawBuffers; - GLPtr<GrGLDrawElementsProc> fDrawElements; - GLPtr<GrGLEnableProc> fEnable; - GLPtr<GrGLEnableClientStateProc> fEnableClientState; - GLPtr<GrGLEnableVertexAttribArrayProc> fEnableVertexAttribArray; - GLPtr<GrGLEndQueryProc> fEndQuery; - GLPtr<GrGLFinishProc> fFinish; - GLPtr<GrGLFlushProc> fFlush; - GLPtr<GrGLFramebufferRenderbufferProc> fFramebufferRenderbuffer; - GLPtr<GrGLFramebufferTexture2DProc> fFramebufferTexture2D; - GLPtr<GrGLFramebufferTexture2DMultisampleProc> fFramebufferTexture2DMultisample; - GLPtr<GrGLFrontFaceProc> fFrontFace; - GLPtr<GrGLGenBuffersProc> fGenBuffers; - GLPtr<GrGLGenFramebuffersProc> fGenFramebuffers; - GLPtr<GrGLGenerateMipmapProc> fGenerateMipmap; - GLPtr<GrGLGenQueriesProc> fGenQueries; - GLPtr<GrGLGenRenderbuffersProc> fGenRenderbuffers; - GLPtr<GrGLGenTexturesProc> fGenTextures; - GLPtr<GrGLGenVertexArraysProc> fGenVertexArrays; - GLPtr<GrGLGetBufferParameterivProc> fGetBufferParameteriv; - GLPtr<GrGLGetErrorProc> fGetError; - GLPtr<GrGLGetFramebufferAttachmentParameterivProc> fGetFramebufferAttachmentParameteriv; - GLPtr<GrGLGetIntegervProc> fGetIntegerv; - GLPtr<GrGLGetQueryObjecti64vProc> fGetQueryObjecti64v; - GLPtr<GrGLGetQueryObjectivProc> fGetQueryObjectiv; - GLPtr<GrGLGetQueryObjectui64vProc> fGetQueryObjectui64v; - GLPtr<GrGLGetQueryObjectuivProc> fGetQueryObjectuiv; - GLPtr<GrGLGetQueryivProc> fGetQueryiv; - GLPtr<GrGLGetProgramInfoLogProc> fGetProgramInfoLog; - GLPtr<GrGLGetProgramivProc> fGetProgramiv; - GLPtr<GrGLGetRenderbufferParameterivProc> fGetRenderbufferParameteriv; - GLPtr<GrGLGetShaderInfoLogProc> fGetShaderInfoLog; - GLPtr<GrGLGetShaderivProc> fGetShaderiv; - GLPtr<GrGLGetStringProc> fGetString; - GLPtr<GrGLGetStringiProc> fGetStringi; - GLPtr<GrGLGetTexLevelParameterivProc> fGetTexLevelParameteriv; - GLPtr<GrGLGetUniformLocationProc> fGetUniformLocation; - GLPtr<GrGLLineWidthProc> fLineWidth; - GLPtr<GrGLLinkProgramProc> fLinkProgram; - GLPtr<GrGLLoadIdentityProc> fLoadIdentity; - GLPtr<GrGLLoadMatrixfProc> fLoadMatrixf; - GLPtr<GrGLMapBufferProc> fMapBuffer; - GLPtr<GrGLMatrixModeProc> fMatrixMode; - GLPtr<GrGLPixelStoreiProc> fPixelStorei; - GLPtr<GrGLQueryCounterProc> fQueryCounter; - GLPtr<GrGLReadBufferProc> fReadBuffer; - GLPtr<GrGLReadPixelsProc> fReadPixels; - GLPtr<GrGLRenderbufferStorageProc> fRenderbufferStorage; - -#if !GR_GL_IGNORE_ES3_MSAA - // On OpenGL ES there are multiple incompatible extensions that add support for MSAA - // and ES3 adds MSAA support to the standard. On an ES3 driver we may still use the - // older extensions for performance reasons or due to ES3 driver bugs. We want the function - // that creates the GrGLInterface to provide all available functions and internally - // we will select among them. They all have a method called glRenderbufferStorageMultisample*. - // So we have separate function pointers for GL_IMG/EXT_multisampled_to_texture, - // GL_CHROMIUM/ANGLE_framebuffer_multisample/ES3, and GL_APPLE_framebuffer_multisample - // variations. - // - // If a driver supports multiple GL_ARB_framebuffer_multisample-style extensions then we will - // assume the function pointers for the standard (or equivalent GL_ARB) version have - // been preferred over GL_EXT, GL_CHROMIUM, or GL_ANGLE variations that have reduced - // functionality. - - // GL_EXT_multisampled_render_to_texture (preferred) or GL_IMG_multisampled_render_to_texture - GLPtr<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisampleES2EXT; - // GL_APPLE_framebuffer_multisample - GLPtr<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisampleES2APPLE; -#endif - // This is used to store the pointer for GL_ARB/EXT/ANGLE/CHROMIUM_framebuffer_multisample or - // the standard function in ES3+ or GL 3.0+. - GLPtr<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisample; - - // Pointer to BindUniformLocationCHROMIUM from the GL_CHROMIUM_bind_uniform_location extension. - GLPtr<GrGLBindUniformLocation> fBindUniformLocation; - - GLPtr<GrGLResolveMultisampleFramebufferProc> fResolveMultisampleFramebuffer; - GLPtr<GrGLScissorProc> fScissor; - GLPtr<GrGLShaderSourceProc> fShaderSource; - GLPtr<GrGLStencilFuncProc> fStencilFunc; - GLPtr<GrGLStencilFuncSeparateProc> fStencilFuncSeparate; - GLPtr<GrGLStencilMaskProc> fStencilMask; - GLPtr<GrGLStencilMaskSeparateProc> fStencilMaskSeparate; - GLPtr<GrGLStencilOpProc> fStencilOp; - GLPtr<GrGLStencilOpSeparateProc> fStencilOpSeparate; - GLPtr<GrGLTexGenfProc> fTexGenf; - GLPtr<GrGLTexGenfvProc> fTexGenfv; - GLPtr<GrGLTexGeniProc> fTexGeni; - GLPtr<GrGLTexImage2DProc> fTexImage2D; - GLPtr<GrGLTexParameteriProc> fTexParameteri; - GLPtr<GrGLTexParameterivProc> fTexParameteriv; - GLPtr<GrGLTexSubImage2DProc> fTexSubImage2D; - GLPtr<GrGLTexStorage2DProc> fTexStorage2D; - GLPtr<GrGLDiscardFramebufferProc> fDiscardFramebuffer; - GLPtr<GrGLUniform1fProc> fUniform1f; - GLPtr<GrGLUniform1iProc> fUniform1i; - GLPtr<GrGLUniform1fvProc> fUniform1fv; - GLPtr<GrGLUniform1ivProc> fUniform1iv; - GLPtr<GrGLUniform2fProc> fUniform2f; - GLPtr<GrGLUniform2iProc> fUniform2i; - GLPtr<GrGLUniform2fvProc> fUniform2fv; - GLPtr<GrGLUniform2ivProc> fUniform2iv; - GLPtr<GrGLUniform3fProc> fUniform3f; - GLPtr<GrGLUniform3iProc> fUniform3i; - GLPtr<GrGLUniform3fvProc> fUniform3fv; - GLPtr<GrGLUniform3ivProc> fUniform3iv; - GLPtr<GrGLUniform4fProc> fUniform4f; - GLPtr<GrGLUniform4iProc> fUniform4i; - GLPtr<GrGLUniform4fvProc> fUniform4fv; - GLPtr<GrGLUniform4ivProc> fUniform4iv; - GLPtr<GrGLUniformMatrix2fvProc> fUniformMatrix2fv; - GLPtr<GrGLUniformMatrix3fvProc> fUniformMatrix3fv; - GLPtr<GrGLUniformMatrix4fvProc> fUniformMatrix4fv; - GLPtr<GrGLUnmapBufferProc> fUnmapBuffer; - GLPtr<GrGLUseProgramProc> fUseProgram; - GLPtr<GrGLVertexAttrib4fvProc> fVertexAttrib4fv; - GLPtr<GrGLVertexAttribPointerProc> fVertexAttribPointer; - GLPtr<GrGLVertexPointerProc> fVertexPointer; - GLPtr<GrGLViewportProc> fViewport; - - // Experimental: Functions for GL_NV_path_rendering. These will be - // alphabetized with the above functions once this is fully supported - // (and functions we are unlikely to use will possibly be omitted). - GLPtr<GrGLPathCommandsProc> fPathCommands; - GLPtr<GrGLPathCoordsProc> fPathCoords; - GLPtr<GrGLPathSubCommandsProc> fPathSubCommands; - GLPtr<GrGLPathSubCoordsProc> fPathSubCoords; - GLPtr<GrGLPathStringProc> fPathString; - GLPtr<GrGLPathGlyphsProc> fPathGlyphs; - GLPtr<GrGLPathGlyphRangeProc> fPathGlyphRange; - GLPtr<GrGLWeightPathsProc> fWeightPaths; - GLPtr<GrGLCopyPathProc> fCopyPath; - GLPtr<GrGLInterpolatePathsProc> fInterpolatePaths; - GLPtr<GrGLTransformPathProc> fTransformPath; - GLPtr<GrGLPathParameterivProc> fPathParameteriv; - GLPtr<GrGLPathParameteriProc> fPathParameteri; - GLPtr<GrGLPathParameterfvProc> fPathParameterfv; - GLPtr<GrGLPathParameterfProc> fPathParameterf; - GLPtr<GrGLPathDashArrayProc> fPathDashArray; - GLPtr<GrGLGenPathsProc> fGenPaths; - GLPtr<GrGLDeletePathsProc> fDeletePaths; - GLPtr<GrGLIsPathProc> fIsPath; - GLPtr<GrGLPathStencilFuncProc> fPathStencilFunc; - GLPtr<GrGLPathStencilDepthOffsetProc> fPathStencilDepthOffset; - GLPtr<GrGLStencilFillPathProc> fStencilFillPath; - GLPtr<GrGLStencilStrokePathProc> fStencilStrokePath; - GLPtr<GrGLStencilFillPathInstancedProc> fStencilFillPathInstanced; - GLPtr<GrGLStencilStrokePathInstancedProc> fStencilStrokePathInstanced; - GLPtr<GrGLPathCoverDepthFuncProc> fPathCoverDepthFunc; - GLPtr<GrGLPathColorGenProc> fPathColorGen; - GLPtr<GrGLPathTexGenProc> fPathTexGen; - GLPtr<GrGLPathFogGenProc> fPathFogGen; - GLPtr<GrGLCoverFillPathProc> fCoverFillPath; - GLPtr<GrGLCoverStrokePathProc> fCoverStrokePath; - GLPtr<GrGLCoverFillPathInstancedProc> fCoverFillPathInstanced; - GLPtr<GrGLCoverStrokePathInstancedProc> fCoverStrokePathInstanced; - GLPtr<GrGLGetPathParameterivProc> fGetPathParameteriv; - GLPtr<GrGLGetPathParameterfvProc> fGetPathParameterfv; - GLPtr<GrGLGetPathCommandsProc> fGetPathCommands; - GLPtr<GrGLGetPathCoordsProc> fGetPathCoords; - GLPtr<GrGLGetPathDashArrayProc> fGetPathDashArray; - GLPtr<GrGLGetPathMetricsProc> fGetPathMetrics; - GLPtr<GrGLGetPathMetricRangeProc> fGetPathMetricRange; - GLPtr<GrGLGetPathSpacingProc> fGetPathSpacing; - GLPtr<GrGLGetPathColorGenivProc> fGetPathColorGeniv; - GLPtr<GrGLGetPathColorGenfvProc> fGetPathColorGenfv; - GLPtr<GrGLGetPathTexGenivProc> fGetPathTexGeniv; - GLPtr<GrGLGetPathTexGenfvProc> fGetPathTexGenfv; - GLPtr<GrGLIsPointInFillPathProc> fIsPointInFillPath; - GLPtr<GrGLIsPointInStrokePathProc> fIsPointInStrokePath; - GLPtr<GrGLGetPathLengthProc> fGetPathLength; - GLPtr<GrGLPointAlongPathProc> fPointAlongPath; + static GrGLInterface* NewClone(const GrGLInterface*); + + // Validates that the GrGLInterface supports its advertised standard. This means the necessary + // function pointers have been initialized for both the GL version and any advertised + // extensions. + bool validate() const; + + // Indicates the type of GL implementation + union { + GrGLStandard fStandard; + GrGLStandard fBindingsExported; // Legacy name, will be remove when Chromium is updated. + }; + + GrGLExtensions fExtensions; + + bool hasExtension(const char ext[]) const { return fExtensions.has(ext); } + + /** + * The function pointers are in a struct so that we can have a compiler generated assignment + * operator. + */ + struct Functions { + GLPtr<GrGLActiveTextureProc> fActiveTexture; + GLPtr<GrGLAttachShaderProc> fAttachShader; + GLPtr<GrGLBeginQueryProc> fBeginQuery; + GLPtr<GrGLBindAttribLocationProc> fBindAttribLocation; + GLPtr<GrGLBindBufferProc> fBindBuffer; + GLPtr<GrGLBindFragDataLocationProc> fBindFragDataLocation; + GLPtr<GrGLBindFragDataLocationIndexedProc> fBindFragDataLocationIndexed; + GLPtr<GrGLBindFramebufferProc> fBindFramebuffer; + GLPtr<GrGLBindRenderbufferProc> fBindRenderbuffer; + GLPtr<GrGLBindTextureProc> fBindTexture; + GLPtr<GrGLBindVertexArrayProc> fBindVertexArray; + GLPtr<GrGLBlendColorProc> fBlendColor; + GLPtr<GrGLBlendFuncProc> fBlendFunc; + GLPtr<GrGLBlitFramebufferProc> fBlitFramebuffer; + GLPtr<GrGLBufferDataProc> fBufferData; + GLPtr<GrGLBufferSubDataProc> fBufferSubData; + GLPtr<GrGLCheckFramebufferStatusProc> fCheckFramebufferStatus; + GLPtr<GrGLClearProc> fClear; + GLPtr<GrGLClearColorProc> fClearColor; + GLPtr<GrGLClearStencilProc> fClearStencil; + GLPtr<GrGLColorMaskProc> fColorMask; + GLPtr<GrGLCompileShaderProc> fCompileShader; + GLPtr<GrGLCompressedTexImage2DProc> fCompressedTexImage2D; + GLPtr<GrGLCompressedTexSubImage2DProc> fCompressedTexSubImage2D; + GLPtr<GrGLCopyTexSubImage2DProc> fCopyTexSubImage2D; + GLPtr<GrGLCreateProgramProc> fCreateProgram; + GLPtr<GrGLCreateShaderProc> fCreateShader; + GLPtr<GrGLCullFaceProc> fCullFace; + GLPtr<GrGLDeleteBuffersProc> fDeleteBuffers; + GLPtr<GrGLDeleteFramebuffersProc> fDeleteFramebuffers; + GLPtr<GrGLDeleteProgramProc> fDeleteProgram; + GLPtr<GrGLDeleteQueriesProc> fDeleteQueries; + GLPtr<GrGLDeleteRenderbuffersProc> fDeleteRenderbuffers; + GLPtr<GrGLDeleteShaderProc> fDeleteShader; + GLPtr<GrGLDeleteTexturesProc> fDeleteTextures; + GLPtr<GrGLDeleteVertexArraysProc> fDeleteVertexArrays; + GLPtr<GrGLDepthMaskProc> fDepthMask; + GLPtr<GrGLDisableProc> fDisable; + GLPtr<GrGLDisableVertexAttribArrayProc> fDisableVertexAttribArray; + GLPtr<GrGLDrawArraysProc> fDrawArrays; + GLPtr<GrGLDrawBufferProc> fDrawBuffer; + GLPtr<GrGLDrawBuffersProc> fDrawBuffers; + GLPtr<GrGLDrawElementsProc> fDrawElements; + GLPtr<GrGLEnableProc> fEnable; + GLPtr<GrGLEnableVertexAttribArrayProc> fEnableVertexAttribArray; + GLPtr<GrGLEndQueryProc> fEndQuery; + GLPtr<GrGLFinishProc> fFinish; + GLPtr<GrGLFlushProc> fFlush; + GLPtr<GrGLFlushMappedBufferRangeProc> fFlushMappedBufferRange; + GLPtr<GrGLFramebufferRenderbufferProc> fFramebufferRenderbuffer; + GLPtr<GrGLFramebufferTexture2DProc> fFramebufferTexture2D; + GLPtr<GrGLFramebufferTexture2DMultisampleProc> fFramebufferTexture2DMultisample; + GLPtr<GrGLFrontFaceProc> fFrontFace; + GLPtr<GrGLGenBuffersProc> fGenBuffers; + GLPtr<GrGLGenFramebuffersProc> fGenFramebuffers; + GLPtr<GrGLGenerateMipmapProc> fGenerateMipmap; + GLPtr<GrGLGenQueriesProc> fGenQueries; + GLPtr<GrGLGenRenderbuffersProc> fGenRenderbuffers; + GLPtr<GrGLGenTexturesProc> fGenTextures; + GLPtr<GrGLGenVertexArraysProc> fGenVertexArrays; + GLPtr<GrGLGetBufferParameterivProc> fGetBufferParameteriv; + GLPtr<GrGLGetErrorProc> fGetError; + GLPtr<GrGLGetFramebufferAttachmentParameterivProc> fGetFramebufferAttachmentParameteriv; + GLPtr<GrGLGetIntegervProc> fGetIntegerv; + GLPtr<GrGLGetQueryObjecti64vProc> fGetQueryObjecti64v; + GLPtr<GrGLGetQueryObjectivProc> fGetQueryObjectiv; + GLPtr<GrGLGetQueryObjectui64vProc> fGetQueryObjectui64v; + GLPtr<GrGLGetQueryObjectuivProc> fGetQueryObjectuiv; + GLPtr<GrGLGetQueryivProc> fGetQueryiv; + GLPtr<GrGLGetProgramInfoLogProc> fGetProgramInfoLog; + GLPtr<GrGLGetProgramivProc> fGetProgramiv; + GLPtr<GrGLGetRenderbufferParameterivProc> fGetRenderbufferParameteriv; + GLPtr<GrGLGetShaderInfoLogProc> fGetShaderInfoLog; + GLPtr<GrGLGetShaderivProc> fGetShaderiv; + GLPtr<GrGLGetStringProc> fGetString; + GLPtr<GrGLGetStringiProc> fGetStringi; + GLPtr<GrGLGetTexLevelParameterivProc> fGetTexLevelParameteriv; + GLPtr<GrGLGetUniformLocationProc> fGetUniformLocation; + GLPtr<GrGLInsertEventMarkerProc> fInsertEventMarker; + GLPtr<GrGLInvalidateBufferDataProc> fInvalidateBufferData; + GLPtr<GrGLInvalidateBufferSubDataProc> fInvalidateBufferSubData; + GLPtr<GrGLInvalidateFramebufferProc> fInvalidateFramebuffer; + GLPtr<GrGLInvalidateSubFramebufferProc> fInvalidateSubFramebuffer; + GLPtr<GrGLInvalidateTexImageProc> fInvalidateTexImage; + GLPtr<GrGLInvalidateTexSubImageProc> fInvalidateTexSubImage; + GLPtr<GrGLLineWidthProc> fLineWidth; + GLPtr<GrGLLinkProgramProc> fLinkProgram; + GLPtr<GrGLMapBufferProc> fMapBuffer; + GLPtr<GrGLMapBufferRangeProc> fMapBufferRange; + GLPtr<GrGLMapBufferSubDataProc> fMapBufferSubData; + GLPtr<GrGLMapTexSubImage2DProc> fMapTexSubImage2D; + GLPtr<GrGLMatrixLoadfProc> fMatrixLoadf; + GLPtr<GrGLMatrixLoadIdentityProc> fMatrixLoadIdentity; + GLPtr<GrGLPixelStoreiProc> fPixelStorei; + GLPtr<GrGLPopGroupMarkerProc> fPopGroupMarker; + GLPtr<GrGLPushGroupMarkerProc> fPushGroupMarker; + GLPtr<GrGLQueryCounterProc> fQueryCounter; + GLPtr<GrGLReadBufferProc> fReadBuffer; + GLPtr<GrGLReadPixelsProc> fReadPixels; + GLPtr<GrGLRenderbufferStorageProc> fRenderbufferStorage; + + // On OpenGL ES there are multiple incompatible extensions that add support for MSAA + // and ES3 adds MSAA support to the standard. On an ES3 driver we may still use the + // older extensions for performance reasons or due to ES3 driver bugs. We want the function + // that creates the GrGLInterface to provide all available functions and internally + // we will select among them. They all have a method called glRenderbufferStorageMultisample*. + // So we have separate function pointers for GL_IMG/EXT_multisampled_to_texture, + // GL_CHROMIUM/ANGLE_framebuffer_multisample/ES3, and GL_APPLE_framebuffer_multisample + // variations. + // + // If a driver supports multiple GL_ARB_framebuffer_multisample-style extensions then we will + // assume the function pointers for the standard (or equivalent GL_ARB) version have + // been preferred over GL_EXT, GL_CHROMIUM, or GL_ANGLE variations that have reduced + // functionality. + + // GL_EXT_multisampled_render_to_texture (preferred) or GL_IMG_multisampled_render_to_texture + GLPtr<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisampleES2EXT; + // GL_APPLE_framebuffer_multisample + GLPtr<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisampleES2APPLE; + + // This is used to store the pointer for GL_ARB/EXT/ANGLE/CHROMIUM_framebuffer_multisample or + // the standard function in ES3+ or GL 3.0+. + GLPtr<GrGLRenderbufferStorageMultisampleProc> fRenderbufferStorageMultisample; + + // Pointer to BindUniformLocationCHROMIUM from the GL_CHROMIUM_bind_uniform_location extension. + GLPtr<GrGLBindUniformLocation> fBindUniformLocation; + + GLPtr<GrGLResolveMultisampleFramebufferProc> fResolveMultisampleFramebuffer; + GLPtr<GrGLScissorProc> fScissor; + GLPtr<GrGLShaderSourceProc> fShaderSource; + GLPtr<GrGLStencilFuncProc> fStencilFunc; + GLPtr<GrGLStencilFuncSeparateProc> fStencilFuncSeparate; + GLPtr<GrGLStencilMaskProc> fStencilMask; + GLPtr<GrGLStencilMaskSeparateProc> fStencilMaskSeparate; + GLPtr<GrGLStencilOpProc> fStencilOp; + GLPtr<GrGLStencilOpSeparateProc> fStencilOpSeparate; + GLPtr<GrGLTexImage2DProc> fTexImage2D; + GLPtr<GrGLTexParameteriProc> fTexParameteri; + GLPtr<GrGLTexParameterivProc> fTexParameteriv; + GLPtr<GrGLTexSubImage2DProc> fTexSubImage2D; + GLPtr<GrGLTexStorage2DProc> fTexStorage2D; + GLPtr<GrGLDiscardFramebufferProc> fDiscardFramebuffer; + GLPtr<GrGLUniform1fProc> fUniform1f; + GLPtr<GrGLUniform1iProc> fUniform1i; + GLPtr<GrGLUniform1fvProc> fUniform1fv; + GLPtr<GrGLUniform1ivProc> fUniform1iv; + GLPtr<GrGLUniform2fProc> fUniform2f; + GLPtr<GrGLUniform2iProc> fUniform2i; + GLPtr<GrGLUniform2fvProc> fUniform2fv; + GLPtr<GrGLUniform2ivProc> fUniform2iv; + GLPtr<GrGLUniform3fProc> fUniform3f; + GLPtr<GrGLUniform3iProc> fUniform3i; + GLPtr<GrGLUniform3fvProc> fUniform3fv; + GLPtr<GrGLUniform3ivProc> fUniform3iv; + GLPtr<GrGLUniform4fProc> fUniform4f; + GLPtr<GrGLUniform4iProc> fUniform4i; + GLPtr<GrGLUniform4fvProc> fUniform4fv; + GLPtr<GrGLUniform4ivProc> fUniform4iv; + GLPtr<GrGLUniformMatrix2fvProc> fUniformMatrix2fv; + GLPtr<GrGLUniformMatrix3fvProc> fUniformMatrix3fv; + GLPtr<GrGLUniformMatrix4fvProc> fUniformMatrix4fv; + GLPtr<GrGLUnmapBufferProc> fUnmapBuffer; + GLPtr<GrGLUnmapBufferSubDataProc> fUnmapBufferSubData; + GLPtr<GrGLUnmapTexSubImage2DProc> fUnmapTexSubImage2D; + GLPtr<GrGLUseProgramProc> fUseProgram; + GLPtr<GrGLVertexAttrib4fvProc> fVertexAttrib4fv; + GLPtr<GrGLVertexAttribPointerProc> fVertexAttribPointer; + GLPtr<GrGLViewportProc> fViewport; + + // Experimental: Functions for GL_NV_path_rendering. These will be + // alphabetized with the above functions once this is fully supported + // (and functions we are unlikely to use will possibly be omitted). + GLPtr<GrGLPathCommandsProc> fPathCommands; + GLPtr<GrGLPathCoordsProc> fPathCoords; + GLPtr<GrGLPathSubCommandsProc> fPathSubCommands; + GLPtr<GrGLPathSubCoordsProc> fPathSubCoords; + GLPtr<GrGLPathStringProc> fPathString; + GLPtr<GrGLPathGlyphsProc> fPathGlyphs; + GLPtr<GrGLPathGlyphRangeProc> fPathGlyphRange; + GLPtr<GrGLWeightPathsProc> fWeightPaths; + GLPtr<GrGLCopyPathProc> fCopyPath; + GLPtr<GrGLInterpolatePathsProc> fInterpolatePaths; + GLPtr<GrGLTransformPathProc> fTransformPath; + GLPtr<GrGLPathParameterivProc> fPathParameteriv; + GLPtr<GrGLPathParameteriProc> fPathParameteri; + GLPtr<GrGLPathParameterfvProc> fPathParameterfv; + GLPtr<GrGLPathParameterfProc> fPathParameterf; + GLPtr<GrGLPathDashArrayProc> fPathDashArray; + GLPtr<GrGLGenPathsProc> fGenPaths; + GLPtr<GrGLDeletePathsProc> fDeletePaths; + GLPtr<GrGLIsPathProc> fIsPath; + GLPtr<GrGLPathStencilFuncProc> fPathStencilFunc; + GLPtr<GrGLPathStencilDepthOffsetProc> fPathStencilDepthOffset; + GLPtr<GrGLStencilFillPathProc> fStencilFillPath; + GLPtr<GrGLStencilStrokePathProc> fStencilStrokePath; + GLPtr<GrGLStencilFillPathInstancedProc> fStencilFillPathInstanced; + GLPtr<GrGLStencilStrokePathInstancedProc> fStencilStrokePathInstanced; + GLPtr<GrGLPathCoverDepthFuncProc> fPathCoverDepthFunc; + GLPtr<GrGLPathColorGenProc> fPathColorGen; + GLPtr<GrGLPathTexGenProc> fPathTexGen; + GLPtr<GrGLPathFogGenProc> fPathFogGen; + GLPtr<GrGLCoverFillPathProc> fCoverFillPath; + GLPtr<GrGLCoverStrokePathProc> fCoverStrokePath; + GLPtr<GrGLCoverFillPathInstancedProc> fCoverFillPathInstanced; + GLPtr<GrGLCoverStrokePathInstancedProc> fCoverStrokePathInstanced; + GLPtr<GrGLGetPathParameterivProc> fGetPathParameteriv; + GLPtr<GrGLGetPathParameterfvProc> fGetPathParameterfv; + GLPtr<GrGLGetPathCommandsProc> fGetPathCommands; + GLPtr<GrGLGetPathCoordsProc> fGetPathCoords; + GLPtr<GrGLGetPathDashArrayProc> fGetPathDashArray; + GLPtr<GrGLGetPathMetricsProc> fGetPathMetrics; + GLPtr<GrGLGetPathMetricRangeProc> fGetPathMetricRange; + GLPtr<GrGLGetPathSpacingProc> fGetPathSpacing; + GLPtr<GrGLGetPathColorGenivProc> fGetPathColorGeniv; + GLPtr<GrGLGetPathColorGenfvProc> fGetPathColorGenfv; + GLPtr<GrGLGetPathTexGenivProc> fGetPathTexGeniv; + GLPtr<GrGLGetPathTexGenfvProc> fGetPathTexGenfv; + GLPtr<GrGLIsPointInFillPathProc> fIsPointInFillPath; + GLPtr<GrGLIsPointInStrokePathProc> fIsPointInStrokePath; + GLPtr<GrGLGetPathLengthProc> fGetPathLength; + GLPtr<GrGLPointAlongPathProc> fPointAlongPath; + } fFunctions; // Per-GL func callback #if GR_GL_PER_GL_FUNC_CALLBACK GrGLInterfaceCallbackProc fCallback; GrGLInterfaceCallbackData fCallbackData; #endif - }; #endif |