aboutsummaryrefslogtreecommitdiff
path: root/pugl/examples/shader_utils.h
diff options
context:
space:
mode:
Diffstat (limited to 'pugl/examples/shader_utils.h')
-rw-r--r--pugl/examples/shader_utils.h123
1 files changed, 61 insertions, 62 deletions
diff --git a/pugl/examples/shader_utils.h b/pugl/examples/shader_utils.h
index 217ba47..2575f47 100644
--- a/pugl/examples/shader_utils.h
+++ b/pugl/examples/shader_utils.h
@@ -23,45 +23,44 @@
#include <stdlib.h>
#include <string.h>
-typedef struct
-{
- GLuint vertexShader;
- GLuint fragmentShader;
- GLuint program;
+typedef struct {
+ GLuint vertexShader;
+ GLuint fragmentShader;
+ GLuint program;
} Program;
static GLuint
compileShader(const char* header, const char* source, const GLenum type)
{
- const GLchar* sources[] = {header, source};
- const GLint lengths[] = {(GLint)strlen(header), (GLint)strlen(source)};
- GLuint shader = glCreateShader(type);
- glShaderSource(shader, 2, sources, lengths);
- glCompileShader(shader);
-
- int status = 0;
- glGetShaderiv(shader, GL_COMPILE_STATUS, &status);
- if (status == GL_FALSE) {
- GLint length = 0;
- glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &length);
-
- char* log = (char*)calloc(1, (size_t)length);
- glGetShaderInfoLog(shader, length, &length, log);
- fprintf(stderr, "error: Failed to compile shader (%s)\n", log);
- free(log);
-
- return 0;
- }
-
- return shader;
+ const GLchar* sources[] = {header, source};
+ const GLint lengths[] = {(GLint)strlen(header), (GLint)strlen(source)};
+ GLuint shader = glCreateShader(type);
+ glShaderSource(shader, 2, sources, lengths);
+ glCompileShader(shader);
+
+ int status = 0;
+ glGetShaderiv(shader, GL_COMPILE_STATUS, &status);
+ if (status == GL_FALSE) {
+ GLint length = 0;
+ glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &length);
+
+ char* log = (char*)calloc(1, (size_t)length);
+ glGetShaderInfoLog(shader, length, &length, log);
+ fprintf(stderr, "error: Failed to compile shader (%s)\n", log);
+ free(log);
+
+ return 0;
+ }
+
+ return shader;
}
static void
deleteProgram(Program program)
{
- glDeleteShader(program.vertexShader);
- glDeleteShader(program.fragmentShader);
- glDeleteProgram(program.program);
+ glDeleteShader(program.vertexShader);
+ glDeleteShader(program.fragmentShader);
+ glDeleteProgram(program.program);
}
static Program
@@ -69,39 +68,39 @@ compileProgram(const char* headerSource,
const char* vertexSource,
const char* fragmentSource)
{
- static const Program nullProgram = {0, 0, 0};
-
- Program program = {
- compileShader(headerSource, vertexSource, GL_VERTEX_SHADER),
- compileShader(headerSource, fragmentSource, GL_FRAGMENT_SHADER),
- glCreateProgram(),
- };
-
- if (!program.vertexShader || !program.fragmentShader || !program.program) {
- deleteProgram(program);
- return nullProgram;
- }
-
- glAttachShader(program.program, program.vertexShader);
- glAttachShader(program.program, program.fragmentShader);
- glLinkProgram(program.program);
-
- GLint status = 0;
- glGetProgramiv(program.program, GL_LINK_STATUS, &status);
- if (status == GL_FALSE) {
- GLint length = 0;
- glGetProgramiv(program.program, GL_INFO_LOG_LENGTH, &length);
-
- char* log = (char*)calloc(1, (size_t)length);
- glGetProgramInfoLog(program.program, length, &length, &log[0]);
- fprintf(stderr, "error: Failed to link program (%s)\n", log);
- free(log);
-
- deleteProgram(program);
- return nullProgram;
- }
-
- return program;
+ static const Program nullProgram = {0, 0, 0};
+
+ Program program = {
+ compileShader(headerSource, vertexSource, GL_VERTEX_SHADER),
+ compileShader(headerSource, fragmentSource, GL_FRAGMENT_SHADER),
+ glCreateProgram(),
+ };
+
+ if (!program.vertexShader || !program.fragmentShader || !program.program) {
+ deleteProgram(program);
+ return nullProgram;
+ }
+
+ glAttachShader(program.program, program.vertexShader);
+ glAttachShader(program.program, program.fragmentShader);
+ glLinkProgram(program.program);
+
+ GLint status = 0;
+ glGetProgramiv(program.program, GL_LINK_STATUS, &status);
+ if (status == GL_FALSE) {
+ GLint length = 0;
+ glGetProgramiv(program.program, GL_INFO_LOG_LENGTH, &length);
+
+ char* log = (char*)calloc(1, (size_t)length);
+ glGetProgramInfoLog(program.program, length, &length, &log[0]);
+ fprintf(stderr, "error: Failed to link program (%s)\n", log);
+ free(log);
+
+ deleteProgram(program);
+ return nullProgram;
+ }
+
+ return program;
}
#endif // EXAMPLES_SHADER_UTILS_H