|
|
|
|
@ -66,6 +66,8 @@ addShaderProgram(MemoryArena* arena,
|
|
|
|
|
// queries after at least one shader has been linked
|
|
|
|
|
initCTXSizes(gl_ctx); |
|
|
|
|
s->model_xform_id = glGetUniformLocation(s->prog_id, "model_xform"); |
|
|
|
|
// TODO: add sampler uniform detection in dynamic shader parsing
|
|
|
|
|
s->sampler_id = glGetUniformLocation(s->prog_id, "sampler"); |
|
|
|
|
glDetachShader(s->prog_id, vs_id); |
|
|
|
|
glDetachShader(s->prog_id, fs_id); |
|
|
|
|
glDeleteShader(vs_id); |
|
|
|
|
@ -160,12 +162,21 @@ getGLTexture(GLContext* gl_ctx, util_image* diffuse_img)
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void |
|
|
|
|
renderVAO(GLmesh* glmesh, glm::mat4* model_xform, shader_program* shader) |
|
|
|
|
renderVAO(GLmesh* glmesh, |
|
|
|
|
glm::mat4* model_xform, |
|
|
|
|
shader_program* shader, |
|
|
|
|
GLuint tex_id) |
|
|
|
|
{ |
|
|
|
|
glUseProgram(shader->prog_id); |
|
|
|
|
glBindVertexArray(glmesh->vao_id); |
|
|
|
|
glUniformMatrix4fv(shader->model_xform_id, 1, GL_FALSE, |
|
|
|
|
(float*) model_xform); |
|
|
|
|
|
|
|
|
|
if (tex_id > 0) { |
|
|
|
|
glBindTexture(GL_TEXTURE_2D, tex_id); |
|
|
|
|
glUniform1i(shader->sampler_id, 0); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glmesh->element_buf->id); |
|
|
|
|
glDrawElements( |
|
|
|
|
glmesh->draw_mode, glmesh->num_indices, GL_UNSIGNED_SHORT, 0); |
|
|
|
|
@ -385,6 +396,7 @@ u32
|
|
|
|
|
getGLTypeSize(GLenum e) |
|
|
|
|
{ |
|
|
|
|
switch (e) { |
|
|
|
|
case GL_FLOAT_VEC2: return 2 * sizeof(GLfloat); |
|
|
|
|
case GL_FLOAT_VEC3: return 3 * sizeof(GLfloat); |
|
|
|
|
case GL_FLOAT_VEC4: return 4 * sizeof(GLfloat); |
|
|
|
|
case GL_FLOAT_MAT4: return 16 * sizeof(GLfloat); |
|
|
|
|
@ -552,6 +564,7 @@ getNumAttribComponents(GLenum type)
|
|
|
|
|
{ |
|
|
|
|
switch (type) { |
|
|
|
|
case GL_FLOAT_VEC3: return 3; |
|
|
|
|
case GL_FLOAT_VEC2: return 2; |
|
|
|
|
default: |
|
|
|
|
printf("%s(), unknown GLenum\n", __FUNCTION__); |
|
|
|
|
return 0; |
|
|
|
|
@ -563,6 +576,7 @@ getAttribComponentType(GLenum type)
|
|
|
|
|
{ |
|
|
|
|
switch (type) { |
|
|
|
|
case GL_FLOAT_VEC3: return GL_FLOAT; |
|
|
|
|
case GL_FLOAT_VEC2: return GL_FLOAT; |
|
|
|
|
default: |
|
|
|
|
printf("%s(), unknown GLenum\n", __FUNCTION__); |
|
|
|
|
return 0; |
|
|
|
|
|