Dandelion 1.1.1
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 Shader(const std::shared_ptr<spdlog::logger>& logger);
27 ~Shader();
28 bool load_vertex_shader(const char* file_path);
29 bool load_fragment_shader(const char* file_path);
30 bool compile();
31 void use() const;
32 /*! \~chinese
33 * 设置 shader 中指定的 uniform。这个函数只在 cpp 文件中特化,传入不支持的类型会在编译期报错。
34 * \tparam T CPU 端的变量类型
35 * \param name uniform 的名称
36 * \param value CPU 端准备好的值
37 * \returns 是否设置成功
38 */
39 template<typename T>
40 bool set_uniform(const char* name, const T& value) const;
41 unsigned int id;
42
43private:
44 std::shared_ptr<spdlog::logger> logger;
45 std::unique_ptr<char[]> vertex_shader_source;
46 std::unique_ptr<char[]> fragment_shader_source;
47};
48
49#endif // DANDELION_PLATFORM_SHADER_HPP
bool set_uniform(const char *name, const T &value) const