1515#include " impeller/core/formats.h"
1616#include " impeller/core/sampler_descriptor.h"
1717#include " impeller/core/shader_types.h"
18- #include " impeller/core/vertex_buffer.h"
1918#include " impeller/geometry/color.h"
2019#include " impeller/renderer/command.h"
2120#include " impeller/renderer/pipeline.h"
@@ -37,10 +36,6 @@ const std::shared_ptr<const impeller::Context>& RenderPass::GetContext() const {
3736 return render_pass_->GetContext ();
3837}
3938
40- impeller::RenderPass& RenderPass::GetRenderPass () {
41- return *render_pass_;
42- }
43-
4439impeller::RenderTarget& RenderPass::GetRenderTarget () {
4540 return render_target_;
4641}
@@ -80,7 +75,6 @@ impeller::PipelineDescriptor& RenderPass::GetPipelineDescriptor() {
8075bool RenderPass::Begin (flutter::gpu::CommandBuffer& command_buffer) {
8176 render_pass_ =
8277 command_buffer.GetCommandBuffer ()->CreateRenderPass (render_target_);
83- SetDefaultDrawState ();
8478 if (!render_pass_) {
8579 return false ;
8680 }
@@ -92,19 +86,15 @@ void RenderPass::SetPipeline(fml::RefPtr<RenderPipeline> pipeline) {
9286 render_pipeline_ = std::move (pipeline);
9387}
9488
95- void RenderPass::SetHasIndexBuffer (bool value) {
96- has_index_buffer_ = value;
97- }
98-
99- bool RenderPass::HasIndexBuffer () const {
100- return has_index_buffer_;
101- }
102-
10389void RenderPass::ClearBindings () {
10490 vertex_uniform_bindings.clear ();
10591 vertex_texture_bindings.clear ();
10692 fragment_uniform_bindings.clear ();
10793 fragment_texture_bindings.clear ();
94+ vertex_buffer = {};
95+ index_buffer = {};
96+ index_buffer_type = impeller::IndexType::kNone ;
97+ element_count = 0 ;
10898}
10999
110100std::shared_ptr<impeller::Pipeline<impeller::PipelineDescriptor>>
@@ -179,14 +169,6 @@ RenderPass::GetOrCreatePipeline() {
179169 return pipeline;
180170}
181171
182- void RenderPass::SetDefaultDrawState () {
183- // All of the renderpass bindings are reset after drawing.
184- has_index_buffer_ = false ;
185-
186- // Explicitly turn off the index buffer by default.
187- render_pass_->SetIndexBuffer ({}, impeller::IndexType::kNone );
188- }
189-
190172bool RenderPass::Draw () {
191173 render_pass_->SetPipeline (GetOrCreatePipeline ());
192174
@@ -215,9 +197,13 @@ bool RenderPass::Draw() {
215197 texture.texture .resource , texture.sampler );
216198 }
217199
218- bool result = render_pass_->Draw ().ok ();
200+ render_pass_->SetVertexBuffer (vertex_buffer);
201+ render_pass_->SetIndexBuffer (index_buffer, index_buffer_type);
202+ render_pass_->SetElementCount (element_count);
219203
220- SetDefaultDrawState ();
204+ render_pass_->SetStencilReference (stencil_reference);
205+
206+ bool result = render_pass_->Draw ().ok ();
221207
222208 return result;
223209}
@@ -307,17 +293,16 @@ void InternalFlutterGpu_RenderPass_BindPipeline(
307293 wrapper->SetPipeline (std::move (ref));
308294}
309295
310- template <typename TBuffer>
311- static void BindVertexBuffer (flutter::gpu::RenderPass* wrapper,
312- TBuffer buffer,
313- int offset_in_bytes,
314- int length_in_bytes,
315- int vertex_count) {
316- auto & render_pass = wrapper->GetRenderPass ();
317- render_pass.SetVertexBuffer (impeller::BufferView{
296+ static void BindVertexBuffer (
297+ flutter::gpu::RenderPass* wrapper,
298+ const std::shared_ptr<const impeller::DeviceBuffer>& buffer,
299+ int offset_in_bytes,
300+ int length_in_bytes,
301+ int vertex_count) {
302+ wrapper->vertex_buffer = impeller::BufferView{
318303 .buffer = buffer,
319304 .range = impeller::Range (offset_in_bytes, length_in_bytes),
320- }) ;
305+ };
321306
322307 // If the index type is set, then the `vertex_count` becomes the index
323308 // count... So don't overwrite the count if it's already been set when binding
@@ -327,8 +312,8 @@ static void BindVertexBuffer(flutter::gpu::RenderPass* wrapper,
327312 // but overall it would be a bit more explicit and we wouldn't
328313 // have to document this behavior where the presence of the index
329314 // buffer always takes precedent.
330- if (!wrapper->HasIndexBuffer () ) {
331- render_pass. SetElementCount ( vertex_count) ;
315+ if (!wrapper->has_index_buffer ) {
316+ wrapper-> element_count = vertex_count;
332317 }
333318}
334319
@@ -360,27 +345,25 @@ void InternalFlutterGpu_RenderPass_BindVertexBufferHost(
360345 view->range .length , vertex_count);
361346}
362347
363- template <typename TBuffer>
364- static void BindIndexBuffer (flutter::gpu::RenderPass* wrapper,
365- TBuffer buffer,
366- int offset_in_bytes,
367- int length_in_bytes,
368- int index_type,
369- int index_count) {
370- auto & render_pass = wrapper->GetRenderPass ();
348+ static void BindIndexBuffer (
349+ flutter::gpu::RenderPass* wrapper,
350+ const std::shared_ptr<const impeller::DeviceBuffer>& buffer,
351+ int offset_in_bytes,
352+ int length_in_bytes,
353+ int index_type,
354+ int index_count) {
371355 impeller::IndexType type = flutter::gpu::ToImpellerIndexType (index_type);
372- render_pass.SetIndexBuffer (
373- impeller::BufferView{
374- .buffer = buffer,
375- .range = impeller::Range (offset_in_bytes, length_in_bytes),
376- },
377- type);
356+ wrapper->index_buffer = impeller::BufferView{
357+ .buffer = buffer,
358+ .range = impeller::Range (offset_in_bytes, length_in_bytes),
359+ };
360+ wrapper->index_buffer_type = type;
378361
379362 bool setting_index_buffer = type != impeller::IndexType::kNone ;
380363 if (setting_index_buffer) {
381- render_pass. SetElementCount ( index_count) ;
364+ wrapper-> element_count = index_count;
382365 }
383- wrapper->SetHasIndexBuffer ( setting_index_buffer) ;
366+ wrapper->has_index_buffer = setting_index_buffer;
384367}
385368
386369void InternalFlutterGpu_RenderPass_BindIndexBufferDevice (
@@ -597,8 +580,7 @@ void InternalFlutterGpu_RenderPass_SetDepthCompareOperation(
597580void InternalFlutterGpu_RenderPass_SetStencilReference (
598581 flutter::gpu::RenderPass* wrapper,
599582 int stencil_reference) {
600- auto & render_pass = wrapper->GetRenderPass ();
601- render_pass.SetStencilReference (static_cast <uint32_t >(stencil_reference));
583+ wrapper->stencil_reference = static_cast <uint32_t >(stencil_reference);
602584}
603585
604586void InternalFlutterGpu_RenderPass_SetStencilConfig (
0 commit comments