13 #include "impeller/entity/position_color.vert.h"
14 #include "impeller/entity/vertices.frag.h"
30 geometry_ = std::move(geometry);
34 src_contents_ = std::move(contents);
46 blend_mode_ = blend_mode;
59 std::shared_ptr<Contents> src_contents = src_contents_;
61 if (geometry_->HasTextureCoordinates()) {
62 auto contents = std::make_shared<VerticesUVContents>(*
this);
64 if (!geometry_->HasVertexColors()) {
65 contents->SetAlpha(alpha_);
66 return contents->Render(renderer, entity, pass);
68 src_contents = contents;
71 auto dst_contents = std::make_shared<VerticesColorContents>(*
this);
74 std::shared_ptr<Contents> contents;
76 contents = dst_contents;
81 color_filter_contents->SetAlpha(alpha_);
83 contents = color_filter_contents;
87 return contents->Render(renderer, entity, pass);
99 const Entity& entity)
const {
116 src_contents->RenderToSnapshot(renderer,
121 "VerticesUVContents Snapshot");
122 if (!snapshot.has_value()) {
131 auto coverage = src_contents->GetCoverage(
Entity{});
132 if (!coverage.has_value()) {
135 auto geometry_result = geometry->GetPositionUVBuffer(
136 coverage.value(),
Matrix(), renderer, entity, pass);
138 opts.primitive_type = geometry_result.type;
143 VS::FrameInfo frame_info;
144 frame_info.mvp = geometry_result.transform;
145 frame_info.texture_sampler_y_coord_scale =
146 snapshot->texture->GetYCoordScale();
147 frame_info.alpha = alpha_ * snapshot->opacity;
148 VS::BindFrameInfo(cmd, host_buffer.EmplaceUniform(frame_info));
150 FS::BindTextureSampler(cmd, snapshot->texture,
151 renderer.
GetContext()->GetSamplerLibrary()->GetSampler(
152 snapshot->sampler_descriptor));
166 const Entity& entity)
const {
185 auto geometry_result =
186 geometry->GetPositionColorBuffer(renderer, entity, pass);
188 opts.primitive_type = geometry_result.type;
193 VS::FrameInfo frame_info;
194 frame_info.mvp = geometry_result.transform;
195 VS::BindFrameInfo(cmd, host_buffer.EmplaceUniform(frame_info));
197 FS::FragInfo frag_info;
198 frag_info.alpha = alpha_;
199 FS::BindFragInfo(cmd, host_buffer.EmplaceUniform(frag_info));