16 using PipelineBuilderCallback =
24 std::unique_ptr<ComplexRoundedSuperellipseContents>
29 std::optional<StrokeParameters> stroke) {
30 return std::unique_ptr<ComplexRoundedSuperellipseContents>(
32 color, bounds, round_superellipse_params, stroke));
35 ComplexRoundedSuperellipseContents::ComplexRoundedSuperellipseContents(
39 std::optional<StrokeParameters> stroke)
42 round_superellipse_params_(round_superellipse_params),
67 Point top_right_center_relative = top_right.
offset - center;
68 Point bottom_right_center_relative = bottom_right.
offset - center;
69 Point bottom_left_center_relative = bottom_left.
offset - center;
70 Point top_left_center_relative = top_left.
offset - center;
74 VS::FrameInfo frame_info;
75 FS::FragInfo frag_info;
78 frag_info.center = center;
79 frag_info.size = size;
80 frag_info.stroked = stroke_ ? 1.0f : 0.0f;
81 frag_info.stroke_width = stroke_ ? stroke_->width : 0.0f;
83 frag_info.superellipse_degrees_top =
86 frag_info.superellipse_degrees_right =
89 frag_info.superellipse_semi_axes_top =
92 frag_info.superellipse_semi_axes_right =
99 frag_info.angle_spans_right =
104 frag_info.octant_offsets_c =
109 frag_info.radii_width =
112 frag_info.radii_height =
115 frag_info.circle_centers_top_x =
118 frag_info.circle_centers_top_y =
121 frag_info.circle_centers_right_x =
Vector4(
124 frag_info.circle_centers_right_y =
Vector4(
127 frag_info.superellipse_scales_x =
130 frag_info.superellipse_scales_y =
133 frag_info.quadrant_centers_x =
134 Vector4(bottom_right_center_relative.
x, top_right_center_relative.
x,
135 bottom_left_center_relative.
x, top_left_center_relative.
x);
136 frag_info.quadrant_centers_y =
137 Vector4(bottom_right_center_relative.
y, top_right_center_relative.
y,
138 bottom_left_center_relative.
y, top_left_center_relative.
y);
139 frag_info.quadrant_splits =
145 auto geometry_result =
153 return ColorSourceContents::DrawGeometry<VS>(
154 this,
GetGeometry(), renderer, entity, pass, pipeline_callback,
157 [&frag_info, &data_host_buffer](
RenderPass& pass) {
158 FS::BindFragInfo(pass, data_host_buffer.EmplaceUniform(frag_info));
164 const Entity& entity)
const {
169 return geometry_.get();
Scalar GetOpacityFactor() const
Get the opacity factor for this color source.
std::function< PipelineRef(ContentContextOptions)> PipelineBuilderCallback
bool Render(const ContentContext &renderer, const Entity &entity, RenderPass &pass) const override
static std::unique_ptr< ComplexRoundedSuperellipseContents > Make(Color color, const Rect &bounds, const RoundSuperellipseParam &round_superellipse_params, std::optional< StrokeParameters > stroke)
const Geometry * GetGeometry() const override
Get the geometry that this contents will use to render.
std::optional< Rect > GetCoverage(const Entity &entity) const override
Get the area of the render pass that will be affected when this contents is rendered.
PipelineRef GetComplexRSEPipeline(ContentContextOptions opts) const
HostBuffer & GetTransientsDataBuffer() const
Retrieve the current host buffer for transient storage of other non-index data.
const Matrix & GetTransform() const
Get the global transform matrix for this Entity.
static std::unique_ptr< Geometry > MakeRect(const Rect &rect)
virtual GeometryResult GetPositionBuffer(const ContentContext &renderer, const Entity &entity, RenderPass &pass) const =0
virtual std::optional< Rect > GetCoverage(const Matrix &transform) const =0
The coverage rectangle of this geometry, transformed by the transform argument.
Render passes encode render commands directed as one specific render target into an underlying comman...
VertexShader_ VertexShader
FragmentShader_ FragmentShader
raw_ptr< Pipeline< PipelineDescriptor > > PipelineRef
A raw ptr to a pipeline object.
LinePipeline::FragmentShader FS
LinePipeline::VertexShader VS
constexpr Color WithAlpha(Scalar new_alpha) const
constexpr TPoint Abs() const
constexpr TRect< T > Expand(T left, T top, T right, T bottom) const
Returns a rectangle with expanded edges. Negative expansion results in shrinking.
constexpr TSize< Type > GetSize() const
Returns the size of the rectangle which may be negative in either width or height and may have been c...
constexpr Point GetCenter() const
Get the center point as a |Point|.