de206c75c2
Bug: skia: Change-Id: Ie3c9ee39fc1e0a4406de085c60d8433ffb4419df Reviewed-on: https://skia-review.googlesource.com/c/skia/+/203708 Reviewed-by: Brian Salomon <bsalomon@google.com> Commit-Queue: Brian Osman <brianosman@google.com>
341 lines
18 KiB
C++
341 lines
18 KiB
C++
/*
|
|
* Copyright 2011 Google Inc.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
#ifndef GrGLInterface_DEFINED
|
|
#define GrGLInterface_DEFINED
|
|
|
|
#include "GrGLFunctions.h"
|
|
#include "GrGLExtensions.h"
|
|
#include "SkRefCnt.h"
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
typedef void(*GrGLFuncPtr)();
|
|
struct GrGLInterface;
|
|
|
|
|
|
/**
|
|
* 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::MakeGL. If no interface is
|
|
* passed to MakeGL then a default GL interface is created using GrGLMakeNativeInterface().
|
|
* If this returns nullptr then GrContext::MakeGL() will fail.
|
|
*
|
|
* The implementation of GrGLMakeNativeInterface is platform-specific. Several
|
|
* implementations have been provided (for GLX, WGL, EGL, etc), along with an
|
|
* implementation that simply returns nullptr. Clients should select the most
|
|
* appropriate one to build.
|
|
*/
|
|
SK_API sk_sp<const GrGLInterface> GrGLMakeNativeInterface();
|
|
// Deprecated alternative to GrGLMakeNativeInterface().
|
|
SK_API const GrGLInterface* GrGLCreateNativeInterface();
|
|
|
|
/**
|
|
* 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.
|
|
* On some platforms, such as Windows, function pointers for OpenGL extensions
|
|
* may vary between OpenGL contexts. So the caller must be careful to use a
|
|
* GrGLInterface initialized for the correct context. All functions that should
|
|
* be available based on the OpenGL's version and extension string must be
|
|
* non-NULL or GrContext creation will fail. This can be tested with the
|
|
* validate() method when the OpenGL context has been made current.
|
|
*/
|
|
struct SK_API GrGLInterface : public SkRefCnt {
|
|
private:
|
|
typedef SkRefCnt INHERITED;
|
|
|
|
public:
|
|
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 {
|
|
GrGLFunction<GrGLActiveTextureFn> fActiveTexture;
|
|
GrGLFunction<GrGLAttachShaderFn> fAttachShader;
|
|
GrGLFunction<GrGLBeginQueryFn> fBeginQuery;
|
|
GrGLFunction<GrGLBindAttribLocationFn> fBindAttribLocation;
|
|
GrGLFunction<GrGLBindBufferFn> fBindBuffer;
|
|
GrGLFunction<GrGLBindFragDataLocationFn> fBindFragDataLocation;
|
|
GrGLFunction<GrGLBindFragDataLocationIndexedFn> fBindFragDataLocationIndexed;
|
|
GrGLFunction<GrGLBindFramebufferFn> fBindFramebuffer;
|
|
GrGLFunction<GrGLBindRenderbufferFn> fBindRenderbuffer;
|
|
GrGLFunction<GrGLBindSamplerFn> fBindSampler;
|
|
GrGLFunction<GrGLBindTextureFn> fBindTexture;
|
|
GrGLFunction<GrGLBindVertexArrayFn> fBindVertexArray;
|
|
GrGLFunction<GrGLBlendBarrierFn> fBlendBarrier;
|
|
GrGLFunction<GrGLBlendColorFn> fBlendColor;
|
|
GrGLFunction<GrGLBlendEquationFn> fBlendEquation;
|
|
GrGLFunction<GrGLBlendFuncFn> fBlendFunc;
|
|
GrGLFunction<GrGLBlitFramebufferFn> fBlitFramebuffer;
|
|
GrGLFunction<GrGLBufferDataFn> fBufferData;
|
|
GrGLFunction<GrGLBufferSubDataFn> fBufferSubData;
|
|
GrGLFunction<GrGLCheckFramebufferStatusFn> fCheckFramebufferStatus;
|
|
GrGLFunction<GrGLClearFn> fClear;
|
|
GrGLFunction<GrGLClearColorFn> fClearColor;
|
|
GrGLFunction<GrGLClearStencilFn> fClearStencil;
|
|
GrGLFunction<GrGLClearTexImageFn> fClearTexImage;
|
|
GrGLFunction<GrGLClearTexSubImageFn> fClearTexSubImage;
|
|
GrGLFunction<GrGLColorMaskFn> fColorMask;
|
|
GrGLFunction<GrGLCompileShaderFn> fCompileShader;
|
|
GrGLFunction<GrGLCompressedTexImage2DFn> fCompressedTexImage2D;
|
|
GrGLFunction<GrGLCompressedTexSubImage2DFn> fCompressedTexSubImage2D;
|
|
GrGLFunction<GrGLCopyTexSubImage2DFn> fCopyTexSubImage2D;
|
|
GrGLFunction<GrGLCreateProgramFn> fCreateProgram;
|
|
GrGLFunction<GrGLCreateShaderFn> fCreateShader;
|
|
GrGLFunction<GrGLCullFaceFn> fCullFace;
|
|
GrGLFunction<GrGLDeleteBuffersFn> fDeleteBuffers;
|
|
GrGLFunction<GrGLDeleteFramebuffersFn> fDeleteFramebuffers;
|
|
GrGLFunction<GrGLDeleteProgramFn> fDeleteProgram;
|
|
GrGLFunction<GrGLDeleteQueriesFn> fDeleteQueries;
|
|
GrGLFunction<GrGLDeleteRenderbuffersFn> fDeleteRenderbuffers;
|
|
GrGLFunction<GrGLDeleteSamplersFn> fDeleteSamplers;
|
|
GrGLFunction<GrGLDeleteShaderFn> fDeleteShader;
|
|
GrGLFunction<GrGLDeleteTexturesFn> fDeleteTextures;
|
|
GrGLFunction<GrGLDeleteVertexArraysFn> fDeleteVertexArrays;
|
|
GrGLFunction<GrGLDepthMaskFn> fDepthMask;
|
|
GrGLFunction<GrGLDisableFn> fDisable;
|
|
GrGLFunction<GrGLDisableVertexAttribArrayFn> fDisableVertexAttribArray;
|
|
GrGLFunction<GrGLDrawArraysFn> fDrawArrays;
|
|
GrGLFunction<GrGLDrawArraysIndirectFn> fDrawArraysIndirect;
|
|
GrGLFunction<GrGLDrawArraysInstancedFn> fDrawArraysInstanced;
|
|
GrGLFunction<GrGLDrawBufferFn> fDrawBuffer;
|
|
GrGLFunction<GrGLDrawBuffersFn> fDrawBuffers;
|
|
GrGLFunction<GrGLDrawElementsFn> fDrawElements;
|
|
GrGLFunction<GrGLDrawElementsIndirectFn> fDrawElementsIndirect;
|
|
GrGLFunction<GrGLDrawElementsInstancedFn> fDrawElementsInstanced;
|
|
GrGLFunction<GrGLDrawRangeElementsFn> fDrawRangeElements;
|
|
GrGLFunction<GrGLEnableFn> fEnable;
|
|
GrGLFunction<GrGLEnableVertexAttribArrayFn> fEnableVertexAttribArray;
|
|
GrGLFunction<GrGLEndQueryFn> fEndQuery;
|
|
GrGLFunction<GrGLFinishFn> fFinish;
|
|
GrGLFunction<GrGLFlushFn> fFlush;
|
|
GrGLFunction<GrGLFlushMappedBufferRangeFn> fFlushMappedBufferRange;
|
|
GrGLFunction<GrGLFramebufferRenderbufferFn> fFramebufferRenderbuffer;
|
|
GrGLFunction<GrGLFramebufferTexture2DFn> fFramebufferTexture2D;
|
|
GrGLFunction<GrGLFramebufferTexture2DMultisampleFn> fFramebufferTexture2DMultisample;
|
|
GrGLFunction<GrGLFrontFaceFn> fFrontFace;
|
|
GrGLFunction<GrGLGenBuffersFn> fGenBuffers;
|
|
GrGLFunction<GrGLGenFramebuffersFn> fGenFramebuffers;
|
|
GrGLFunction<GrGLGenerateMipmapFn> fGenerateMipmap;
|
|
GrGLFunction<GrGLGenQueriesFn> fGenQueries;
|
|
GrGLFunction<GrGLGenRenderbuffersFn> fGenRenderbuffers;
|
|
GrGLFunction<GrGLGenSamplersFn> fGenSamplers;
|
|
GrGLFunction<GrGLGenTexturesFn> fGenTextures;
|
|
GrGLFunction<GrGLGenVertexArraysFn> fGenVertexArrays;
|
|
GrGLFunction<GrGLGetBufferParameterivFn> fGetBufferParameteriv;
|
|
GrGLFunction<GrGLGetErrorFn> fGetError;
|
|
GrGLFunction<GrGLGetFramebufferAttachmentParameterivFn> fGetFramebufferAttachmentParameteriv;
|
|
GrGLFunction<GrGLGetIntegervFn> fGetIntegerv;
|
|
GrGLFunction<GrGLGetMultisamplefvFn> fGetMultisamplefv;
|
|
GrGLFunction<GrGLGetProgramBinaryFn> fGetProgramBinary;
|
|
GrGLFunction<GrGLGetProgramInfoLogFn> fGetProgramInfoLog;
|
|
GrGLFunction<GrGLGetProgramivFn> fGetProgramiv;
|
|
GrGLFunction<GrGLGetQueryObjecti64vFn> fGetQueryObjecti64v;
|
|
GrGLFunction<GrGLGetQueryObjectivFn> fGetQueryObjectiv;
|
|
GrGLFunction<GrGLGetQueryObjectui64vFn> fGetQueryObjectui64v;
|
|
GrGLFunction<GrGLGetQueryObjectuivFn> fGetQueryObjectuiv;
|
|
GrGLFunction<GrGLGetQueryivFn> fGetQueryiv;
|
|
GrGLFunction<GrGLGetRenderbufferParameterivFn> fGetRenderbufferParameteriv;
|
|
GrGLFunction<GrGLGetShaderInfoLogFn> fGetShaderInfoLog;
|
|
GrGLFunction<GrGLGetShaderivFn> fGetShaderiv;
|
|
GrGLFunction<GrGLGetShaderPrecisionFormatFn> fGetShaderPrecisionFormat;
|
|
GrGLFunction<GrGLGetStringFn> fGetString;
|
|
GrGLFunction<GrGLGetStringiFn> fGetStringi;
|
|
GrGLFunction<GrGLGetTexLevelParameterivFn> fGetTexLevelParameteriv;
|
|
GrGLFunction<GrGLGetUniformLocationFn> fGetUniformLocation;
|
|
GrGLFunction<GrGLInsertEventMarkerFn> fInsertEventMarker;
|
|
GrGLFunction<GrGLInvalidateBufferDataFn> fInvalidateBufferData;
|
|
GrGLFunction<GrGLInvalidateBufferSubDataFn> fInvalidateBufferSubData;
|
|
GrGLFunction<GrGLInvalidateFramebufferFn> fInvalidateFramebuffer;
|
|
GrGLFunction<GrGLInvalidateSubFramebufferFn> fInvalidateSubFramebuffer;
|
|
GrGLFunction<GrGLInvalidateTexImageFn> fInvalidateTexImage;
|
|
GrGLFunction<GrGLInvalidateTexSubImageFn> fInvalidateTexSubImage;
|
|
GrGLFunction<GrGLIsTextureFn> fIsTexture;
|
|
GrGLFunction<GrGLLineWidthFn> fLineWidth;
|
|
GrGLFunction<GrGLLinkProgramFn> fLinkProgram;
|
|
GrGLFunction<GrGLProgramBinaryFn> fProgramBinary;
|
|
GrGLFunction<GrGLProgramParameteriFn> fProgramParameteri;
|
|
GrGLFunction<GrGLMapBufferFn> fMapBuffer;
|
|
GrGLFunction<GrGLMapBufferRangeFn> fMapBufferRange;
|
|
GrGLFunction<GrGLMapBufferSubDataFn> fMapBufferSubData;
|
|
GrGLFunction<GrGLMapTexSubImage2DFn> fMapTexSubImage2D;
|
|
GrGLFunction<GrGLMultiDrawArraysIndirectFn> fMultiDrawArraysIndirect;
|
|
GrGLFunction<GrGLMultiDrawElementsIndirectFn> fMultiDrawElementsIndirect;
|
|
GrGLFunction<GrGLPixelStoreiFn> fPixelStorei;
|
|
GrGLFunction<GrGLPolygonModeFn> fPolygonMode;
|
|
GrGLFunction<GrGLPopGroupMarkerFn> fPopGroupMarker;
|
|
GrGLFunction<GrGLPushGroupMarkerFn> fPushGroupMarker;
|
|
GrGLFunction<GrGLQueryCounterFn> fQueryCounter;
|
|
GrGLFunction<GrGLReadBufferFn> fReadBuffer;
|
|
GrGLFunction<GrGLReadPixelsFn> fReadPixels;
|
|
GrGLFunction<GrGLRenderbufferStorageFn> 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
|
|
GrGLFunction<GrGLRenderbufferStorageMultisampleFn> fRenderbufferStorageMultisampleES2EXT;
|
|
// GL_APPLE_framebuffer_multisample
|
|
GrGLFunction<GrGLRenderbufferStorageMultisampleFn> 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+.
|
|
GrGLFunction<GrGLRenderbufferStorageMultisampleFn> fRenderbufferStorageMultisample;
|
|
|
|
// Pointer to BindUniformLocationCHROMIUM from the GL_CHROMIUM_bind_uniform_location extension.
|
|
GrGLFunction<GrGLBindUniformLocationFn> fBindUniformLocation;
|
|
|
|
GrGLFunction<GrGLResolveMultisampleFramebufferFn> fResolveMultisampleFramebuffer;
|
|
GrGLFunction<GrGLSamplerParameteriFn> fSamplerParameteri;
|
|
GrGLFunction<GrGLSamplerParameterivFn> fSamplerParameteriv;
|
|
GrGLFunction<GrGLScissorFn> fScissor;
|
|
GrGLFunction<GrGLShaderSourceFn> fShaderSource;
|
|
GrGLFunction<GrGLStencilFuncFn> fStencilFunc;
|
|
GrGLFunction<GrGLStencilFuncSeparateFn> fStencilFuncSeparate;
|
|
GrGLFunction<GrGLStencilMaskFn> fStencilMask;
|
|
GrGLFunction<GrGLStencilMaskSeparateFn> fStencilMaskSeparate;
|
|
GrGLFunction<GrGLStencilOpFn> fStencilOp;
|
|
GrGLFunction<GrGLStencilOpSeparateFn> fStencilOpSeparate;
|
|
GrGLFunction<GrGLTexBufferFn> fTexBuffer;
|
|
GrGLFunction<GrGLTexBufferRangeFn> fTexBufferRange;
|
|
GrGLFunction<GrGLTexImage2DFn> fTexImage2D;
|
|
GrGLFunction<GrGLTexParameterfFn> fTexParameterf;
|
|
GrGLFunction<GrGLTexParameterfvFn> fTexParameterfv;
|
|
GrGLFunction<GrGLTexParameteriFn> fTexParameteri;
|
|
GrGLFunction<GrGLTexParameterivFn> fTexParameteriv;
|
|
GrGLFunction<GrGLTexSubImage2DFn> fTexSubImage2D;
|
|
GrGLFunction<GrGLTexStorage2DFn> fTexStorage2D;
|
|
GrGLFunction<GrGLTextureBarrierFn> fTextureBarrier;
|
|
GrGLFunction<GrGLDiscardFramebufferFn> fDiscardFramebuffer;
|
|
GrGLFunction<GrGLUniform1fFn> fUniform1f;
|
|
GrGLFunction<GrGLUniform1iFn> fUniform1i;
|
|
GrGLFunction<GrGLUniform1fvFn> fUniform1fv;
|
|
GrGLFunction<GrGLUniform1ivFn> fUniform1iv;
|
|
GrGLFunction<GrGLUniform2fFn> fUniform2f;
|
|
GrGLFunction<GrGLUniform2iFn> fUniform2i;
|
|
GrGLFunction<GrGLUniform2fvFn> fUniform2fv;
|
|
GrGLFunction<GrGLUniform2ivFn> fUniform2iv;
|
|
GrGLFunction<GrGLUniform3fFn> fUniform3f;
|
|
GrGLFunction<GrGLUniform3iFn> fUniform3i;
|
|
GrGLFunction<GrGLUniform3fvFn> fUniform3fv;
|
|
GrGLFunction<GrGLUniform3ivFn> fUniform3iv;
|
|
GrGLFunction<GrGLUniform4fFn> fUniform4f;
|
|
GrGLFunction<GrGLUniform4iFn> fUniform4i;
|
|
GrGLFunction<GrGLUniform4fvFn> fUniform4fv;
|
|
GrGLFunction<GrGLUniform4ivFn> fUniform4iv;
|
|
GrGLFunction<GrGLUniformMatrix2fvFn> fUniformMatrix2fv;
|
|
GrGLFunction<GrGLUniformMatrix3fvFn> fUniformMatrix3fv;
|
|
GrGLFunction<GrGLUniformMatrix4fvFn> fUniformMatrix4fv;
|
|
GrGLFunction<GrGLUnmapBufferFn> fUnmapBuffer;
|
|
GrGLFunction<GrGLUnmapBufferSubDataFn> fUnmapBufferSubData;
|
|
GrGLFunction<GrGLUnmapTexSubImage2DFn> fUnmapTexSubImage2D;
|
|
GrGLFunction<GrGLUseProgramFn> fUseProgram;
|
|
GrGLFunction<GrGLVertexAttrib1fFn> fVertexAttrib1f;
|
|
GrGLFunction<GrGLVertexAttrib2fvFn> fVertexAttrib2fv;
|
|
GrGLFunction<GrGLVertexAttrib3fvFn> fVertexAttrib3fv;
|
|
GrGLFunction<GrGLVertexAttrib4fvFn> fVertexAttrib4fv;
|
|
GrGLFunction<GrGLVertexAttribDivisorFn> fVertexAttribDivisor;
|
|
GrGLFunction<GrGLVertexAttribIPointerFn> fVertexAttribIPointer;
|
|
GrGLFunction<GrGLVertexAttribPointerFn> fVertexAttribPointer;
|
|
GrGLFunction<GrGLViewportFn> fViewport;
|
|
|
|
/* GL_NV_path_rendering */
|
|
GrGLFunction<GrGLMatrixLoadfFn> fMatrixLoadf;
|
|
GrGLFunction<GrGLMatrixLoadIdentityFn> fMatrixLoadIdentity;
|
|
GrGLFunction<GrGLGetProgramResourceLocationFn> fGetProgramResourceLocation;
|
|
GrGLFunction<GrGLPathCommandsFn> fPathCommands;
|
|
GrGLFunction<GrGLPathParameteriFn> fPathParameteri;
|
|
GrGLFunction<GrGLPathParameterfFn> fPathParameterf;
|
|
GrGLFunction<GrGLGenPathsFn> fGenPaths;
|
|
GrGLFunction<GrGLDeletePathsFn> fDeletePaths;
|
|
GrGLFunction<GrGLIsPathFn> fIsPath;
|
|
GrGLFunction<GrGLPathStencilFuncFn> fPathStencilFunc;
|
|
GrGLFunction<GrGLStencilFillPathFn> fStencilFillPath;
|
|
GrGLFunction<GrGLStencilStrokePathFn> fStencilStrokePath;
|
|
GrGLFunction<GrGLStencilFillPathInstancedFn> fStencilFillPathInstanced;
|
|
GrGLFunction<GrGLStencilStrokePathInstancedFn> fStencilStrokePathInstanced;
|
|
GrGLFunction<GrGLCoverFillPathFn> fCoverFillPath;
|
|
GrGLFunction<GrGLCoverStrokePathFn> fCoverStrokePath;
|
|
GrGLFunction<GrGLCoverFillPathInstancedFn> fCoverFillPathInstanced;
|
|
GrGLFunction<GrGLCoverStrokePathInstancedFn> fCoverStrokePathInstanced;
|
|
// NV_path_rendering v1.2
|
|
GrGLFunction<GrGLStencilThenCoverFillPathFn> fStencilThenCoverFillPath;
|
|
GrGLFunction<GrGLStencilThenCoverStrokePathFn> fStencilThenCoverStrokePath;
|
|
GrGLFunction<GrGLStencilThenCoverFillPathInstancedFn> fStencilThenCoverFillPathInstanced;
|
|
GrGLFunction<GrGLStencilThenCoverStrokePathInstancedFn> fStencilThenCoverStrokePathInstanced;
|
|
// NV_path_rendering v1.3
|
|
GrGLFunction<GrGLProgramPathFragmentInputGenFn> fProgramPathFragmentInputGen;
|
|
// CHROMIUM_path_rendering
|
|
GrGLFunction<GrGLBindFragmentInputLocationFn> fBindFragmentInputLocation;
|
|
|
|
/* NV_framebuffer_mixed_samples */
|
|
GrGLFunction<GrGLCoverageModulationFn> fCoverageModulation;
|
|
|
|
/* ARB_sync */
|
|
GrGLFunction<GrGLFenceSyncFn> fFenceSync;
|
|
GrGLFunction<GrGLIsSyncFn> fIsSync;
|
|
GrGLFunction<GrGLClientWaitSyncFn> fClientWaitSync;
|
|
GrGLFunction<GrGLWaitSyncFn> fWaitSync;
|
|
GrGLFunction<GrGLDeleteSyncFn> fDeleteSync;
|
|
|
|
/* ARB_internalforamt_query */
|
|
GrGLFunction<GrGLGetInternalformativFn> fGetInternalformativ;
|
|
|
|
/* KHR_debug */
|
|
GrGLFunction<GrGLDebugMessageControlFn> fDebugMessageControl;
|
|
GrGLFunction<GrGLDebugMessageInsertFn> fDebugMessageInsert;
|
|
GrGLFunction<GrGLDebugMessageCallbackFn> fDebugMessageCallback;
|
|
GrGLFunction<GrGLGetDebugMessageLogFn> fGetDebugMessageLog;
|
|
GrGLFunction<GrGLPushDebugGroupFn> fPushDebugGroup;
|
|
GrGLFunction<GrGLPopDebugGroupFn> fPopDebugGroup;
|
|
GrGLFunction<GrGLObjectLabelFn> fObjectLabel;
|
|
|
|
/* EXT_window_rectangles */
|
|
GrGLFunction<GrGLWindowRectanglesFn> fWindowRectangles;
|
|
|
|
/* EGL functions */
|
|
GrGLFunction<GrEGLCreateImageFn> fEGLCreateImage;
|
|
GrGLFunction<GrEGLDestroyImageFn> fEGLDestroyImage;
|
|
} fFunctions;
|
|
|
|
#if GR_TEST_UTILS
|
|
// This exists for internal testing.
|
|
virtual void abandon() const;
|
|
#endif
|
|
};
|
|
|
|
#endif
|