1 /* 2 * Copyright 2013 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. 6 */ 7 8 9 #ifndef GrGLContext_DEFINED 10 #define GrGLContext_DEFINED 11 12 #include "gl/GrGLExtensions.h" 13 #include "gl/GrGLInterface.h" 14 #include "GrGLCaps.h" 15 #include "GrGLUtil.h" 16 17 struct GrContextOptions; 18 19 /** 20 * Encapsulates information about an OpenGL context including the OpenGL 21 * version, the GrGLStandard type of the context, and GLSL version. 22 */ 23 class GrGLContextInfo : public SkRefCnt { 24 public: standard()25 GrGLStandard standard() const { return fInterface->fStandard; } version()26 GrGLVersion version() const { return fGLVersion; } glslGeneration()27 GrGLSLGeneration glslGeneration() const { return fGLSLGeneration; } vendor()28 GrGLVendor vendor() const { return fVendor; } renderer()29 GrGLRenderer renderer() const { return fRenderer; } 30 /** What driver is running our GL implementation? This is not necessarily related to the vendor. 31 (e.g. Intel GPU being driven by Mesa) */ driver()32 GrGLDriver driver() const { return fDriver; } driverVersion()33 GrGLDriverVersion driverVersion() const { return fDriverVersion; } caps()34 const GrGLCaps* caps() const { return fGLCaps.get(); } caps()35 GrGLCaps* caps() { return fGLCaps; } hasExtension(const char * ext)36 bool hasExtension(const char* ext) const { 37 return fInterface->hasExtension(ext); 38 } 39 extensions()40 const GrGLExtensions& extensions() const { return fInterface->fExtensions; } 41 42 protected: 43 struct ConstructorArgs { 44 const GrGLInterface* fInterface; 45 GrGLVersion fGLVersion; 46 GrGLSLGeneration fGLSLGeneration; 47 GrGLVendor fVendor; 48 GrGLRenderer fRenderer; 49 GrGLDriver fDriver; 50 GrGLDriverVersion fDriverVersion; 51 const GrContextOptions* fContextOptions; 52 }; 53 54 GrGLContextInfo(const ConstructorArgs& args); 55 56 SkAutoTUnref<const GrGLInterface> fInterface; 57 GrGLVersion fGLVersion; 58 GrGLSLGeneration fGLSLGeneration; 59 GrGLVendor fVendor; 60 GrGLRenderer fRenderer; 61 GrGLDriver fDriver; 62 GrGLDriverVersion fDriverVersion; 63 SkAutoTUnref<GrGLCaps> fGLCaps; 64 }; 65 66 /** 67 * Extension of GrGLContextInfo that also provides access to GrGLInterface. 68 */ 69 class GrGLContext : public GrGLContextInfo { 70 public: 71 /** 72 * Creates a GrGLContext from a GrGLInterface and the currently 73 * bound OpenGL context accessible by the GrGLInterface. 74 */ 75 static GrGLContext* Create(const GrGLInterface* interface, const GrContextOptions& options); 76 interface()77 const GrGLInterface* interface() const { return fInterface; } 78 79 private: GrGLContext(const ConstructorArgs & args)80 GrGLContext(const ConstructorArgs& args) : INHERITED(args) {} 81 82 typedef GrGLContextInfo INHERITED; 83 }; 84 85 #endif 86