diff --git a/src/data/shaders.h b/src/data/shaders.h index 8e22431..40b5ef4 100644 --- a/src/data/shaders.h +++ b/src/data/shaders.h @@ -22,6 +22,20 @@ const char * vs = "}"; +const char * fs_plain = + "#version 330 core\n" + + "uniform sampler2DArray palette;" + + "in float index;" + "out vec4 FragColor;" + "in vec3 Normal;" + "in vec3 FragPos;" + + "void main()" + "{" + " FragColor = texture( palette, vec3( 0, 0, index ) ).rgba;" + "}"; const char * fs = "#version 330 core\n" diff --git a/src/main.c b/src/main.c index e94a788..297318d 100755 --- a/src/main.c +++ b/src/main.c @@ -50,8 +50,7 @@ const char * wname = "manigraph: manifold grapher"; int main( void ) { - float * n_cube, *n_axis; - id_t shader, texture; + id_t shader, texture, shader_plain; mesh_t m_cube, m_axis; window_t window; @@ -63,63 +62,79 @@ int main( void ) glewInit(); - if( !( shader = create_shader() ) ) - goto error_shader; - - gload_program( shader, vs, VERTEX ); - gload_program( shader, fs, FRAGMENT ); - use_shader( shader ); - - load_fix_matrix( shader, (float)WIDTH/HEIGHT ); - - n_cube = fill_normal( d_cube ); - n_axis = fill_normal( d_axis ); - - if( !( m_cube = create_mesh( d_cube, n_cube ) ) ) - goto error_mesh_cube; - - if( !( m_axis = create_mesh( d_axis, n_axis ) ) ) - goto error_mesh_axis; - - free( n_cube ); - free( n_axis ); - texture=create_palette_texture( palette ); use_texture( texture ); + if( !( shader = create_shader() ) ) + goto error_shader; + gload_program( shader, vs, VERTEX ); + gload_program( shader, fs, FRAGMENT ); + + if( !( shader_plain = create_shader() ) ) + goto error_shader_plain; + gload_program( shader_plain, vs, VERTEX ); + gload_program( shader_plain, fs_plain, FRAGMENT ); + + load_fix_matrix( shader, (float)WIDTH/HEIGHT ); + load_fix_matrix( shader_plain, (float)WIDTH/HEIGHT ); + + /* Fill m_cube */ + { + float * n_cube; + n_cube = fill_normal( d_cube ); + if( !( m_cube = create_mesh( d_cube, n_cube ) ) ) + goto error_mesh_cube; + free( n_cube ); + } + + /* Fill m_axis */ + { + float * n_axis; + n_axis = fill_normal( d_axis ); + if( !( m_axis = create_mesh( d_axis, n_axis ) ) ) + goto error_mesh_axis; + free( n_axis ); + } + while( is_open_window( window ) ) { quat_t q; q=poll_input( window ); load_rot_matrix( shader, q ); + load_rot_matrix( shader_plain, q ); clean_context(); + #ifndef DEBUG - load_mdl_matrix( shader, 0, 0 ); + load_mdl_matrix( shader_plain, 0, 0 ); draw_mesh( m_axis ); - load_mdl_matrix( shader, 1, 1 ); + load_mdl_matrix( shader_plain, 1, 1 ); draw_mesh( m_axis ); - load_mdl_matrix( shader, 2, 2 ); + load_mdl_matrix( shader_plain, 2, 2 ); draw_mesh( m_axis ); #endif load_mdl_matrix( shader, 0, 3 ); draw_mesh( m_cube ); } - destroy_texture( texture ); destroy_mesh( m_axis ); destroy_mesh( m_cube ); + destroy_shader( shader_plain ); destroy_shader( shader ); + destroy_texture( texture ); close_window( window ); return 0; error_mesh_axis: destroy_mesh( m_cube ); error_mesh_cube: + destroy_shader( shader_plain ); +error_shader_plain: destroy_shader( shader ); error_shader: close_window( window ); + destroy_texture( texture ); error_window: return 1; } diff --git a/src/shader.c b/src/shader.c index d4dbc71..f7b8b41 100644 --- a/src/shader.c +++ b/src/shader.c @@ -37,8 +37,8 @@ unsigned char gload_program( unsigned int program, const char * src, shader = glCreateShader(type[i]); glShaderSource( shader, 1, (const GLchar **)&src, ((void*)0 )); glCompileShader(shader); - glGetShaderiv( shader, GL_COMPILE_STATUS, &status ); + glGetShaderiv( shader, GL_COMPILE_STATUS, &status ); if( !status ) {