| // Copyright 2013 The Flutter Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #pragma once |
| |
| #include <functional> |
| #include <memory> |
| #include <vector> |
| |
| #include "flutter/fml/closure.h" |
| #include "flutter/fml/macros.h" |
| #include "impeller/renderer/backend/gles/gles_handle.h" |
| #include "impeller/renderer/backend/gles/proc_table_gles.h" |
| |
| namespace impeller { |
| |
| class ReactorGLES { |
| public: |
| using Ref = std::shared_ptr<ReactorGLES>; |
| |
| ReactorGLES(std::unique_ptr<ProcTableGLES> gl); |
| |
| ~ReactorGLES(); |
| |
| bool IsValid() const; |
| |
| bool HasPendingOperations() const; |
| |
| const ProcTableGLES& GetProcTable() const; |
| |
| std::optional<GLuint> GetGLHandle(const GLESHandle& handle) const; |
| |
| GLESHandle CreateHandle(HandleType type); |
| |
| void CollectHandle(GLESHandle handle); |
| |
| void SetDebugLabel(const GLESHandle& handle, std::string label); |
| |
| using Operation = std::function<void(const ReactorGLES& reactor)>; |
| [[nodiscard]] bool AddOperation(Operation operation); |
| |
| [[nodiscard]] bool React(); |
| |
| private: |
| std::unique_ptr<ProcTableGLES> proc_table_; |
| std::vector<Operation> pending_operations_; |
| GLESHandleMap<std::optional<GLuint>> live_gl_handles_; |
| GLESHandleMap<GLuint> gl_handles_to_collect_; |
| GLESHandleMap<std::string> pending_debug_labels_; |
| bool in_reaction_ = false; |
| bool can_set_debug_labels_ = false; |
| |
| bool is_valid_ = false; |
| |
| bool ReactOnce(); |
| |
| FML_DISALLOW_COPY_AND_ASSIGN(ReactorGLES); |
| }; |
| |
| } // namespace impeller |