23class DeferredCompletionCallback {
25 explicit DeferredCompletionCallback(
32 DeferredCompletionCallback(
const DeferredCompletionCallback&) =
delete;
33 DeferredCompletionCallback& operator=(
const DeferredCompletionCallback&) =
35 DeferredCompletionCallback(DeferredCompletionCallback&&) =
delete;
36 DeferredCompletionCallback& operator=(DeferredCompletionCallback&&) =
delete;
46 auto callback = std::exchange(callback_,
nullptr);
55CommandBufferGLES::CommandBufferGLES(std::weak_ptr<const Context>
context,
56 std::shared_ptr<ReactorGLES>
reactor)
59 is_valid_(reactor_ && reactor_->IsValid()) {}
61CommandBufferGLES::~CommandBufferGLES() =
default;
64void CommandBufferGLES::SetLabel(std::string_view label)
const {
69bool CommandBufferGLES::IsValid()
const {
74bool CommandBufferGLES::OnSubmitCommands(
bool block_on_schedule,
79 std::shared_ptr<GpuSubmissionTracker> tracker;
80 uint64_t submission_id = 0;
81 if (
auto context = context_.lock()) {
82 tracker = ContextGLES::Cast(*context).GetMutableSubmissionTracker();
83 submission_id = tracker->RecordSubmission();
86 if (reactor_->CanReactOnCurrentThread()) {
87 const auto result = reactor_->React();
89 tracker->RecordCompletion(submission_id);
92 callback(result ? CommandBuffer::Status::kCompleted
93 : CommandBuffer::Status::kError);
100 std::shared_ptr<DeferredCompletionCallback> deferred_callback;
103 std::make_shared<DeferredCompletionCallback>(std::move(
callback));
105 if (!reactor_->AddOperation(
106 [deferred_callback, tracker,
107 submission_id](
const ReactorGLES&
reactor) {
109 tracker->RecordCompletion(submission_id);
111 if (deferred_callback) {
112 deferred_callback->Complete();
117 tracker->RecordCompletion(submission_id);
125void CommandBufferGLES::OnWaitUntilCompleted() {
126 reactor_->GetProcTable().Finish();
130void CommandBufferGLES::OnWaitUntilScheduled() {
131 reactor_->GetProcTable().Flush();
135std::shared_ptr<RenderPass> CommandBufferGLES::OnCreateRenderPass(
140 auto context = context_.lock();
144 auto pass = std::shared_ptr<RenderPassGLES>(
146 if (!pass->IsValid()) {
153std::shared_ptr<BlitPass> CommandBufferGLES::OnCreateBlitPass() {
157 auto pass = std::shared_ptr<BlitPassGLES>(
new BlitPassGLES(reactor_));
158 if (!pass->IsValid()) {
165std::shared_ptr<ComputePass> CommandBufferGLES::OnCreateComputePass() {
std::function< void(Status)> CompletionCallback
FlutterDesktopBinaryReply callback
std::shared_ptr< ReactorGLES > reactor
std::shared_ptr< ContextGLES > context