Update impeller-cmake to ToT (#22)
diff --git a/src/examples/mesh/mesh_example.cc b/src/examples/mesh/mesh_example.cc index 90e3228..26d2055 100644 --- a/src/examples/mesh/mesh_example.cc +++ b/src/examples/mesh/mesh_example.cc
@@ -15,6 +15,7 @@ #include "impeller/core/buffer_view.h" #include "impeller/core/device_buffer_descriptor.h" #include "impeller/core/formats.h" +#include "impeller/core/host_buffer.h" #include "impeller/core/vertex_buffer.h" #include "impeller/geometry/matrix.h" #include "impeller/geometry/scalar.h" @@ -43,6 +44,9 @@ } bool MeshExample::Setup(impeller::Context& context) { + transients_buffer_ = + impeller::HostBuffer::Create(context.GetResourceAllocator()); + //---------------------------------------------------------------------------- /// Load/unpack the model. /// @@ -67,14 +71,9 @@ fb::GetMesh(data.data())->UnPackTo(&mesh); //---------------------------------------------------------------------------- - /// Create sampler and load textures. + /// Load textures. /// - impeller::SamplerDescriptor sampler_desc; - sampler_desc.min_filter = impeller::MinMagFilter::kLinear; - sampler_desc.mag_filter = impeller::MinMagFilter::kLinear; - sampler_ = context.GetSamplerLibrary()->GetSampler(sampler_desc); - const auto asset_path = std::filesystem::current_path() / "assets/"; base_color_texture_ = @@ -168,6 +167,7 @@ const impeller::RenderTarget& render_target, impeller::CommandBuffer& command_buffer) { clock_.Tick(); + transients_buffer_->Reset(); static float exposure = 5; ImGui::SliderFloat("Exposure", &exposure, 0, 15); @@ -177,11 +177,10 @@ return false; } - impeller::Command cmd; - DEBUG_COMMAND_INFO(cmd, "Mesh Example"); - cmd.pipeline = pipeline_; + pass->SetCommandLabel("Mesh Example"); + pass->SetPipeline(pipeline_); - cmd.BindVertices(vertex_buffer_); + pass->SetVertexBuffer(vertex_buffer_); auto time = clock_.GetTime(); @@ -197,19 +196,23 @@ impeller::Matrix::MakeRotationX( impeller::Radians{std::cos(time * 0.27f) / 4}); - VS::BindVertInfo(cmd, pass->GetTransientsBuffer().EmplaceUniform(vs_uniform)); + VS::BindVertInfo(*pass, transients_buffer_->EmplaceUniform(vs_uniform)); FS::FragInfo fs_uniform; fs_uniform.exposure = exposure; fs_uniform.camera_position = {0, 0, -50}; - FS::BindFragInfo(cmd, pass->GetTransientsBuffer().EmplaceUniform(fs_uniform)); + FS::BindFragInfo(*pass, transients_buffer_->EmplaceUniform(fs_uniform)); - FS::BindBaseColorTexture(cmd, base_color_texture_, sampler_); - FS::BindNormalTexture(cmd, normal_texture_, sampler_); + impeller::SamplerDescriptor sampler_desc; + sampler_desc.min_filter = impeller::MinMagFilter::kLinear; + sampler_desc.mag_filter = impeller::MinMagFilter::kLinear; + const auto& sampler = context.GetSamplerLibrary()->GetSampler(sampler_desc); + FS::BindBaseColorTexture(*pass, base_color_texture_, sampler); + FS::BindNormalTexture(*pass, normal_texture_, sampler); FS::BindOcclusionRoughnessMetallicTexture( - cmd, occlusion_roughness_metallic_texture_, sampler_); + *pass, occlusion_roughness_metallic_texture_, sampler); - if (!pass->AddCommand(std::move(cmd))) { + if (!pass->Draw().ok()) { return false; }
diff --git a/src/examples/mesh/mesh_example.h b/src/examples/mesh/mesh_example.h index 0b019b3..b48be8a 100644 --- a/src/examples/mesh/mesh_example.h +++ b/src/examples/mesh/mesh_example.h
@@ -34,11 +34,11 @@ private: example::Clock clock_; + std::shared_ptr<impeller::HostBuffer> transients_buffer_; + std::shared_ptr<impeller::Pipeline<impeller::PipelineDescriptor>> pipeline_; impeller::VertexBuffer vertex_buffer_; - std::shared_ptr<const impeller::Sampler> sampler_; - std::shared_ptr<impeller::Texture> base_color_texture_; std::shared_ptr<impeller::Texture> normal_texture_; std::shared_ptr<impeller::Texture> occlusion_roughness_metallic_texture_;
diff --git a/src/examples/the_impeller/the_impeller_example.cc b/src/examples/the_impeller/the_impeller_example.cc index b56cb2f..c9e6f3c 100644 --- a/src/examples/the_impeller/the_impeller_example.cc +++ b/src/examples/the_impeller/the_impeller_example.cc
@@ -7,11 +7,13 @@ #include <filesystem> #include <iostream> +#include "impeller/core/host_buffer.h" #include "impeller/renderer/command.h" #include "impeller/renderer/pipeline_library.h" #include "impeller/renderer/render_pass.h" #include "impeller/renderer/render_target.h" #include "impeller/renderer/sampler_library.h" +#include "impeller/renderer/vertex_buffer_builder.h" #include "examples/assets.h" @@ -30,6 +32,9 @@ } bool TheImpellerExample::Setup(impeller::Context& context) { + transients_buffer_ = + impeller::HostBuffer::Create(context.GetResourceAllocator()); + const auto fixture_path = std::filesystem::current_path() / "third_party/impeller-cmake/third_party/flutter/impeller/fixtures/"; @@ -43,12 +48,6 @@ std::cerr << "Failed to load blue noise texture." << std::endl; return false; } - impeller::SamplerDescriptor noise_sampler_desc; - noise_sampler_desc.width_address_mode = impeller::SamplerAddressMode::kRepeat; - noise_sampler_desc.height_address_mode = - impeller::SamplerAddressMode::kRepeat; - blue_noise_sampler_ = - context.GetSamplerLibrary()->GetSampler(noise_sampler_desc); cube_map_texture_ = example::LoadTextureCube({fixture_path / "table_mountain_px.png", @@ -58,7 +57,6 @@ fixture_path / "table_mountain_pz.png", fixture_path / "table_mountain_nz.png"}, *context.GetResourceAllocator()); - cube_map_sampler_ = context.GetSamplerLibrary()->GetSampler({}); auto pipeline_desc = impeller::PipelineBuilder<VS, FS>::MakeDefaultPipelineDescriptor(context); @@ -76,15 +74,15 @@ const impeller::RenderTarget& render_target, impeller::CommandBuffer& command_buffer) { clock_.Tick(); + transients_buffer_->Reset(); auto pass = command_buffer.CreateRenderPass(render_target); if (!pass) { return false; } - impeller::Command cmd; - DEBUG_COMMAND_INFO(cmd, "Impeller SDF showcase"); - cmd.pipeline = pipeline_; + pass->SetCommandLabel("Impeller SDF showcase"); + pass->SetPipeline(pipeline_); auto size = render_target.GetRenderTargetSize(); @@ -95,21 +93,28 @@ {impeller::Point(size.width, 0)}, {impeller::Point(0, size.height)}, {impeller::Point(size.width, size.height)}}); - cmd.BindVertices(builder.CreateVertexBuffer(pass->GetTransientsBuffer())); + pass->SetVertexBuffer(builder.CreateVertexBuffer(*transients_buffer_)); VS::FrameInfo vs_uniform; vs_uniform.mvp = impeller::Matrix::MakeOrthographic(size); - VS::BindFrameInfo(cmd, - pass->GetTransientsBuffer().EmplaceUniform((vs_uniform))); + VS::BindFrameInfo(*pass, transients_buffer_->EmplaceUniform((vs_uniform))); FS::FragInfo fs_uniform; fs_uniform.texture_size = impeller::Point(size); fs_uniform.time = clock_.GetTime(); - FS::BindFragInfo(cmd, pass->GetTransientsBuffer().EmplaceUniform(fs_uniform)); - FS::BindBlueNoise(cmd, blue_noise_texture_, blue_noise_sampler_); - FS::BindCubeMap(cmd, cube_map_texture_, cube_map_sampler_); + FS::BindFragInfo(*pass, transients_buffer_->EmplaceUniform(fs_uniform)); - if (!pass->AddCommand(std::move(cmd))) { + impeller::SamplerDescriptor noise_sampler_desc; + noise_sampler_desc.width_address_mode = impeller::SamplerAddressMode::kRepeat; + noise_sampler_desc.height_address_mode = + impeller::SamplerAddressMode::kRepeat; + FS::BindBlueNoise( + *pass, blue_noise_texture_, + context.GetSamplerLibrary()->GetSampler(noise_sampler_desc)); + FS::BindCubeMap(*pass, cube_map_texture_, + context.GetSamplerLibrary()->GetSampler({})); + + if (!pass->Draw().ok()) { return false; }
diff --git a/src/examples/the_impeller/the_impeller_example.h b/src/examples/the_impeller/the_impeller_example.h index 5f9a414..48701c0 100644 --- a/src/examples/the_impeller/the_impeller_example.h +++ b/src/examples/the_impeller/the_impeller_example.h
@@ -7,6 +7,7 @@ #include <memory> #include "examples/clock.h" +#include "impeller/core/host_buffer.h" #include "impeller/core/sampler.h" #include "impeller/core/texture.h" #include "impeller/renderer/pipeline.h" @@ -33,11 +34,11 @@ private: example::Clock clock_; + std::shared_ptr<impeller::HostBuffer> transients_buffer_; + std::shared_ptr<impeller::Texture> blue_noise_texture_; - std::shared_ptr<const impeller::Sampler> blue_noise_sampler_; std::shared_ptr<impeller::Texture> cube_map_texture_; - std::shared_ptr<const impeller::Sampler> cube_map_sampler_; std::shared_ptr<impeller::Pipeline<impeller::PipelineDescriptor>> pipeline_; };
diff --git a/src/main_gles.cc b/src/main_gles.cc index 5b077d1..adb810a 100644 --- a/src/main_gles.cc +++ b/src/main_gles.cc
@@ -198,7 +198,7 @@ ImGui::SetNextWindowPos({10, 10}); impeller::Renderer::RenderCallback render_callback = - [&renderer, &examples, + [&context, &renderer, &examples, &example_names](impeller::RenderTarget& render_target) -> bool { static int selected_example_index = 1; auto example = examples[selected_example_index].get(); @@ -286,7 +286,10 @@ } } - return buffer->SubmitCommands(); + // TODO(bdero): GetComandQueue shouldn't be private... + std::shared_ptr<impeller::Context>(context)->GetCommandQueue()->Submit( + {buffer}); + return true; }; renderer->Render(std::move(surface), render_callback);
diff --git a/third_party/impeller-cmake b/third_party/impeller-cmake index ffb5582..6f08855 160000 --- a/third_party/impeller-cmake +++ b/third_party/impeller-cmake
@@ -1 +1 @@ -Subproject commit ffb558292d7e50f8e4bbc65efdd6f37760d8c9a8 +Subproject commit 6f08855647ade0f84ec86e8b149708e02810544f