Dandelion
2.0.0
A light-weight 3D builder for educational usage
Toggle main menu visibility
载入中...
搜索中...
未找到
shader.hpp
浏览该文件的文档.
1
#ifndef DANDELION_PLATFORM_SHADER_HPP
2
#define DANDELION_PLATFORM_SHADER_HPP
3
4
/*!
5
* \file platform/shader.hpp
6
*/
7
8
#include <memory>
9
10
#include <spdlog/spdlog.h>
11
12
/*!
13
* \ingroup platform
14
* \~chinese
15
* \brief 对 GLSL Shader 的简单封装。
16
*
17
* 一个 Shade 对象在构造时并不直接加载 GLSL 代码,正确的使用顺序是:
18
* 1. 调用 `load_vertex_shader`
19
* 2. 调用 `load_fragment_shader`
20
* 3. 调用 `compile` 编译 Shader
21
* 4. 前三个步骤都返回 `true` 的前提下,调用 `use` 使用 Shader
22
*/
23
class
Shader
24
{
25
public
:
26
27
Shader(
const
std::shared_ptr<spdlog::logger>& logger);
28
~Shader();
29
bool
load_vertex_shader(
const
char
* file_path);
30
bool
load_fragment_shader(
const
char
* file_path);
31
bool
compile();
32
void
use()
const
;
33
/*! \~chinese
34
* 设置 shader 中指定的 uniform。这个函数只在 cpp 文件中特化,传入不支持的类型会在编译期报错。
35
* \tparam T CPU 端的变量类型
36
* \param name uniform 的名称
37
* \param value CPU 端准备好的值
38
* \returns 是否设置成功
39
*/
40
template
<
typename
T>
41
bool
set_uniform
(
const
char
* name,
const
T& value)
const
;
42
unsigned
int
id;
43
44
private
:
45
46
std::shared_ptr<spdlog::logger> logger;
47
std::unique_ptr<char[]> vertex_shader_source;
48
std::unique_ptr<char[]> fragment_shader_source;
49
};
50
51
#endif
// DANDELION_PLATFORM_SHADER_HPP
Shader::set_uniform
bool set_uniform(const char *name, const T &value) const
src
platform
shader.hpp
制作者
1.18.0