20 std::string basePath = shaderPath;
21 auto hlslPos = basePath.rfind(
".hlsl");
22 if (hlslPos != std::string::npos) {
23 basePath = basePath.substr(0, hlslPos);
25 return compile(basePath +
"_gl.vert", basePath +
"_gl.frag");
29 const std::string& fragPath) {
30 std::string vertSource = ReadFile(vertPath);
31 std::string fragSource = ReadFile(fragPath);
33 if (vertSource.empty() || fragSource.empty()) {
34 SLEAK_ERROR(
"Failed to read shader files: {} and {}", vertPath,
39 GLuint vertShader = 0, fragShader = 0;
41 if (!CompileShaderSource(vertSource, GL_VERTEX_SHADER, vertShader)) {
44 if (!CompileShaderSource(fragSource, GL_FRAGMENT_SHADER, fragShader)) {
45 glDeleteShader(vertShader);
49 m_program = glCreateProgram();
50 glAttachShader(m_program, vertShader);
51 glAttachShader(m_program, fragShader);
52 glLinkProgram(m_program);
55 glGetProgramiv(m_program, GL_LINK_STATUS, &success);
58 glGetProgramInfoLog(m_program, 512,
nullptr, infoLog);
59 SLEAK_ERROR(
"Shader program linking failed: {}", infoLog);
60 glDeleteProgram(m_program);
62 glDeleteShader(vertShader);
63 glDeleteShader(fragShader);
67 glDeleteShader(vertShader);
68 glDeleteShader(fragShader);
83 glShaderSource(shader, 1, &src,
nullptr);