Dandelion 2.0.0
A light-weight 3D builder for educational usage
载入中...
搜索中...
未找到
preview_renderer.h
浏览该文件的文档.
1#pragma once
2
3#include <unordered_map>
4#include <memory>
5
6#include <spdlog/spdlog.h>
7
10#include "../scene/scene.h"
11#include "../platform/gl.hpp"
13
14/*!
15 * \file render/preview_renderer.h
16 * \ingroup rendering
17 * \~chinese
18 * \brief 用于实时预览的渲染器。
19 */
20
21/*!
22 * \~chinese
23 * \brief 用于实时预览的渲染器。
24 *
25 * `PreviewRenderer` 在形式上与离线渲染器相似,但并不受 `RenderEngine` 的管理。
26 */
28{
29public:
30
31 /*!
32 * \~chinese
33 * 构造渲染器。因为 OpenGL shader 需要在 context 初始化之后再编译,
34 * 所以 shader 相关的初始化操作需要单独调用 `compile_shaders` 方法。
35 */
37 /*! \~chinese 加载并编译编译 OpenGL shader 。 */
38 void compile_shaders();
39 /*! \~chinese 删除 OpenGL shader 。 */
40 void delete_shaders();
41 /*! \~chinese 释放所有使用了 OpenGL VAO/VBO/EBO 的可渲染对象。 */
43 /*!
44 * \~chinese
45 * \brief 渲染一帧的画面。
46 *
47 * 该方法会按需更新 GPU 数据、发起所有的 draw call ,但不会交换 back buffer 与
48 * front buffer ,因此不会直接引发画面更新。
49 * \param scene 渲染的场景
50 * \param mode 当前的工作模式,这决定了场景的渲染方式。
51 * \param debug_options 当前的调试选项,这决定了用于调试的特殊图元是否被渲染。
52 */
53 void render(Scene& scene, WorkingMode mode, const DebugOptions& debug_options);
54
55private:
56
57 /*!
58 * \~chinese
59 * 将 `Mesh` 对象中的几何数据同步到 `GL::DrawableMesh` 中,并将数据传输到显存。
60 * 该方法不会重置 `mesh` 的 `modified` 脏标记。
61 * \param mesh 数据源 Mesh
62 * \param drawable_mesh 要填充并传输到显存的渲染 Mesh
63 */
64 void fill_drawable_mesh(const Mesh& mesh, GL::DrawableMesh& drawable_mesh);
65 /*!
66 * \~chinese
67 * 将 `LineSet` 对象中的几何数据同步到 `GL::DrawableLineSet` 中,并将数据传输到显存。
68 * 该方法不会重置 `lineset` 的 `modified` 脏标记。
69 * \param lineset 数据源线条集
70 * \param drawable_lineset 要填充并传输到显存的渲染线条集
71 */
72 void fill_drawable_lineset(const LineSet& lineset, GL::DrawableLineSet& drawable_lineset);
73 /*! \~chinese 将场景中所有的 `Mesh` 几何数据同步到 `GL::DrawableMesh` 。 */
74 void update_drawable_meshes(Scene& scene);
75 /*! \~chinese 将场景中所有的 `LineSet` 几何数据同步到 `GL::DrawableLineSet` 。 */
77 /*!
78 * \~chinese
79 * 有物体被选中时,渲染这个物体的线框作为标记。
80 */
81 void render_selected_object(const Scene& scene, WorkingMode mode);
82
83 std::unique_ptr<Shader> primitive_shader;
84 std::unique_ptr<Shader> phong_shader;
85 std::unordered_map<const Mesh*, std::unique_ptr<GL::DrawableMesh>> general_meshes;
86 std::unordered_map<const LineSet*, std::unique_ptr<GL::DrawableLineSet>> general_linesets;
87 std::unordered_map<const Mesh*, std::unique_ptr<GL::DrawableMesh>> overlay_meshes;
88 std::unordered_map<const LineSet*, std::unique_ptr<GL::DrawableLineSet>> overlay_linesets;
89 std::shared_ptr<spdlog::logger> logger;
90};
PreviewRenderer()
定义 preview_renderer.cpp:27
void fill_drawable_mesh(const Mesh &mesh, GL::DrawableMesh &drawable_mesh)
定义 preview_renderer.cpp:209
void compile_shaders()
定义 preview_renderer.cpp:32
void update_drawable_linesets(Scene &scene)
定义 preview_renderer.cpp:312
void delete_shaders()
定义 preview_renderer.cpp:48
void fill_drawable_lineset(const LineSet &lineset, GL::DrawableLineSet &drawable_lineset)
定义 preview_renderer.cpp:245
void update_drawable_meshes(Scene &scene)
定义 preview_renderer.cpp:270
void render(Scene &scene, WorkingMode mode, const DebugOptions &debug_options)
渲染一帧的画面。
定义 preview_renderer.cpp:62
void render_selected_object(const Scene &scene, WorkingMode mode)
定义 preview_renderer.cpp:367
void delete_drawable_resources()
定义 preview_renderer.cpp:54
表示一个包含相机、光源、物体等对象的完整场景。
定义 scene.h:57
这个文件定义了一些和渲染(离线渲染或场景预览)相关的常量、枚举等。
WorkingMode
定义 rendering.hpp:55
包含场景的类。
辅助调试的 GUI 选项。
定义 rendering.hpp:94
保存 GPU 所需几何数据的渲染线条集。
定义 gl.hpp:250
保存 GPU 所需几何数据的渲染 Mesh 。
定义 gl.hpp:219
用于同步线条渲染数据的内存对象。
定义 mesh.hpp:72
用于同步渲染数据的三角形 Mesh 。
定义 mesh.hpp:28