1 | #pragma once |
---|---|
2 | |
3 | #include <iostream> |
4 | #include <fstream> |
5 | #include <stdexcept> |
6 | #include <algorithm> |
7 | #include <chrono> |
8 | #include <vector> |
9 | #include <cstring> |
10 | #include <cstdlib> |
11 | #include <cstdint> |
12 | #include <array> |
13 | #include <optional> |
14 | #include <set> |
15 | #include "taichi/ui/utils/utils.h" |
16 | #include "taichi/ui/backends/vulkan/vertex.h" |
17 | |
18 | #include "taichi/ui/backends/vulkan/app_context.h" |
19 | #include "taichi/ui/backends/vulkan/swap_chain.h" |
20 | #include "taichi/ui/backends/vulkan/renderable.h" |
21 | #include "taichi/program/field_info.h" |
22 | #include "taichi/ui/backends/vulkan/scene.h" |
23 | |
24 | namespace taichi::ui { |
25 | |
26 | namespace vulkan { |
27 | |
28 | class SceneLines final : public Renderable { |
29 | public: |
30 | SceneLines(AppContext *app_context, VertexAttributes vbo_attrs); |
31 | |
32 | void update_data(const SceneLinesInfo &info, const Scene &scene); |
33 | |
34 | void record_prepass_this_frame_commands( |
35 | taichi::lang::CommandList *command_list) override; |
36 | |
37 | void record_this_frame_commands( |
38 | taichi::lang::CommandList *command_list) override; |
39 | |
40 | private: |
41 | struct UniformBufferObject { |
42 | Scene::SceneUniformBuffer scene; |
43 | alignas(16) glm::vec3 color; |
44 | float line_width; |
45 | int per_vertex_color_offset; |
46 | int vertex_stride; |
47 | int start_vertex; |
48 | int start_index; |
49 | int num_vertices; |
50 | int is_indexed; |
51 | float aspect_ratio; |
52 | }; |
53 | |
54 | void create_graphics_pipeline() final; |
55 | |
56 | uint64_t lines_count_{0}; |
57 | |
58 | taichi::lang::Pipeline *quad_expand_pipeline_{nullptr}; |
59 | |
60 | std::unique_ptr<taichi::lang::DeviceAllocationGuard> vbo_translated_{nullptr}; |
61 | std::unique_ptr<taichi::lang::DeviceAllocationGuard> ibo_translated_{nullptr}; |
62 | }; |
63 | |
64 | } // namespace vulkan |
65 | |
66 | } // namespace taichi::ui |
67 |