 |
Flutter Impeller
|
|
Go to the documentation of this file.
8 #include "fml/logging.h"
24 bool has_depth_stencil_attachments =
45 std::move(coverage_proc));
58 const std::optional<Rect>& current_clip_coverage)
const {
60 .coverage = current_clip_coverage};
66 std::optional<Rect> coverage_limit,
67 const std::optional<SamplerDescriptor>& sampler_descriptor,
70 const std::string& label)
const {
72 if (!coverage.has_value()) {
76 std::shared_ptr<CommandBuffer> command_buffer =
78 if (!command_buffer) {
86 coverage = coverage->Expand(1);
88 if (coverage_limit.has_value()) {
89 coverage = coverage->Intersection(*coverage_limit);
90 if (!coverage.has_value()) {
96 fml::StatusOr<RenderTarget> render_target = renderer.
MakeSubpass(
98 [&contents = *
this, &entity, &coverage](
const ContentContext& renderer,
105 return contents.Render(renderer, sub_entity, pass);
108 std::min(mip_count,
static_cast<int32_t
>(
subpass_size.MipCount())));
110 if (!render_target.ok()) {
115 ->Submit({std::move(command_buffer)})
121 .
texture = render_target.value().GetRenderTargetTexture(),
124 if (sampler_descriptor.has_value()) {
125 snapshot.sampler_descriptor = sampler_descriptor.value();
136 VALIDATION_LOG <<
"Contents::SetInheritedOpacity should never be called when "
137 "Contents::CanAcceptOpacity returns false.";
141 ISize target_size)
const {
155 const std::optional<Rect> clip_coverage)
const {
156 if (!clip_coverage.has_value()) {
160 if (!coverage.has_value()) {
166 return clip_coverage->IntersectsWithRect(coverage.value());
170 coverage_hint_ = coverage_hint;
174 return coverage_hint_;
178 return color_source_size_;
182 color_source_size_ = size;
std::optional< Size > GetColorSourceSize() const
Return the color source's intrinsic size, if available.
ContentContextOptions OptionsFromPass(const RenderPass &pass)
@ kGreater
Comparison test passes if new_value > current_value.
void SetBlendMode(BlendMode blend_mode)
void SetCoverageHint(std::optional< Rect > coverage_hint)
Hint that specifies the coverage area of this Contents that will actually be used during rendering....
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 ...
const Matrix & GetTransform() const
Get the global transform matrix for this Entity.
void SetColorSourceSize(Size size)
virtual bool CanInheritOpacity(const Entity &entity) const
Whether or not this contents can accept the opacity peephole optimization.
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, const std::string &label="Snapshot") const
Render this contents to a snapshot, respecting the entity's transform, path, clip depth,...
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.
constexpr TSize Ceil() const
bool has_depth_stencil_attachments
static constexpr Matrix MakeTranslation(const Vector3 &t)
ISize subpass_size
The output size of the down-sampling pass.
virtual ClipCoverage GetClipCoverage(const Entity &entity, const std::optional< Rect > ¤t_clip_coverage) const
Given the current pass space bounding rectangle of the clip buffer, return the expected clip coverage...
ContentContextOptions OptionsFromPassAndEntity(const RenderPass &pass, const Entity &entity)
const std::optional< Rect > & GetCoverageHint() const
PixelFormat color_attachment_pixel_format
std::shared_ptr< Context > GetContext() const
std::function< Color(Color)> ColorFilterProc
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...
Represents a texture and its intended draw transform/sampler configuration.
SampleCount GetSampleCount() const
The sample count of the attached render target.
virtual bool ShouldRender(const Entity &entity, const std::optional< Rect > clip_coverage) const
bool HasDepthAttachment() const
Whether the render target has a depth attachment.
BlendMode GetBlendMode() const
Render passes encode render commands directed as one specific render target into an underlying comman...
CompareFunction depth_compare
void SetTransform(const Matrix &transform)
Set the global transform matrix for this Entity.
std::function< bool(const ContentContext &renderer, const Entity &entity, RenderPass &pass)> RenderProc
constexpr static TRect MakeMaximum()
virtual void SetInheritedOpacity(Scalar opacity)
Inherit the provided opacity.
bool HasStencilAttachment() const
Whether the render target has an stencil attachment.
static std::shared_ptr< Contents > MakeAnonymous(RenderProc render_proc, CoverageProc coverage_proc)
virtual bool ApplyColorFilter(const ColorFilterProc &color_filter_proc)
If possible, applies a color filter to this contents inputs on the CPU.
std::function< std::optional< Rect >(const Entity &entity)> CoverageProc
std::shared_ptr< Texture > texture
virtual bool IsOpaque() const
Whether this Contents only emits opaque source colors from the fragment stage. This value does not ac...
virtual const FilterContents * AsFilter() const
Cast to a filter. Returns nullptr if this Contents is not a filter.
static std::shared_ptr< Contents > Make(RenderProc render_proc, CoverageProc coverage_proc)
PixelFormat GetRenderTargetPixelFormat() const
The pixel format of the attached render target.