Dandelion
2.0.0
A light-weight 3D builder for educational usage
Toggle main menu visibility
载入中...
搜索中...
未找到
preview_renderer.h
浏览该文件的文档.
1
#pragma once
2
3
#include <unordered_map>
4
#include <memory>
5
6
#include <spdlog/spdlog.h>
7
8
#include "
../utils/rendering.hpp
"
9
#include "
../geometry/mesh.hpp
"
10
#include "
../scene/scene.h
"
11
#include "
../platform/gl.hpp
"
12
#include "
../platform/shader.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
*/
27
class
PreviewRenderer
28
{
29
public
:
30
31
/*!
32
* \~chinese
33
* 构造渲染器。因为 OpenGL shader 需要在 context 初始化之后再编译,
34
* 所以 shader 相关的初始化操作需要单独调用 `compile_shaders` 方法。
35
*/
36
PreviewRenderer
();
37
/*! \~chinese 加载并编译编译 OpenGL shader 。 */
38
void
compile_shaders
();
39
/*! \~chinese 删除 OpenGL shader 。 */
40
void
delete_shaders
();
41
/*! \~chinese 释放所有使用了 OpenGL VAO/VBO/EBO 的可渲染对象。 */
42
void
delete_drawable_resources
();
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
55
private
:
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` 。 */
76
void
update_drawable_linesets
(
Scene
& scene);
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::PreviewRenderer
PreviewRenderer()
定义
preview_renderer.cpp:27
PreviewRenderer::fill_drawable_mesh
void fill_drawable_mesh(const Mesh &mesh, GL::DrawableMesh &drawable_mesh)
定义
preview_renderer.cpp:209
PreviewRenderer::compile_shaders
void compile_shaders()
定义
preview_renderer.cpp:32
PreviewRenderer::update_drawable_linesets
void update_drawable_linesets(Scene &scene)
定义
preview_renderer.cpp:312
PreviewRenderer::delete_shaders
void delete_shaders()
定义
preview_renderer.cpp:48
PreviewRenderer::fill_drawable_lineset
void fill_drawable_lineset(const LineSet &lineset, GL::DrawableLineSet &drawable_lineset)
定义
preview_renderer.cpp:245
PreviewRenderer::update_drawable_meshes
void update_drawable_meshes(Scene &scene)
定义
preview_renderer.cpp:270
PreviewRenderer::render
void render(Scene &scene, WorkingMode mode, const DebugOptions &debug_options)
渲染一帧的画面。
定义
preview_renderer.cpp:62
PreviewRenderer::render_selected_object
void render_selected_object(const Scene &scene, WorkingMode mode)
定义
preview_renderer.cpp:367
PreviewRenderer::delete_drawable_resources
void delete_drawable_resources()
定义
preview_renderer.cpp:54
Scene
表示一个包含相机、光源、物体等对象的完整场景。
定义
scene.h:57
gl.hpp
mesh.hpp
rendering.hpp
这个文件定义了一些和渲染(离线渲染或场景预览)相关的常量、枚举等。
WorkingMode
WorkingMode
定义
rendering.hpp:55
scene.h
包含场景的类。
shader.hpp
DebugOptions
辅助调试的 GUI 选项。
定义
rendering.hpp:94
GL::DrawableLineSet
保存 GPU 所需几何数据的渲染线条集。
定义
gl.hpp:250
GL::DrawableMesh
保存 GPU 所需几何数据的渲染 Mesh 。
定义
gl.hpp:219
LineSet
用于同步线条渲染数据的内存对象。
定义
mesh.hpp:72
Mesh
用于同步渲染数据的三角形 Mesh 。
定义
mesh.hpp:28
src
render
preview_renderer.h
制作者
1.18.0