cubemapper
diff src/app.cc @ 5:614295b72341
minor fixes, and redundant code removal
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Sun, 30 Jul 2017 16:16:57 +0300 |
parents | 2bfafdced01a |
children |
line diff
1.1 --- a/src/app.cc Sun Jul 30 16:11:19 2017 +0300 1.2 +++ b/src/app.cc Sun Jul 30 16:16:57 2017 +0300 1.3 @@ -31,13 +31,11 @@ 1.4 static void draw_cubemap(); 1.5 static bool parse_args(int argc, char **argv); 1.6 1.7 -static void flip_image(float *pixels, int xsz, int ysz); 1.8 - 1.9 static const char *img_fname, *img_suffix; 1.10 static float cam_theta, cam_phi; 1.11 1.12 -static Texture *pano_tex; 1.13 -static Mesh *pano_mesh; 1.14 +static Texture *tex; 1.15 +static Mesh *mesh; 1.16 1.17 static int win_width, win_height; 1.18 static int show_cubemap; 1.19 @@ -64,28 +62,28 @@ 1.20 glEnable(GL_MULTISAMPLE); 1.21 1.22 Mesh::use_custom_sdr_attr = false; 1.23 - pano_mesh = new Mesh; 1.24 - gen_sphere(pano_mesh, 1.0, 80, 40); 1.25 - pano_mesh->flip(); 1.26 + mesh = new Mesh; 1.27 + gen_sphere(mesh, 1.0, 80, 40); 1.28 + mesh->flip(); 1.29 Mat4 xform; 1.30 xform.rotation_y(-M_PI / 2.0); // rotate the sphere to face the "front" part of the image 1.31 - pano_mesh->apply_xform(xform, xform); 1.32 + mesh->apply_xform(xform, xform); 1.33 1.34 xform.scaling(-1, 1, 1); // flip horizontal texcoord since we're inside the sphere 1.35 - pano_mesh->texcoord_apply_xform(xform); 1.36 + mesh->texcoord_apply_xform(xform); 1.37 1.38 - pano_tex = new Texture; 1.39 - if(!pano_tex->load(img_fname)) { 1.40 + tex = new Texture; 1.41 + if(!tex->load(img_fname)) { 1.42 return false; 1.43 } 1.44 - printf("loaded image: %dx%d\n", pano_tex->get_width(), pano_tex->get_height()); 1.45 + printf("loaded image: %dx%d\n", tex->get_width(), tex->get_height()); 1.46 1.47 if(!(img_suffix = strrchr(img_fname, '.'))) { 1.48 img_suffix = ".jpg"; 1.49 } 1.50 1.51 // create cubemap 1.52 - cube_size = pano_tex->get_height(); 1.53 + cube_size = tex->get_height(); 1.54 glGenTextures(1, &cube_tex); 1.55 glBindTexture(GL_TEXTURE_CUBE_MAP, cube_tex); 1.56 glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); 1.57 @@ -116,8 +114,8 @@ 1.58 1.59 void app_cleanup() 1.60 { 1.61 - delete pano_mesh; 1.62 - delete pano_tex; 1.63 + delete mesh; 1.64 + delete tex; 1.65 } 1.66 1.67 void app_draw() 1.68 @@ -199,9 +197,7 @@ 1.69 1.70 draw_equilateral(); 1.71 1.72 - //glReadPixels(0, 0, cube_size, cube_size, GL_RGB, GL_FLOAT, pixels); 1.73 glGetTexImage(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGB, GL_FLOAT, pixels); 1.74 - //flip_image(pixels, cube_size, cube_size); 1.75 1.76 sprintf(fname, fname_pattern[i], img_suffix); 1.77 if(img_save_pixels(fname, pixels, cube_size, cube_size, IMG_FMT_RGBF) == -1) { 1.78 @@ -223,9 +219,9 @@ 1.79 1.80 static void draw_equilateral() 1.81 { 1.82 - pano_tex->bind(); 1.83 + tex->bind(); 1.84 glEnable(GL_TEXTURE_2D); 1.85 - pano_mesh->draw(); 1.86 + mesh->draw(); 1.87 glDisable(GL_TEXTURE_2D); 1.88 } 1.89 1.90 @@ -239,7 +235,7 @@ 1.91 glEnable(GL_TEXTURE_GEN_T); 1.92 glEnable(GL_TEXTURE_GEN_R); 1.93 1.94 - pano_mesh->draw(); 1.95 + mesh->draw(); 1.96 1.97 glPopAttrib(); 1.98 } 1.99 @@ -271,6 +267,8 @@ 1.100 1.101 case 'c': 1.102 render_cubemap(); 1.103 + show_cubemap = 1; 1.104 + app_redisplay(); 1.105 break; 1.106 } 1.107 } 1.108 @@ -311,15 +309,8 @@ 1.109 { 1.110 for(int i=1; i<argc; i++) { 1.111 if(argv[i][0] == '-') { 1.112 - /* 1.113 - } else if(strcmp(argv[i], "-help") == 0) { 1.114 - printf("usage: %s [options]\noptions:\n", argv[0]); 1.115 - printf(" -help: print usage information and exit\n"); 1.116 - exit(0); 1.117 - } else {*/ 1.118 - fprintf(stderr, "invalid option: %s\n", argv[i]); 1.119 - return false; 1.120 - //} 1.121 + fprintf(stderr, "invalid option: %s\n", argv[i]); 1.122 + return false; 1.123 } else { 1.124 if(img_fname) { 1.125 fprintf(stderr, "unexpected option: %s\n", argv[i]); 1.126 @@ -331,21 +322,3 @@ 1.127 1.128 return true; 1.129 } 1.130 - 1.131 -static void flip_image(float *pixels, int xsz, int ysz) 1.132 -{ 1.133 - float *top_ptr = pixels; 1.134 - float *bot_ptr = pixels + xsz * (ysz - 1) * 3; 1.135 - float *line = new float[xsz * 3]; 1.136 - int scansz = xsz * 3 * sizeof(float); 1.137 - 1.138 - for(int i=0; i<ysz / 2; i++) { 1.139 - memcpy(line, top_ptr, scansz); 1.140 - memcpy(top_ptr, bot_ptr, scansz); 1.141 - memcpy(bot_ptr, line, scansz); 1.142 - top_ptr += xsz * 3; 1.143 - bot_ptr -= xsz * 3; 1.144 - } 1.145 - 1.146 - delete [] line; 1.147 -}