int main(void) { window_open(); glutils_init(); Settings settings; settings.first_run = true; Level level; bool leave = false; while(!leave) { if(!menu_run(&settings)) { leave = true; break; } theme_load(settings.theme); level_load(settings.level_set, settings.level, &level); level_run(&level, &settings); } /* * unload the last used theme * if we loaded several themes one after another, * they have been automatically freed by theme_load */ theme_unload(); return EXIT_SUCCESS; }
/*----------------------------------------------------------------- * Initialization *-----------------------------------------------------------------*/ void renderer_init(struct renderer_state* rs) { /* Populate renderer state according to init params */ memset(rs, 0, sizeof(*rs)); rs->internal = calloc(1, sizeof(*rs->internal)); struct renderer_internal_state* is = rs->internal; /* Initialize resource manager */ resmgr_init(&rs->rmgr); /* Initial dimensions */ int width = 1280, height = 720; is->viewport.x = width; is->viewport.y = height; /* Initialize gbuffer */ gbuffer_init(&is->main_gbuf, width, height); is->gbuf = &is->main_gbuf; /* Initialize internal postfx renderer */ postfx_init(&is->postfx, width, height); /* Initial resize */ renderer_resize(rs, width, height); /* Initialize gl utilities state */ glutils_init(); /* Initialize internal panic screen state */ panicscr_init(&is->ps_rndr); register_gl_error_handler(pnkscr_err_cb, &is->ps_rndr); /* Initialize embedded resources */ resint_init(); /* Initialize SSAO state */ ssao_init(&is->ssao, width, height); /* Initialize internal eye adaptation state */ eyeadapt_init(&is->eyeadpt); /* Initialize internal texture sky state */ sky_texture_init(&is->sky_rndr.tex); /* Initialize internal preetham sky state */ sky_preetham_init(&is->sky_rndr.preeth); /* Initialize internal Global Illumination renderer state */ gi_rndr_init(&is->gi_rndr); /* Initialize internal bbox renderer state */ bbox_rndr_init(&is->bbox_rs); /* Initialize internal occlusion state */ occull_init(&is->occl_st); /* Initialize internal shadowmap state */ const GLuint shmap_res = 2048; shadowmap_init(&is->shdwmap, shmap_res, shmap_res); /* Fetch shaders */ renderer_shdr_fetch(rs); /* Initialize frame profiler */ is->fprof = frame_prof_init(); /* Initialize debug text rendering */ dbgtxt_init(); /* Initialize multiple render targets debugger */ mrtdbg_init(); /* Load internal textures */ image im; void* fdata; size_t fsize; embedded_file(&fdata, &fsize, "textures/smaa_area_tex.dds"); im = image_from_buffer(fdata, fsize, ".dds"); glGenTextures(1, &is->textures.smaa.area); glBindTexture(GL_TEXTURE_2D, is->textures.smaa.area); glTexImage2D(GL_TEXTURE_2D, 0, GL_RG8, im.w, im.h, 0, GL_BGR, GL_UNSIGNED_BYTE, im.data); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); free(im.data); embedded_file(&fdata, &fsize, "textures/smaa_search_tex.dds"); im = image_from_buffer(fdata, fsize, ".dds"); glGenTextures(1, &is->textures.smaa.search); glBindTexture(GL_TEXTURE_2D, is->textures.smaa.search); glTexImage2D(GL_TEXTURE_2D, 0, GL_R8, im.w, im.h, 0, GL_RED, GL_UNSIGNED_BYTE, im.data); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); free(im.data); glBindTexture(GL_TEXTURE_2D, 0); /* Setup IBL */ is->textures.brdf_lut = brdf_lut_generate(is->shdrs.ibl.brdf_lut); /* Default options */ rs->options.use_occlusion_culling = 0; rs->options.use_rough_met_maps = 1; rs->options.use_detail_maps = 1; rs->options.use_shadows = 0; rs->options.use_envlight = 1; rs->options.use_bloom = 0; rs->options.use_tonemapping = 1; rs->options.use_gamma_correction = 1; rs->options.use_ssao = 0; rs->options.show_bboxes = 0; rs->options.show_normals = 0; rs->options.show_fprof = 1; rs->options.show_gbuf_textures = 0; rs->options.show_gidata = 0; }