Files
manigraph/src/main.c
2024-10-02 13:10:08 -06:00

87 lines
1.6 KiB
C

#include <GL/gl.h>
#include "main.h"
#include "data/cube.h"
#include "data/axis.h"
#include "data/shaders.h"
#define WIDTH 512
#define HEIGHT 512
unsigned char palette[] =
{
16,
0xEB,0xD3,0xF8,0xff,
0xEB,0xD4,0xF8,0xff,
0xEB,0xD5,0xF8,0xff,
0x7A,0x1C,0xAC,0xff,
};
const char * wname = "manigraph: manifold grapher";
int main( void )
{
id_t shader, texture;
mesh_t m_cube, m_axis;
window_t window;
if( !( window = init_window( WIDTH, HEIGHT, wname ) ) )
goto error_window;
use_window( window );
set_clean_color_context( 0x2E, 0x07, 0x3F );
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 );
if( !( m_cube = create_mesh( d_cube ) ) )
goto error_mesh_cube;
if( !( m_axis = create_mesh( d_axis ) ) )
goto error_mesh_axis;
texture=create_palette_texture( palette );
use_texture( texture );
while( is_open_window( window ) )
{
quat_t q;
q=poll_input( window );
load_rot_matrix( shader, q );
clean_context();
load_mdl_matrix( shader, 0, 0 );
draw_mesh( m_axis );
load_mdl_matrix( shader, 1, 1 );
draw_mesh( m_axis );
load_mdl_matrix( shader, 2, 2 );
draw_mesh( m_axis );
load_mdl_matrix( shader, 0, 3 );
draw_mesh( m_cube );
}
destroy_texture( texture );
destroy_mesh( m_axis );
destroy_mesh( m_cube );
destroy_shader( shader );
close_window( window );
return 0;
error_mesh_axis:
destroy_mesh( m_cube );
error_mesh_cube:
destroy_shader( shader );
error_shader:
close_window( window );
error_window:
return 1;
}