9 #include "impeller/entity/position_color.vert.h"
10 #include "impeller/entity/vertices.frag.h"
25 geometry_ = std::move(geometry);
29 src_contents_ = std::move(contents);
41 blend_mode_ = blend_mode;
54 std::shared_ptr<Contents> src_contents = src_contents_;
56 if (geometry_->HasTextureCoordinates()) {
57 auto contents = std::make_shared<VerticesUVContents>(*
this);
59 if (!geometry_->HasVertexColors()) {
60 contents->SetAlpha(alpha_);
61 return contents->Render(renderer, entity, pass);
63 src_contents = contents;
66 auto dst_contents = std::make_shared<VerticesColorContents>(*
this);
69 std::shared_ptr<Contents> contents;
71 dst_contents->SetAlpha(alpha_);
72 contents = dst_contents;
77 color_filter_contents->SetAlpha(alpha_);
79 contents = color_filter_contents;
83 return contents->Render(renderer, entity, pass);
95 const Entity& entity)
const {
112 src_contents->RenderToSnapshot(renderer,
117 "VerticesUVContents Snapshot");
118 if (!snapshot.has_value()) {
127 auto coverage = src_contents->GetCoverage(
Entity{});
128 if (!coverage.has_value()) {
131 auto geometry_result = geometry->GetPositionUVBuffer(
132 coverage.value(),
Matrix(), renderer, entity, pass);
134 opts.primitive_type = geometry_result.type;
137 cmd.
BindVertices(std::move(geometry_result.vertex_buffer));
139 VS::FrameInfo frame_info;
140 frame_info.mvp = geometry_result.transform;
141 frame_info.texture_sampler_y_coord_scale =
142 snapshot->texture->GetYCoordScale();
143 frame_info.alpha = alpha_ * snapshot->opacity;
144 VS::BindFrameInfo(cmd, host_buffer.EmplaceUniform(frame_info));
146 FS::BindTextureSampler(cmd, snapshot->texture,
147 renderer.
GetContext()->GetSamplerLibrary()->GetSampler(
148 snapshot->sampler_descriptor));
162 const Entity& entity)
const {
181 auto geometry_result =
182 geometry->GetPositionColorBuffer(renderer, entity, pass);
184 opts.primitive_type = geometry_result.type;
187 cmd.
BindVertices(std::move(geometry_result.vertex_buffer));
189 VS::FrameInfo frame_info;
190 frame_info.mvp = geometry_result.transform;
191 VS::BindFrameInfo(cmd, host_buffer.EmplaceUniform(frame_info));
193 FS::FragInfo frag_info;
194 frag_info.alpha = alpha_;
195 FS::BindFragInfo(cmd, host_buffer.EmplaceUniform(frag_info));