int main(int argc, char **argv) { int w,h; //test_ycbcr(); #if 0 // test hdr asserts for (h=0; h < 100; h += 2) for (w=0; w < 200; ++w) hdr_data[h][w][0] = (float) rand(), hdr_data[h][w][1] = (float) rand(), hdr_data[h][w][2] = (float) rand(); stbi_write_hdr("output/test.hdr", 200,200,3,hdr_data[0][0]); #endif if (argc > 1) { int i, n; for (i=1; i < argc; ++i) { int res; int w2,h2,n2; unsigned char *data; printf("%s\n", argv[i]); res = stbi_info(argv[1], &w2, &h2, &n2); data = stbi_load(argv[i], &w, &h, &n, 4); if (data) free(data); else printf("Failed &n\n"); data = stbi_load(argv[i], &w, &h, 0, 1); if (data) free(data); else printf("Failed 1\n"); data = stbi_load(argv[i], &w, &h, 0, 2); if (data) free(data); else printf("Failed 2\n"); data = stbi_load(argv[i], &w, &h, 0, 3); if (data) free(data); else printf("Failed 3\n"); data = stbi_load(argv[i], &w, &h, &n, 4); assert(data); assert(w == w2 && h == h2 && n == n2); assert(res); if (data) { char fname[512]; stb_splitpath(fname, argv[i], STB_FILE); stbi_write_png(stb_sprintf("output/%s.png", fname), w, h, 4, data, w*4); stbi_write_bmp(stb_sprintf("output/%s.bmp", fname), w, h, 4, data); stbi_write_tga(stb_sprintf("output/%s.tga", fname), w, h, 4, data); stbi_write_png_to_func(dummy_write,0, w, h, 4, data, w*4); stbi_write_bmp_to_func(dummy_write,0, w, h, 4, data); stbi_write_tga_to_func(dummy_write,0, w, h, 4, data); free(data); } else printf("FAILED 4\n"); } } else { int i, nope=0; #ifdef PNGSUITE_PRIMARY char **files = stb_readdir_files("pngsuite/primary"); #else char **files = stb_readdir_files("images"); #endif for (i=0; i < stb_arr_len(files); ++i) { int n; char **failed = NULL; unsigned char *data; printf("."); //printf("%s\n", files[i]); data = stbi_load(files[i], &w, &h, &n, 0); if (data) free(data); else stb_arr_push(failed, "&n"); data = stbi_load(files[i], &w, &h, 0, 1); if (data) free(data); else stb_arr_push(failed, "1"); data = stbi_load(files[i], &w, &h, 0, 2); if (data) free(data); else stb_arr_push(failed, "2"); data = stbi_load(files[i], &w, &h, 0, 3); if (data) free(data); else stb_arr_push(failed, "3"); data = stbi_load(files[i], &w, &h, 0, 4); if (data) ; else stb_arr_push(failed, "4"); if (data) { char fname[512]; #ifdef PNGSUITE_PRIMARY int w2,h2; unsigned char *data2; stb_splitpath(fname, files[i], STB_FILE_EXT); data2 = stbi_load(stb_sprintf("pngsuite/primary_check/%s", fname), &w2, &h2, 0, 4); if (!data2) printf("FAILED: couldn't load 'pngsuite/primary_check/%s\n", fname); else { if (w != w2 || h != w2 || 0 != memcmp(data, data2, w*h*4)) { int x,y,c; if (w == w2 && h == h2) for (y=0; y < h; ++y) for (x=0; x < w; ++x) for (c=0; c < 4; ++c) assert(data[y*w*4+x*4+c] == data2[y*w*4+x*4+c]); printf("FAILED: %s loaded but didn't match PRIMARY_check 32-bit version\n", files[i]); } free(data2); } #else stb_splitpath(fname, files[i], STB_FILE); stbi_write_png(stb_sprintf("output/%s.png", fname), w, h, 4, data, w*4); #endif free(data); } if (failed) { int j; printf("FAILED: "); for (j=0; j < stb_arr_len(failed); ++j) printf("%s ", failed[j]); printf(" -- %s\n", files[i]); } } printf("Tested %d files.\n", i); } return 0; }
void render_init(void) { // @TODO: support non-DXT path char **files = stb_readdir_recursive("data", "*.crn"); int i; camera_bounds[0][0] = - 0.75f; camera_bounds[0][1] = - 0.75f; camera_bounds[0][2] = - 4.25f; camera_bounds[1][0] = + 0.75f; camera_bounds[1][1] = + 0.75f; camera_bounds[1][2] = + 0.25f; init_chunk_caches(); init_mesh_building(); init_mesh_build_threads(); s_init_physics_cache(); glGenTextures(2, voxel_tex); glBindTexture(GL_TEXTURE_2D_ARRAY_EXT, voxel_tex[0]); for (i=0; i < 11; ++i) { glTexImage3DEXT(GL_TEXTURE_2D_ARRAY_EXT, i, GL_COMPRESSED_RGB_S3TC_DXT1_EXT, 1024>>i,1024>>i,128,0, GL_RGBA,GL_UNSIGNED_BYTE,NULL); } #if 1 for (i=0; i < sizeof(textures)/sizeof(textures[0]); ++i) { size_t len; char *filename = stb_sprintf("data/pixar/crn/%s.crn", textures[i].filename); uint8 *data = stb_file(filename, &len); load_crn_to_texture_array(i, data, len); free(data); texture_scales[i] = 1.0f/4;// textures[i].scale; } #endif // temporary hack: voxel_tex[1] = voxel_tex[0]; init_voxel_render(voxel_tex); { char *frag[] = { dumb_fragment_shader, NULL }; char error[1024]; GLuint fragment; fragment = stbgl_compile_shader(STBGL_FRAGMENT_SHADER, frag, -1, error, sizeof(error)); if (!fragment) { ods("oops"); exit(0); } dumb_prog = stbgl_link_program(0, fragment, NULL, -1, error, sizeof(error)); } #if 0 { size_t len; unsigned char *data = stb_file(files[0], &len); glGenTextures(1, &debug_tex); glBindTexture(GL_TEXTURE_2D, debug_tex); load_crn_to_texture(data, len); free(data); } #endif }