Capsulation of shader compilation (linking and runtime adjustments WIP)

This commit is contained in:
JonasJan2 2024-06-21 12:57:47 +02:00
parent 3b5f9816f4
commit 20fcc2af63
1 changed files with 27 additions and 30 deletions

View File

@ -140,51 +140,48 @@ void renderNode(SceneNode* node) {
draw_object(node->model->objectData);
}
void init(void) {
// create and compile vertex shader
const GLchar *vertexTextConst = vertexShader_glsl;
void compileShader(const GLchar *shaderSource, GLuint* shader, GLenum shaderType) {
// Create the shader object
*shader = glCreateShader(shaderType);
GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexShader, 1, &vertexTextConst, &vertexShader_glsl_len);
glCompileShader(vertexShader);
// Attach the shader source code to the shader object
glShaderSource(*shader, 1, &shaderSource, NULL);
// Compile the shader
glCompileShader(*shader);
// Check the compile status
GLint status;
glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &status);
glGetShaderiv(*shader, GL_COMPILE_STATUS, &status);
// If compilation failed, retrieve and print the error log
if (!status) {
printf("Error compiling vertex shader: ");
printf("Error compiling shader: ");
GLchar infoLog[1024];
glGetShaderInfoLog(vertexShader, 1024, NULL, infoLog);
printf("%s",infoLog);
glGetShaderInfoLog(*shader, 1024, NULL, infoLog);
printf("%s\n", infoLog);
exit(1);
}
vertexTextConst = NULL;
// create and compile fragment shader
const GLchar *fragmentTextConst = fragmentShader_glsl;
GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentShader, 1, &fragmentTextConst, &fragmentShader_glsl_len);
glCompileShader(fragmentShader);
glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &status);
if (!status) {
printf("Error compiling fragment shader: ");
GLchar infoLog[1024];
glGetShaderInfoLog(fragmentShader, 1024, NULL, infoLog);
printf("%s",infoLog);
exit(1);
}
void init(void) {
//IDEE: shader in array speichern und dann so kompilieren etc
GLuint vertexShader;
GLuint fragmentShader;
GLint status;
compileShader(vertexShader_glsl, &vertexShader, GL_VERTEX_SHADER);
compileShader(fragmentShader_glsl, &fragmentShader, GL_FRAGMENT_SHADER);
// create and link shader program
program = glCreateProgram();
//das müsste evtl noch angepasst werden
glAttachShader(program, vertexShader);
glAttachShader(program, fragmentShader);
glLinkProgram(program);
glGetProgramiv(program, GL_LINK_STATUS, &status);
if (!status) {