diff --git a/src/main.c b/src/main.c index 3bbb028..0052472 100644 --- a/src/main.c +++ b/src/main.c @@ -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; - - GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER); - glShaderSource(vertexShader, 1, &vertexTextConst, &vertexShader_glsl_len); - glCompileShader(vertexShader); - - +void compileShader(const GLchar *shaderSource, GLuint* shader, GLenum shaderType) { + // Create the shader object + *shader = glCreateShader(shaderType); + + // 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; +void init(void) { + //IDEE: shader in array speichern und dann so kompilieren etc + GLuint vertexShader; + GLuint fragmentShader; + GLint status; - // 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); - } + 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) {