1#pragma once
2
3#include "taichi/program/field_info.h"
4#include "taichi/ui/common/scene_base.h"
5#include "taichi/ui/common/renderable_info.h"
6#include "taichi/ui/utils/utils.h"
7
8namespace taichi::lang {
9
10class Texture;
11
12} // namespace taichi::lang
13
14namespace taichi::ui {
15
16struct SetImageInfo {
17 FieldInfo img;
18};
19
20struct TrianglesInfo {
21 RenderableInfo renderable_info;
22 glm::vec3 color;
23};
24
25struct CirclesInfo {
26 RenderableInfo renderable_info;
27 glm::vec3 color;
28 float radius{0};
29};
30
31struct LinesInfo {
32 RenderableInfo renderable_info;
33 glm::vec3 color;
34 float width{0};
35};
36
37class CanvasBase {
38 public:
39 virtual void set_background_color(const glm::vec3 &color) = 0;
40 virtual void set_image(const SetImageInfo &info) = 0;
41 virtual void set_image(taichi::lang::Texture *tex) = 0;
42 virtual void triangles(const TrianglesInfo &info) = 0;
43 virtual void circles(const CirclesInfo &info) = 0;
44 virtual void lines(const LinesInfo &info) = 0;
45 virtual void scene(SceneBase *scene) = 0;
46 virtual ~CanvasBase() = default;
47};
48
49} // namespace taichi::ui
50