X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;ds=sidebyside;f=tools%2Ftilegen%2Fsrc%2Fmain.c;h=f63171d1d9af406f42754b15482e7103043e915c;hb=980839aac8347438f99f3b2e7c054f2bb19f327b;hp=5468d6cc408ec8b2c3c3138d0a6b9ca099e8f637;hpb=7b554099ac39caf1ff135615d5453135d5c3dab4;p=megadrive_tetris diff --git a/tools/tilegen/src/main.c b/tools/tilegen/src/main.c index 5468d6c..f63171d 100644 --- a/tools/tilegen/src/main.c +++ b/tools/tilegen/src/main.c @@ -1,28 +1,48 @@ #include #include -#include +#include +#include #include +#include struct vec3 { float x, y, z; }; void disp(void); +void draw_scene(int eye); void draw_field(int xcells, int ycells); void draw_tile(int col, int row, int xcells, int ycells); void set_view_matrix(int eye, float ipd); void set_proj_matrix(int eye, float ipd); void reshape(int x, int y); void keyb(unsigned char key, int x, int y); +void save_tiles(void); +int save_tile(const char *fname, unsigned char *pixptr, int xsz, int ysz, int pitch); +void draw_grid(void); + +void draw_shaft(void); -static int win_width = 320; -static int win_height = 640; +static int win_width = 1280; +static int win_height = 960; +static int grid_cols = 10; +static int grid_rows = 20; static float aspect; static int view = 0; -static float eye_dist = 1.4; +static float eye_dist_well = 0.5; +static float eye_dist_tiles = 1.3; + +static int show_blocks = 0; +static int show_stereo = 0; +static int show_grid = 1; int main(int argc, char **argv) { + printf("press 't' to toggle block tiles\n"); + printf("press 's' to toggle stereo\n"); + printf("press 'g' to toggle guide grid\n"); + printf("press space to resize to 8x8 tiles\n"); + glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); glutInitWindowSize(win_width, win_height); @@ -42,54 +62,56 @@ int main(int argc, char **argv) void disp(void) { - glClear(GL_COLOR_BUFFER_BIT); + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - glColorMask(1, 0, 0, 0); + if(show_stereo) { + glColorMask(1, 0, 0, 0); + draw_scene(-1); - set_proj_matrix(-1, eye_dist); - set_view_matrix(-1, eye_dist); - glTranslatef(0, 0, -1); - - draw_field(10, 20); - - glColorMask(0, 1, 1, 0); - - set_proj_matrix(1, eye_dist); - set_view_matrix(1, eye_dist); - glTranslatef(0, 0, -1); + glColorMask(0, 1, 1, 0); + draw_scene(1); - draw_field(10, 20); + glColorMask(1, 1, 1, 1); + } else { + draw_scene(0); + } - glColorMask(1, 1, 1, 1); + if(show_grid) { + draw_grid(); + } glutSwapBuffers(); assert(glGetError() == GL_NO_ERROR); } +void draw_scene(int eye) +{ + set_proj_matrix(eye, eye_dist_well); + set_view_matrix(eye, eye_dist_well); + glTranslatef(0, 0, -1); + draw_shaft(); + + set_proj_matrix(eye, eye_dist_tiles); + set_view_matrix(eye, eye_dist_tiles); + glTranslatef(0, 0, -1); + draw_field(grid_cols, grid_rows); +} + void draw_field(int xcells, int ycells) { int i, j; - for(i=0; i 160) { + glutReshapeWindow(win_width / 4, win_height / 4); + } else { + glutReshapeWindow(win_width * 4, win_height * 4); + } + glutPostRedisplay(); + break; + + case 't': + show_blocks = !show_blocks; + glutPostRedisplay(); + break; + + case 'g': + show_grid = !show_grid; + glutPostRedisplay(); + break; } } + + +void save_tiles(void) +{ + unsigned char *pixels, *tilepix; + int i, j, tilesz = win_height / grid_rows; + char fname[256]; + + if(!(pixels = malloc(win_width * win_height * 3))) { + fprintf(stderr, "failed to allocate pixel buffer\n"); + return; + } + glReadPixels(0, 0, win_width, win_height, GL_RGB, GL_UNSIGNED_BYTE, pixels); + + for(i=0; i