|
|
|
@ -4,6 +4,7 @@
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include <string>
|
|
|
|
|
#include <vector>
|
|
|
|
|
#include <glad/glad.h>
|
|
|
|
|
#include "common/assert.h"
|
|
|
|
@ -11,6 +12,27 @@
|
|
|
|
|
|
|
|
|
|
namespace GLShader {
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Utility function to log the source code of a list of shaders.
|
|
|
|
|
* @param shaders The OpenGL shaders whose source we will print.
|
|
|
|
|
*/
|
|
|
|
|
template <typename... T>
|
|
|
|
|
void LogShaderSource(T... shaders) {
|
|
|
|
|
auto shader_list = {shaders...};
|
|
|
|
|
|
|
|
|
|
for (const auto& shader : shader_list) {
|
|
|
|
|
if (shader == 0)
|
|
|
|
|
continue;
|
|
|
|
|
|
|
|
|
|
GLint source_length;
|
|
|
|
|
glGetShaderiv(shader, GL_SHADER_SOURCE_LENGTH, &source_length);
|
|
|
|
|
|
|
|
|
|
std::string source(source_length, ' ');
|
|
|
|
|
glGetShaderSource(shader, source_length, nullptr, &source[0]);
|
|
|
|
|
NGLOG_INFO(Render_OpenGL, "Shader source {}", source);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Utility function to create and compile an OpenGL GLSL shader
|
|
|
|
|
* @param source String of the GLSL shader program
|
|
|
|
@ -55,6 +77,11 @@ GLuint LoadProgram(bool separable_program, T... shaders) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (result == GL_FALSE) {
|
|
|
|
|
// There was a problem linking the shader, print the source for debugging purposes.
|
|
|
|
|
LogShaderSource(shaders...);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ASSERT_MSG(result == GL_TRUE, "Shader not linked");
|
|
|
|
|
|
|
|
|
|
((shaders == 0 ? (void)0 : glDetachShader(program_id, shaders)), ...);
|
|
|
|
|