Beispiel #1
0
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;
}
Beispiel #2
0
/*-----------------------------------------------------------------
 * 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;
}