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); draw_object(node->model->objectData);
} }
void init(void) { void compileShader(const GLchar *shaderSource, GLuint* shader, GLenum shaderType) {
// create and compile vertex shader // Create the shader object
const GLchar *vertexTextConst = vertexShader_glsl; *shader = glCreateShader(shaderType);
GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER); // Attach the shader source code to the shader object
glShaderSource(vertexShader, 1, &vertexTextConst, &vertexShader_glsl_len); glShaderSource(*shader, 1, &shaderSource, NULL);
glCompileShader(vertexShader);
// Compile the shader
glCompileShader(*shader);
// Check the compile status
GLint 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) { if (!status) {
printf("Error compiling vertex shader: "); printf("Error compiling shader: ");
GLchar infoLog[1024]; GLchar infoLog[1024];
glGetShaderInfoLog(vertexShader, 1024, NULL, infoLog); glGetShaderInfoLog(*shader, 1024, NULL, infoLog);
printf("%s",infoLog); printf("%s\n", infoLog);
exit(1); 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 // create and link shader program
program = glCreateProgram(); program = glCreateProgram();
//das müsste evtl noch angepasst werden
glAttachShader(program, vertexShader); glAttachShader(program, vertexShader);
glAttachShader(program, fragmentShader); glAttachShader(program, fragmentShader);
glLinkProgram(program); glLinkProgram(program);
glGetProgramiv(program, GL_LINK_STATUS, &status); glGetProgramiv(program, GL_LINK_STATUS, &status);
if (!status) { if (!status) {