xcal
基于 C++23 的现代图形渲染引擎
载入中...
搜索中...
未找到
shader.cc
浏览该文件的文档.
2//
3#include <fstream>
5
6#define ROLE GL
7#define LABEL Shader
9
11 _gl GLenum type, std::string_view source) {
12 _gl GLuint shader = _gl glCreateShader(type);
13 const char *src = source.data();
14 _gl glShaderSource(shader, 1, &src, nullptr);
15 _gl glCompileShader(shader);
16 _gl GLint ok;
17 _gl glGetShaderiv(shader, _gl GL_COMPILE_STATUS, &ok);
18 if (!ok) {
19 _gl GLint length;
20 _gl glGetShaderiv(shader, _gl GL_INFO_LOG_LENGTH, &length);
21 std::string log(length, '\0');
22 _gl glGetShaderInfoLog(shader, length, nullptr, log.data());
23 _E("Failed to compile shader: " << log);
24 throw std::runtime_error(log);
25 }
26 return Shader{type, shader};
27}
29 _gl GLenum type, std::string_view file_path) {
30 _I("Loading shader from file: " << file_path);
31 std::ifstream file(file_path.data());
32 if (!file.is_open()) {
33 throw std::runtime_error(_STD string("Failed to open file: ") +
34 _STD string(file_path.data()));
35 }
36 std::string source((std::istreambuf_iterator<char>(file)),
37 std::istreambuf_iterator<char>());
38 file.close();
39 _I("Shader source: " << source);
40 return from_source(type, source);
41}
43 if (shader_ != 0) {
44 _gl glDeleteShader(shader_);
45 _I("Shader deleted: " << shader_);
46 }
47 shader_ = 0;
48};
static Shader from_source(gl::GLenum type, std::string_view source)
Definition shader.cc:10
static Shader from_file(gl::GLenum type, std::string_view file_path)
Definition shader.cc:28
#define _STD
Definition public.h:32