GrGLContext.h 3.7 KB

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