24 bool has_depth_stencil_attachments =
45 std::move(coverage_proc));
61 if (!coverage.has_value()) {
65 std::shared_ptr<CommandBuffer> command_buffer =
67 if (!command_buffer) {
79 if (!coverage.has_value()) {
87 [&contents = *
this, &entity, &coverage](
const ContentContext& renderer,
90 sub_entity.SetBlendMode(BlendMode::kSrcOver);
91 sub_entity.SetTransform(
92 Matrix::MakeTranslation(Vector3(-coverage->GetOrigin())) *
93 entity.GetTransform());
94 return contents.Render(renderer, sub_entity, pass);
100 if (!render_target.
ok()) {
103 if (!renderer.
GetContext()->EnqueueCommandBuffer(std::move(command_buffer))) {
108 .
texture = render_target.
value().GetRenderTargetTexture(),
119 VALIDATION_LOG <<
"Contents::SetInheritedOpacity should never be called when "
120 "Contents::CanAcceptOpacity returns false.";
124 ISize target_size)
const {
134 coverage_hint_ = coverage_hint;
138 return coverage_hint_;
142 return color_source_size_;
146 color_source_size_ = size;
static std::shared_ptr< Contents > Make(RenderProc render_proc, CoverageProc coverage_proc)
fml::StatusOr< RenderTarget > MakeSubpass(std::string_view label, ISize texture_size, const std::shared_ptr< CommandBuffer > &command_buffer, const SubpassCallback &subpass_callback, bool msaa_enabled=true, bool depth_stencil_enabled=false, int32_t mip_count=1) const
Creates a new texture of size texture_size and calls subpass_callback with a RenderPass for drawing t...
std::shared_ptr< Context > GetContext() const
virtual std::optional< Color > AsBackgroundColor(const Entity &entity, ISize target_size) const
Returns a color if this Contents will flood the given target_size with a color. This output color is ...
virtual std::optional< Rect > GetCoverage(const Entity &entity) const =0
Get the area of the render pass that will be affected when this contents is rendered.
std::optional< Size > GetColorSourceSize() const
Return the color source's intrinsic size, if available.
virtual bool ApplyColorFilter(const ColorFilterProc &color_filter_proc)
If possible, applies a color filter to this contents inputs on the CPU.
const std::optional< Rect > & GetCoverageHint() const
virtual bool IsOpaque(const Matrix &transform) const
Whether this Contents only emits opaque source colors from the fragment stage. This value does not ac...
virtual std::optional< Snapshot > RenderToSnapshot(const ContentContext &renderer, const Entity &entity, const SnapshotOptions &options) const
Render this contents to a snapshot, respecting the entity's transform, path, clip depth,...
void SetColorSourceSize(Size size)
std::function< std::optional< Rect >(const Entity &entity)> CoverageProc
virtual void SetInheritedOpacity(Scalar opacity)
Inherit the provided opacity.
static std::shared_ptr< Contents > MakeAnonymous(RenderProc render_proc, CoverageProc coverage_proc)
std::function< Color(Color)> ColorFilterProc
void SetCoverageHint(std::optional< Rect > coverage_hint)
Hint that specifies the coverage area of this Contents that will actually be used during rendering....
std::function< bool(const ContentContext &renderer, const Entity &entity, RenderPass &pass)> RenderProc
BlendMode GetBlendMode() const
Render passes encode render commands directed as one specific render target into an underlying comman...
SampleCount GetSampleCount() const
The sample count of the attached render target.
PixelFormat GetRenderTargetPixelFormat() const
The pixel format of the attached render target.
bool HasStencilAttachment() const
Whether the render target has an stencil attachment.
bool HasDepthAttachment() const
Whether the render target has a depth attachment.
#define FML_DCHECK(condition)
ISize subpass_size
The output size of the down-sampling pass.
@ kGreaterEqual
Comparison test passes if new_value >= current_value.
ContentContextOptions OptionsFromPassAndEntity(const RenderPass &pass, const Entity &entity)
ContentContextOptions OptionsFromPass(const RenderPass &pass)
bool has_depth_stencil_attachments
PixelFormat color_attachment_pixel_format
CompareFunction depth_compare
const std::optional< SamplerDescriptor > & sampler_descriptor
int32_t coverage_expansion
std::optional< Rect > coverage_limit
A 4x4 matrix using column-major storage.
static constexpr Matrix MakeTranslation(const Vector3 &t)
Represents a texture and its intended draw transform/sampler configuration.
std::shared_ptr< Texture > texture
constexpr TSize Ceil() const