Last active
October 10, 2015 16:27
-
-
Save acdimalev/3718448 to your computer and use it in GitHub Desktop.
GLSL shortcuts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include GL | |
#include "glsl.h" | |
void glsl_setup(glsl_program *program) { | |
int gl_program = program->gl_program = glCreateProgram(); | |
int i; | |
for (i = 0; i < program->n_shaders; i++) { | |
glsl_shader *shader = &program->shaders[i]; | |
int gl_shader = glCreateShader(shader->type); | |
glShaderSource(gl_shader, 1, &shader->source, 0); | |
glCompileShader(gl_shader); | |
//char buffer[256]; | |
//glGetShaderInfoLog(gl_shader, sizeof(buffer), 0, buffer); | |
//printf("%s\n", buffer); | |
glAttachShader(gl_program, gl_shader); | |
glDeleteShader(gl_shader); | |
} | |
for (i = 0; i < program->n_attribs; i++) { | |
glsl_attrib *attrib = &program->attribs[i]; | |
glBindAttribLocation(gl_program, i, attrib->symbol); | |
} | |
glLinkProgram(gl_program); | |
for (i = 0; i < program->n_uniforms; i++) { | |
glsl_uniform *uniform = &program->uniforms[i]; | |
uniform->location = glGetUniformLocation(gl_program, uniform->symbol); | |
} | |
glGenBuffers(1, &program->vbo); | |
glBindBuffer(GL_ARRAY_BUFFER, program->vbo); | |
glBufferData(GL_ARRAY_BUFFER, | |
program->vb_n_elements * program->stride * sizeof(GLfloat), | |
program->vb, program->vbo_hint); | |
glGenBuffers(1, &program->ibo); | |
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, program->ibo); | |
glBufferData(GL_ELEMENT_ARRAY_BUFFER, | |
program->ib_n_elements * sizeof(GLushort), | |
program->ib, program->ibo_hint); | |
} | |
void glsl_subdata_vb(glsl_program *program) { | |
glBindBuffer(GL_ARRAY_BUFFER, program->vbo); | |
glBufferSubData(GL_ARRAY_BUFFER, | |
0, program->vb_n_elements * program->stride * sizeof(GLfloat), | |
program->vb); | |
} | |
void glsl_subdata_ib(glsl_program *program) { | |
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, program->ibo); | |
glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, | |
0, program->ib_n_elements * sizeof(GLushort), | |
program->ib); | |
} | |
void glsl_render(glsl_program *program) { | |
int i; | |
glBindBuffer(GL_ARRAY_BUFFER, program->vbo); | |
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, program->ibo); | |
for (i = 0; i < program->n_attribs; i++) { | |
glsl_attrib *attrib = &program->attribs[i]; | |
const GLvoid *pointer = (GLvoid *)(attrib->offset * sizeof(GLfloat)); | |
glEnableVertexAttribArray(i); | |
glVertexAttribPointer(i, attrib->count, GL_FLOAT, GL_FALSE, | |
program->stride * sizeof(GLfloat), pointer); | |
} | |
glDrawElements(GL_TRIANGLES, program->ib_n_elements, GL_UNSIGNED_SHORT, 0); | |
for (i = 0; i < program->n_attribs; i++) { | |
glDisableVertexAttribArray(i); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
typedef struct { | |
int type; | |
const char *source; | |
} glsl_shader; | |
typedef struct { | |
int offset; | |
int count; | |
char *symbol; | |
} glsl_attrib; | |
typedef struct { | |
int location; | |
char *symbol; | |
} glsl_uniform; | |
typedef struct { | |
int gl_program; | |
int stride; | |
int n_shaders; | |
glsl_shader *shaders; | |
int n_attribs; | |
glsl_attrib *attribs; | |
int n_uniforms; | |
glsl_uniform *uniforms; | |
unsigned int vbo; | |
int vb_n_elements; | |
float *vb; | |
int vbo_hint; | |
unsigned int ibo; | |
int ib_n_elements; | |
unsigned short *ib; | |
int ibo_hint; | |
} glsl_program; | |
void glsl_setup(glsl_program *program); | |
void glsl_subdata_ib(glsl_program *program); | |
void glsl_subdata_vb(glsl_program *program); | |
void glsl_render(glsl_program *program); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment