blob: 0c80a632b0cfd134f92a22e0e2aa292e04574d19 [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 <memory>
#include "impeller/core/formats.h"
#include "impeller/entity/contents/content_context.h"
#include "impeller/renderer/command.h"
#include "impeller/renderer/render_pass.h"
namespace impeller {
CheckerboardContents::CheckerboardContents() = default;
CheckerboardContents::~CheckerboardContents() = default;
bool CheckerboardContents::Render(const ContentContext& renderer,
const Entity& entity,
RenderPass& pass) const {
auto& host_buffer = pass.GetTransientsBuffer();
using VS = CheckerboardPipeline::VertexShader;
using FS = CheckerboardPipeline::FragmentShader;
Command cmd;
cmd.label = "Checkerboard";
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;
cmd.pipeline = renderer.GetCheckerboardPipeline(options);
VertexBufferBuilder<typename VS::PerVertexData> vtx_builder;
vtx_builder.AddVertices({
{Point(-1, -1)},
{Point(1, -1)},
{Point(-1, 1)},
{Point(1, 1)},
});
cmd.BindVertices(vtx_builder.CreateVertexBuffer(host_buffer));
FS::FragInfo frag_info;
frag_info.color = color_;
frag_info.square_size = square_size_;
FS::BindFragInfo(cmd, host_buffer.EmplaceUniform(frag_info));
pass.AddCommand(cmd);
return true;
}
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