1#ifndef TATOOINE_RENDERING_LINE_H
2#define TATOOINE_RENDERING_LINE_H
17 "layout(location = 0) in vec3 pos;\n"
18 "uniform mat4 projection_matrix;\n"
19 "uniform mat4 modelview_matrix;\n"
20 "//------------------------------------------------------------------\n"
22 " gl_Position = projection_matrix * modelview_matrix * vec4(pos, 1);\n"
26 "uniform vec3 color;\n"
27 "layout(location = 0) out vec4 fragout;\n"
28 "//------------------------------------------------------------------\n"
30 " fragout = vec4(color, 1);\n"
40 auto set_color(GLfloat
const r, GLfloat
const g, GLfloat
const b) {
44template <
typename Real>
59 gpu_mapping[i * 2] = i;
60 gpu_mapping[i * 2 + 1] = i + 1;
66template <
typename Real>
69 size_t num_vertices = 0;
70 size_t num_indices = 0;
71 for (
auto const& l : lines) {
72 num_vertices += l.vertices().size();
73 num_indices += (l.vertices().size() - 1) * 2;
80 for (
auto const& l : lines) {
81 for (
auto const v : l.vertices()) {
83 gpu_mapping[i++] =
vec3f{x};
92 for (
auto const& l : lines) {
93 for (
size_t j = 0; j < l.vertices().size() - 1; ++i, ++j) {
95 gpu_mapping[k++] = i + 1;
103template <
typename Real,
size_t N>
109 for (
auto const& l : lines) {
110 for (
auto const v : l.vertices()) {
114 auto gpu_data =
to_gpu(lines);
116 win.camera_controller().look_at(center_pos +
vec3f{2, 2, 2}, center_pos);
118 shader.set_projection_matrix(win.camera_controller().projection_matrix());
121 win.render_loop([&](
auto const ) {
123 shader.set_modelview_matrix(win.camera_controller().view_matrix());
124 shader.set_projection_matrix(win.camera_controller().projection_matrix());
125 if (ImGui::ColorEdit3(
"color", col.data())) {
126 shader.set_color(col(0), col(1), col(2));
128 gpu_data.draw_lines();
132template <
typename Real,
size_t N>
141 auto gpu_data =
to_gpu(l);
143 win.camera_controller().look_at(center_pos +
vec{2, 2, 2}, center_pos);
145 shader.set_projection_matrix(win.camera_controller().projection_matrix());
147 bool my_tool_active =
true;
148 win.render_loop([&](
auto const dt) {
150 shader.set_modelview_matrix(win.camera_controller().view_matrix());
151 shader.set_projection_matrix(win.camera_controller().projection_matrix());
152 gpu_data.draw_lines();
Definition: indexeddata.h:13
auto indexbuffer() -> auto &
Definition: indexeddata.h:145
auto vertexbuffer() -> auto &
Definition: indexeddata.h:148
DLL_API void set_uniform(const std::string &, GLfloat)
DLL_API void bind() const
DLL_API void set_uniform_mat4(const std::string &, GLfloat const *)
constexpr auto data() -> ValueType *
Definition: static_multidim_array.h:260
DLL_API auto clear_color(GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha) -> void
DLL_API auto clear_color_depth_buffer() -> void
auto interactive(std::vector< line< Real, N > > const &lines)
Definition: line.h:104
auto to_gpu(line< Real, 3 > const &l)
Definition: line.h:45
auto size(vec< ValueType, N > const &v)
Definition: vec.h:148
Definition: axis_aligned_bounding_box.h:103
auto constexpr center() const
Definition: axis_aligned_bounding_box.h:186
Definition: shadersource.h:8
auto vertices() const
Definition: line.h:250
Definition: first_person_window.h:15
auto set_projection_matrix(mat4f const &P)
Definition: line.h:34
auto set_modelview_matrix(mat4f const &MV)
Definition: line.h:37
auto set_color(GLfloat const r, GLfloat const g, GLfloat const b)
Definition: line.h:40
line_shader()
Definition: line.h:14