Dandelion 1.1.2
A light-weight 3D builder for educational usage
载入中...
搜索中...
未找到
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 */
23class Shader
24{
25public:
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
44private:
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
bool set_uniform(const char *name, const T &value) const