|  | /* | 
|  | * Copyright 2013 Google Inc. | 
|  | * | 
|  | * Use of this source code is governed by a BSD-style license that can be | 
|  | * found in the LICENSE file. | 
|  | */ | 
|  |  | 
|  |  | 
|  | #ifndef GrGLContext_DEFINED | 
|  | #define GrGLContext_DEFINED | 
|  |  | 
|  | #include "gl/GrGLExtensions.h" | 
|  | #include "gl/GrGLInterface.h" | 
|  | #include "GrGLCaps.h" | 
|  | #include "GrGLUtil.h" | 
|  |  | 
|  | struct GrContextOptions; | 
|  |  | 
|  | /** | 
|  | * Encapsulates information about an OpenGL context including the OpenGL | 
|  | * version, the GrGLStandard type of the context, and GLSL version. | 
|  | */ | 
|  | class GrGLContextInfo : public SkRefCnt { | 
|  | public: | 
|  | GrGLStandard standard() const { return fInterface->fStandard; } | 
|  | GrGLVersion version() const { return fGLVersion; } | 
|  | GrGLSLGeneration glslGeneration() const { return fGLSLGeneration; } | 
|  | GrGLVendor vendor() const { return fVendor; } | 
|  | GrGLRenderer renderer() const { return fRenderer; } | 
|  | /** What driver is running our GL implementation? This is not necessarily related to the vendor. | 
|  | (e.g. Intel GPU being driven by Mesa) */ | 
|  | GrGLDriver driver() const { return fDriver; } | 
|  | GrGLDriverVersion driverVersion() const { return fDriverVersion; } | 
|  | const GrGLCaps* caps() const { return fGLCaps.get(); } | 
|  | GrGLCaps* caps() { return fGLCaps; } | 
|  | bool hasExtension(const char* ext) const { | 
|  | return fInterface->hasExtension(ext); | 
|  | } | 
|  |  | 
|  | const GrGLExtensions& extensions() const { return fInterface->fExtensions; } | 
|  |  | 
|  | protected: | 
|  | struct ConstructorArgs { | 
|  | const GrGLInterface*                fInterface; | 
|  | GrGLVersion                         fGLVersion; | 
|  | GrGLSLGeneration                    fGLSLGeneration; | 
|  | GrGLVendor                          fVendor; | 
|  | GrGLRenderer                        fRenderer; | 
|  | GrGLDriver                          fDriver; | 
|  | GrGLDriverVersion                   fDriverVersion; | 
|  | const  GrContextOptions*            fContextOptions; | 
|  | }; | 
|  |  | 
|  | GrGLContextInfo(const ConstructorArgs& args); | 
|  |  | 
|  | SkAutoTUnref<const GrGLInterface>   fInterface; | 
|  | GrGLVersion                         fGLVersion; | 
|  | GrGLSLGeneration                    fGLSLGeneration; | 
|  | GrGLVendor                          fVendor; | 
|  | GrGLRenderer                        fRenderer; | 
|  | GrGLDriver                          fDriver; | 
|  | GrGLDriverVersion                   fDriverVersion; | 
|  | SkAutoTUnref<GrGLCaps>              fGLCaps; | 
|  | }; | 
|  |  | 
|  | /** | 
|  | * Extension of GrGLContextInfo that also provides access to GrGLInterface. | 
|  | */ | 
|  | class GrGLContext : public GrGLContextInfo { | 
|  | public: | 
|  | /** | 
|  | * Creates a GrGLContext from a GrGLInterface and the currently | 
|  | * bound OpenGL context accessible by the GrGLInterface. | 
|  | */ | 
|  | static GrGLContext* Create(const GrGLInterface* interface, const GrContextOptions& options); | 
|  |  | 
|  | const GrGLInterface* interface() const { return fInterface; } | 
|  |  | 
|  | private: | 
|  | GrGLContext(const ConstructorArgs& args) : INHERITED(args) {} | 
|  |  | 
|  | typedef GrGLContextInfo INHERITED; | 
|  | }; | 
|  |  | 
|  | #endif |