# HG changeset patch # User John Tsiombikas # Date 1501217075 -10800 # Node ID d7a29cb7ac8d561a1e57df7769bf77c78d14e2d3 # Parent 8fc9e1d3aad2542f5aafacfe5a3fd628b1054e29 resize to the final cubemap face size diff -r 8fc9e1d3aad2 -r d7a29cb7ac8d src/app.cc --- a/src/app.cc Thu Jul 27 20:36:12 2017 +0300 +++ b/src/app.cc Fri Jul 28 07:44:35 2017 +0300 @@ -16,6 +16,8 @@ static void draw_scene_inf(); static bool parse_args(int argc, char **argv); +static void flip_image(float *pixels, int xsz, int ysz); + static const char *img_fname; static float cam_theta, cam_phi; @@ -64,6 +66,7 @@ if(!pano_tex->load(img_fname)) { return false; } + printf("loaded image: %dx%d\n", pano_tex->get_width(), pano_tex->get_height()); return true; } @@ -126,6 +129,8 @@ draw_scene(); glReadPixels(0, 0, fbsize, fbsize, GL_RGB, GL_FLOAT, pixels); + flip_image(pixels, fbsize, fbsize); + if(img_save_pixels(fname[i], pixels, fbsize, fbsize, IMG_FMT_RGBF) == -1) { fprintf(stderr, "failed to save %dx%d image: %s\n", fbsize, fbsize, fname[i]); break; @@ -172,12 +177,19 @@ void app_keyboard(int key, bool press) { + int cubemap_size; + if(press) { switch(key) { case 27: app_quit(); break; + case ' ': + cubemap_size = pano_tex->get_width() / 4; + app_resize(cubemap_size, cubemap_size); + break; + case 's': printf("rendering cubemap\n"); render_cubemap(); @@ -241,3 +253,21 @@ return true; } + +static void flip_image(float *pixels, int xsz, int ysz) +{ + float *top_ptr = pixels; + float *bot_ptr = pixels + xsz * (ysz - 1) * 3; + float *line = new float[xsz * 3]; + int scansz = xsz * 3 * sizeof(float); + + for(int i=0; i