34 if (!renderer.GetDeviceCapabilities().SupportsFramebufferFetch()) {
41 auto& host_buffer = renderer.GetTransientsBuffer();
43 auto src_snapshot = child_contents_->RenderToSnapshot(
50 "FramebufferBlendContents Snapshot");
52 if (!src_snapshot.has_value()) {
55 auto coverage = src_snapshot->GetCoverage();
56 if (!coverage.has_value()) {
59 Rect src_coverage = coverage.value();
61 auto size = src_coverage.
GetSize();
77 switch (blend_mode_) {
127 VS::FrameInfo frame_info;
128 FS::FragInfo frag_info;
130 auto src_sampler_descriptor = src_snapshot->sampler_descriptor;
131 if (renderer.GetDeviceCapabilities().SupportsDecalSamplerAddressMode()) {
135 const std::unique_ptr<const Sampler>& src_sampler =
136 renderer.GetContext()->GetSamplerLibrary()->GetSampler(
137 src_sampler_descriptor);
138 FS::BindTextureSamplerSrc(pass, src_snapshot->texture, src_sampler);
141 src_snapshot->transform);
142 frame_info.src_y_coord_scale = src_snapshot->texture->GetYCoordScale();
143 VS::BindFrameInfo(pass, host_buffer.EmplaceUniform(frame_info));
145 frag_info.src_input_alpha = src_snapshot->opacity;
146 FS::BindFragInfo(pass, host_buffer.EmplaceUniform(frag_info));
void SetChildContents(std::shared_ptr< Contents > child_contents)
~FramebufferBlendContents() override
void SetBlendMode(BlendMode blend_mode)
std::optional< Rect > GetCoverage(const Entity &entity) const override
Get the area of the render pass that will be affected when this contents is rendered.
bool Render(const ContentContext &renderer, const Entity &entity, RenderPass &pass) const override