Unravel Engine C++ Reference
Loading...
Searching...
No Matches
gizmos_renderer.h
Go to the documentation of this file.
1#pragma once
2
3#include "gizmos/gizmos.h"
4#include <base/basetypes.hpp>
5#include <context/context.hpp>
8#include <engine/ecs/ecs.h>
9
10namespace unravel
11{
12class camera;
13class gpu_program;
15{
16public:
17 auto init(rtti::context& ctx) -> bool;
18 auto deinit(rtti::context& ctx) -> bool;
19
20 void on_frame_render(rtti::context& ctx, scene& scn, entt::handle camera_entity, dd_2d_raii& dd_2d);
21
22private:
23 void draw_grid(uint32_t pass_id, const camera& cam, const editing_manager::grid& grid);
24 void draw_selection_gizmos(rtti::context& ctx, const camera& camera, gfx::dd_raii& dd, dd_2d_raii& dd_2d);
25 void draw_icon_gizmos(rtti::context& ctx, scene& scn, const camera& camera, gfx::dd_raii& dd);
26 auto draw_selection_mask_pass(rtti::context& ctx, const camera& camera, const gfx::frame_buffer::ptr& selection_mask) -> bool;
27 void draw_outline_pass(const gfx::frame_buffer::ptr& selection_mask, const gfx::frame_buffer::ptr& obuffer, gfx::dd_raii& dd);
28 void draw_selection_wireframe_pass(rtti::context& ctx, const camera& camera, const gfx::frame_buffer::ptr& obuffer);
30 struct wireframe_program : uniforms_cache
31 {
32 void cache_uniforms()
33 {
34 cache_uniform(program.get(), u_wf_params, "u_wf_params", gfx::uniform_type::Vec4, 3);
35 }
36
37 gfx::program::uniform_ptr u_wf_params;
38 std::unique_ptr<gpu_program> program;
39
40 } wireframe_program_, wireframe_program_skinned_;
41
42 std::unique_ptr<gpu_program> grid_program_;
43
44 struct flat_to_r_program : uniforms_cache
45 {
46 void cache_uniforms()
47 {
48 }
49 std::unique_ptr<gpu_program> program;
50
51 } outline_mask_program_, outline_mask_program_skinned_;
52
53 struct outline_program : uniforms_cache
54 {
55 void cache_uniforms()
56 {
57 cache_uniform(program.get(), s_tex, "s_tex", gfx::uniform_type::Sampler);
58 cache_uniform(program.get(), u_data, "u_data", gfx::uniform_type::Vec4);
59 cache_uniform(program.get(), u_outline_color, "u_outline_color", gfx::uniform_type::Vec4);
60 }
61
64 gfx::program::uniform_ptr u_outline_color;
65
66 std::unique_ptr<gpu_program> program;
67
68 } outline_program_;
69
70 void resize_selection_mask_rt(uint16_t width, uint16_t height)
71 {
72 if(selection_mask_ && selection_mask_->get_size().width == width &&
73 selection_mask_->get_size().height == height)
74 {
75 return;
76 }
77
78 auto tex = std::make_shared<gfx::texture>(width,
79 height,
80 false, // no mip
81 1, // single layer
82 bgfx::TextureFormat::R8,
83 BGFX_TEXTURE_RT);
84
85 std::vector<gfx::texture::ptr> attachments{tex};
86 selection_mask_ = std::make_shared<gfx::frame_buffer>(attachments);
87 }
88
89 gfx::frame_buffer::ptr selection_mask_;
90
91 std::shared_ptr<int> sentinel_ = std::make_shared<int>(0);
92};
93} // namespace unravel
uint32_t width
uint32_t height
Class representing a camera. Contains functionality for manipulating and updating a camera....
Definition camera.h:62
void on_frame_render(rtti::context &ctx, scene &scn, entt::handle camera_entity, dd_2d_raii &dd_2d)
auto init(rtti::context &ctx) -> bool
auto deinit(rtti::context &ctx) -> bool
std::shared_ptr< uniform > uniform_ptr
Definition program.h:19
Represents a scene in the ACE framework, managing entities and their relationships.
Definition scene.h:70
Structure for caching uniforms.
void cache_uniform(gpu_program *program, gfx::program::uniform_ptr &uniform, const hpp::string_view &name, gfx::uniform_type type, uint16_t num=1)
Caches a uniform in the GPU program.