Browse Source

add helper functions for GL type sizes

main
cinnaboot 5 years ago
parent
commit
b98cc29e1b
  1. 35
      src/shader.cpp

35
src/shader.cpp

@ -26,6 +26,7 @@ bool compileAndLinkShader(shader_program* shader,
const char* frag_src,
GLuint& vs_id,
GLuint& fs_id);
u32 getGLTypeSize(GLenum e);
// NOTE: interface
@ -310,15 +311,28 @@ dumpTextFile(const char* filepath)
return s;
}
u32
getGLTypeSize(GLenum e)
{
switch (e) {
case GL_FLOAT_VEC3: return 3 * sizeof(GLfloat);
case GL_FLOAT_VEC4: return 4 * sizeof(GLfloat);
case GL_FLOAT_MAT4: return 16 * sizeof(GLfloat);
default:
printf("%s(), unknown GLenum\n", __FUNCTION__);
return 0;
}
}
// NOTE: returns sizes based on GLSL layout std140
// https://www.khronos.org/opengl/wiki/Interface_Block_(GLSL)#Memory_layout
u32
getGLTypeSize(GLenum e)
getGLTypeSizeStd140(GLenum e)
{
switch (e) {
case 0x8b51: return 4 * sizeof(GLfloat); // GL_FLOAT_VEC3
case 0x8b52: return 4 * sizeof(GLfloat); // GL_FLOAT_VEC4
case 0x8b5c: return 16 * sizeof(GLfloat); // GL_FLOAT_MAT4
case GL_FLOAT_VEC3: return 4 * sizeof(GLfloat);
case GL_FLOAT_VEC4: return 4 * sizeof(GLfloat);
case GL_FLOAT_MAT4: return 16 * sizeof(GLfloat);
default:
printf("%s(), unknown GLenum\n", __FUNCTION__);
return 0;
@ -476,6 +490,17 @@ getNumAttribComponents(GLenum type)
}
}
GLenum
getAttribComponentType(GLenum type)
{
switch (type) {
case GL_FLOAT_VEC3: return GL_FLOAT;
default:
printf("%s(), unknown GLenum\n", __FUNCTION__);
return 0;
}
}
bool
parseAttributes(memory_arena* arena, shader_program* s, GLContext* gl_ctx)
{
@ -507,6 +532,8 @@ parseAttributes(memory_arena* arena, shader_program* s, GLContext* gl_ctx)
attrib->location = location;
attrib->num_components = getNumAttribComponents(type);
assert(attrib->num_components > 0);
attrib->component_type = getAttribComponentType(type);
assert(attrib->component_type > 0);
attrib->name = arenaCopyCStr(arena, attrib_name, sizeof(attrib_name));
// TODO: replace POSITION, NORMAL, UV... etc enums in loadGLMesh()
// with extra logic to detect mesh to shader mapping

Loading…
Cancel
Save