Browse Source

get textured rendering working again

main
cinnaboot 5 years ago
parent
commit
a1ff310a46
  1. BIN
      data/shader.frag
  2. BIN
      data/shader.vert
  3. 2
      src/main.cpp
  4. 16
      src/shader.cpp
  5. 15
      src/shader.h

BIN
data/shader.frag (Stored with Git LFS)

Binary file not shown.

BIN
data/shader.vert (Stored with Git LFS)

Binary file not shown.

2
src/main.cpp

@ -345,7 +345,7 @@ loop(RenderState* rs)
for (u32 k = 0; k < e.num_meshes; k++) {
GLmesh& glm = e.meshes[k];
renderVAO(&glm, e.xform, rg.shader);
renderVAO(&glm, e.xform, rg.shader, e.diffuse_texture->id);
}
}
}

16
src/shader.cpp

@ -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;

15
src/shader.h

@ -50,6 +50,7 @@ struct shader_program
GLuint prog_id;
GLuint xforms_ubo_id;
GLuint model_xform_id;
GLint sampler_id;
u32 num_blocks;
GLUniformBlock* uniform_blocks;
@ -160,19 +161,31 @@ bool addShaderProgram(MemoryArena* arena,
const char* vs,
const char* fs,
const char* name);
shader_program* getShaderByName(const char* name, GLContext* gl_ctx);
shader_program* getShaderByID(GLContext* gl_ctx, GLuint prog_id);
shader_program* getShaderByHash(GLContext* gl_ctx, u64 hash);
shader_program* getFreeShader(GLContext* gl_ctx);
GLTexture* getGLTexture(GLContext* gl_ctx, util_image* diffuse_img);
void renderVAO(GLmesh* glmesh, glm::mat4* model_xform, shader_program* shader);
void renderVAO(GLmesh* glmesh,
glm::mat4* model_xform,
shader_program* shader,
GLuint tex_id = 0);
GLVertexAttrib* getVertexAttribByName(shader_program* shader, const char* name);
GLmesh loadGLMesh(const mesh& m,
GLenum draw_mode,
GLuint diffuse_texture_id,
const glm::vec3& pos,
u32 num_mappings,
GLBufferToAttribMapping mappings[]);
void initTransforms(MemoryArena* arena,
transforms* xforms,
gl_buffer* xform_ubo,

Loading…
Cancel
Save