8 #include "fml/logging.h"
24 bool has_depth_stencil_attachments =
45 std::move(coverage_proc));
59 std::optional<Rect> coverage_limit,
60 const std::optional<SamplerDescriptor>& sampler_descriptor,
63 std::string_view label)
const {
65 if (!coverage.has_value()) {
69 std::shared_ptr<CommandBuffer> command_buffer =
71 if (!command_buffer) {
79 coverage = coverage->Expand(1);
81 if (coverage_limit.has_value()) {
82 coverage = coverage->Intersection(*coverage_limit);
83 if (!coverage.has_value()) {
89 fml::StatusOr<RenderTarget> render_target = renderer.
MakeSubpass(
91 [&contents = *
this, &entity, &coverage](
const ContentContext& renderer,
98 return contents.Render(renderer, sub_entity, pass);
101 std::min(mip_count,
static_cast<int32_t
>(
subpass_size.MipCount())));
103 if (!render_target.ok()) {
106 if (!renderer.
GetContext()->EnqueueCommandBuffer(std::move(command_buffer))) {
111 .
texture = render_target.value().GetRenderTargetTexture(),
114 if (sampler_descriptor.has_value()) {
115 snapshot.sampler_descriptor = sampler_descriptor.value();
122 VALIDATION_LOG <<
"Contents::SetInheritedOpacity should never be called when "
123 "Contents::CanAcceptOpacity returns false.";
127 ISize target_size)
const {
137 coverage_hint_ = coverage_hint;
141 return coverage_hint_;
145 return color_source_size_;
149 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< Snapshot > RenderToSnapshot(const ContentContext &renderer, const Entity &entity, std::optional< Rect > coverage_limit=std::nullopt, const std::optional< SamplerDescriptor > &sampler_descriptor=std::nullopt, bool msaa_enabled=true, int32_t mip_count=1, std::string_view label="Snapshot") const
Render this contents to a snapshot, respecting the entity's transform, path, clip depth,...
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...
void SetColorSourceSize(Size size)
std::function< std::optional< Rect >(const Entity &entity)> CoverageProc
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.
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
void SetTransform(const Matrix &transform)
Set the global transform matrix for this Entity.
BlendMode GetBlendMode() const
void SetBlendMode(BlendMode blend_mode)
const Matrix & GetTransform() const
Get the global transform matrix for this Entity.
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.
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
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