blob: 80a11e4d0f683527e8eef0270cbaaa8629955b53 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "impeller/entity/contents/checkerboard_contents.h"
#include "impeller/core/formats.h"
#include "impeller/entity/contents/content_context.h"
#include "impeller/renderer/render_pass.h"
#include "impeller/renderer/vertex_buffer_builder.h"
namespace impeller {
CheckerboardContents::CheckerboardContents() = default;
CheckerboardContents::~CheckerboardContents() = default;
bool CheckerboardContents::Render(const ContentContext& renderer,
const Entity& entity,
RenderPass& pass) const {
auto& host_buffer = renderer.GetTransientsBuffer();
using VS = CheckerboardPipeline::VertexShader;
using FS = CheckerboardPipeline::FragmentShader;
auto options = OptionsFromPass(pass);
options.blend_mode = BlendMode::kSourceOver;
options.stencil_compare = CompareFunction::kAlways; // Ignore all clips.
options.stencil_operation = StencilOperation::kKeep;
options.primitive_type = PrimitiveType::kTriangleStrip;
VertexBufferBuilder<typename VS::PerVertexData> vtx_builder;
vtx_builder.AddVertices({
{Point(-1, -1)},
{Point(1, -1)},
{Point(-1, 1)},
{Point(1, 1)},
});
pass.SetCommandLabel("Checkerboard");
pass.SetPipeline(renderer.GetCheckerboardPipeline(options));
pass.SetVertexBuffer(vtx_builder.CreateVertexBuffer(host_buffer));
FS::FragInfo frag_info;
frag_info.color = color_;
frag_info.square_size = square_size_;
FS::BindFragInfo(pass, host_buffer.EmplaceUniform(frag_info));
return pass.Draw().ok();
}
std::optional<Rect> CheckerboardContents::GetCoverage(
const Entity& entity) const {
return std::nullopt;
}
void CheckerboardContents::SetColor(Color color) {
color_ = color;
}
void CheckerboardContents::SetSquareSize(Scalar square_size) {
square_size_ = square_size;
}
} // namespace impeller