Flutter Impeller
context_gles.h
Go to the documentation of this file.
1 // Copyright 2013 The Flutter Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef FLUTTER_IMPELLER_RENDERER_BACKEND_GLES_CONTEXT_GLES_H_
6 #define FLUTTER_IMPELLER_RENDERER_BACKEND_GLES_CONTEXT_GLES_H_
7 
20 
21 namespace impeller {
22 
23 class ContextGLES final : public Context,
24  public BackendCast<ContextGLES, Context>,
25  public std::enable_shared_from_this<ContextGLES> {
26  public:
27  static std::shared_ptr<ContextGLES> Create(
28  const Flags& flags,
29  std::unique_ptr<ProcTableGLES> gl,
30  const std::vector<std::shared_ptr<fml::Mapping>>& shader_libraries,
31  bool enable_gpu_tracing);
32 
33  // |Context|
34  ~ContextGLES() override;
35 
36  // |Context|
37  BackendType GetBackendType() const override;
38 
39  const std::shared_ptr<ReactorGLES>& GetReactor() const;
40 
41  std::optional<ReactorGLES::WorkerID> AddReactorWorker(
42  const std::shared_ptr<ReactorGLES::Worker>& worker);
43 
45 
46  std::shared_ptr<GPUTracerGLES> GetGPUTracer() const { return gpu_tracer_; }
47 
48  private:
49  std::shared_ptr<ReactorGLES> reactor_;
50  std::shared_ptr<ShaderLibraryGLES> shader_library_;
51  std::shared_ptr<PipelineLibraryGLES> pipeline_library_;
52  std::shared_ptr<SamplerLibraryGLES> sampler_library_;
53  std::shared_ptr<AllocatorGLES> resource_allocator_;
54  std::shared_ptr<CommandQueue> command_queue_;
55  std::shared_ptr<GPUTracerGLES> gpu_tracer_;
56 
57  // Note: This is stored separately from the ProcTableGLES CapabilitiesGLES
58  // in order to satisfy the Context::GetCapabilities signature which returns
59  // a reference.
60  std::shared_ptr<const Capabilities> device_capabilities_;
61  bool is_valid_ = false;
62 
64  const Flags& flags,
65  std::unique_ptr<ProcTableGLES> gl,
66  const std::vector<std::shared_ptr<fml::Mapping>>& shader_libraries,
67  bool enable_gpu_tracing);
68 
69  // |Context|
70  std::string DescribeGpuModel() const override;
71 
72  // |Context|
73  bool IsValid() const override;
74 
75  // |Context|
76  std::shared_ptr<Allocator> GetResourceAllocator() const override;
77 
78  // |Context|
79  std::shared_ptr<ShaderLibrary> GetShaderLibrary() const override;
80 
81  // |Context|
82  std::shared_ptr<SamplerLibrary> GetSamplerLibrary() const override;
83 
84  // |Context|
85  std::shared_ptr<PipelineLibrary> GetPipelineLibrary() const override;
86 
87  // |Context|
88  std::shared_ptr<CommandBuffer> CreateCommandBuffer() const override;
89 
90  // |Context|
91  const std::shared_ptr<const Capabilities>& GetCapabilities() const override;
92 
93  // |Context|
94  std::shared_ptr<CommandQueue> GetCommandQueue() const override;
95 
96  // |Context|
97  void Shutdown() override;
98 
99  // |Context|
100  bool AddTrackingFence(const std::shared_ptr<Texture>& texture) const override;
101 
102  // |Context|
103  void ResetThreadLocalState() const override;
104 
105  // |Context|
106  [[nodiscard]] bool EnqueueCommandBuffer(
107  std::shared_ptr<CommandBuffer> command_buffer) override;
108 
109  // |Context|
110  [[nodiscard]] bool FlushCommandBuffers() override;
111 
112  // |Context|
113  RuntimeStageBackend GetRuntimeStageBackend() const override;
114 
115  ContextGLES(const ContextGLES&) = delete;
116 
117  ContextGLES& operator=(const ContextGLES&) = delete;
118 };
119 
120 } // namespace impeller
121 
122 #endif // FLUTTER_IMPELLER_RENDERER_BACKEND_GLES_CONTEXT_GLES_H_
BackendType GetBackendType() const override
Get the graphics backend of an Impeller context.
Definition: context_gles.cc:85
bool RemoveReactorWorker(ReactorGLES::WorkerID id)
const std::shared_ptr< ReactorGLES > & GetReactor() const
Definition: context_gles.cc:89
std::shared_ptr< GPUTracerGLES > GetGPUTracer() const
Definition: context_gles.h:46
static std::shared_ptr< ContextGLES > Create(const Flags &flags, std::unique_ptr< ProcTableGLES > gl, const std::vector< std::shared_ptr< fml::Mapping >> &shader_libraries, bool enable_gpu_tracing)
Definition: context_gles.cc:21
std::optional< ReactorGLES::WorkerID > AddReactorWorker(const std::shared_ptr< ReactorGLES::Worker > &worker)
Definition: context_gles.cc:93
To do anything rendering related with Impeller, you need a context.
Definition: context.h:65