Exemple #1
0
void score_screen_react(score_screen_t* s, SDL_Event* e){
	//if key or joybutton is hit, we go to the game or something like it
	if(e->type == SDL_KEYDOWN || e->type == SDL_JOYBUTTONDOWN)
		game_system_communicate(s->system, 0);
	else if(e->type == SDL_VIDEORESIZE){
		renderer_resize(&s->system->renderer,e->resize.w, e->resize.h);
		renderer_reload(&s->system->renderer);
	}
}
Exemple #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;
}
Exemple #3
0
JNIEXPORT void JNICALL Java_com_fiftyply_mosaic_GameRenderer_nativeResize(JNIEnv* env, jobject obj, int w, int h) {
  LOGI("nativeResize");
  renderer_resize(w, h);
}
/** renderer for setups */
static NftResult _render_setup(cairo_surface_t ** surface, gpointer element)
{
        if(!surface || !element)
                NFT_LOG_NULL(NFT_FAILURE);

        /* setup to render */
        LedSetup *s = (LedSetup *) element;

        /* get dimensions of setup */
        LedFrameCord w, h;
        led_setup_get_dim(s, &w, &h);

        /* calculate rendered dimensions of this tile */
        double width = (double) w * ui_renderer_scale_factor();
        double height = (double) h * ui_renderer_scale_factor();

        /* if dimensions changed, we need to allocate a new surface */
        if(!renderer_resize(setup_get_renderer(), width, height))
        {
                g_error("Failed to resize renderer to %dx%d", w, h);
                return NFT_FAILURE;
        }

        /* create context for drawing */
        cairo_t *cr = cairo_create(*surface);

        /* clear surface */
#ifdef DEBUG
        cairo_set_source_rgba(cr, 0.1, 0.1, 0.1, 1);
#else
        cairo_set_source_rgba(cr, 0, 0, 0, 1);
#endif
        cairo_rectangle(cr,
                        0, 0,
                        (double) cairo_image_surface_get_width(*surface),
                        (double) cairo_image_surface_get_height(*surface));
        cairo_fill(cr);



        /* walk through all hardware LED adapters */
        LedHardware *hw;
        for(hw = led_setup_get_hardware(s);
            hw; hw = led_hardware_list_get_next(hw))
        {

                /* calculate offset of complete setup */
                LedTile *t;
                double xOff = 0, yOff = 0;
                for(t = led_hardware_get_tile(hw);
                    t; t = led_tile_list_get_next(t))
                {
                        double xOffT, yOffT;
                        tile_calc_render_offset(led_tile_get_privdata(t),
                                                (double) w, (double) h,
                                                &xOffT, &yOffT);
                        xOff = MIN(xOff, xOffT);
                        yOff = MIN(yOff, yOffT);
                }

                renderer_set_offset(setup_get_renderer(),
                                    xOff * ui_renderer_scale_factor(),
                                    yOff * ui_renderer_scale_factor());

                /* Walk all tiles of this hardware & draw their surface */
                for(t = led_hardware_get_tile(hw);
                    t; t = led_tile_list_get_next(t))
                {
                        /** @todo check for visibility? */

                        /* get surface from tile */
                        NiftyconfTile *tile =
                                (NiftyconfTile *) led_tile_get_privdata(t);

                        /* get surface */
                        cairo_surface_t *tsurface = renderer_get_surface
                                (tile_get_renderer(tile));

                        /* compensate child tiles' offset */
                        double xOffT, yOffT;
                        renderer_get_offset(tile_get_renderer(tile), &xOffT,
                                            &yOffT);
                        cairo_translate(cr, xOffT, yOffT);

                        /* compensate setup offset */
                        cairo_translate(cr,
                                        -xOff * ui_renderer_scale_factor(),
                                        -yOff * ui_renderer_scale_factor());

                        /* move to x/y */
                        LedFrameCord x, y;
                        led_tile_get_pos(t, &x, &y);
                        cairo_translate(cr,
                                        ((double) x) *
                                        ui_renderer_scale_factor(),
                                        ((double) y) *
                                        ui_renderer_scale_factor());

                        /* rotate around pivot */
                        double pX, pY;
                        led_tile_get_pivot(t, &pX, &pY);
                        cairo_translate(cr,
                                        pX * ui_renderer_scale_factor(),
                                        pY * ui_renderer_scale_factor());
                        cairo_rotate(cr, led_tile_get_rotation(t));
                        cairo_translate(cr,
                                        -pX * ui_renderer_scale_factor(),
                                        -pY * ui_renderer_scale_factor());

                        /* draw surface */
                        cairo_set_source_surface(cr, tsurface, 0, 0);

                        /* disable filtering */
                        cairo_pattern_set_filter(cairo_get_source(cr),
                                                 ui_renderer_filter());
                        /* disable antialiasing */
                        cairo_set_antialias(cr, ui_renderer_antialias());

                        /* render surface */
                        cairo_paint(cr);

                        /* reset transformation matrix */
                        cairo_identity_matrix(cr);
                }

                /* Draw chain of this hardware */
                /* s =
                 * chain_get_surface(led_chain_get_privdata(led_hardware_get_chain(h)));
                 * cairo_set_source_surface(cr, s, 0, 0); cairo_paint(cr); */

        }

        cairo_destroy(cr);

        return NFT_SUCCESS;
}
Exemple #5
0
/** renderer for chains */
static NftResult _render_chain(
        cairo_surface_t ** s,
        gpointer element)
{
        if(!s || !*s || !element)
                NFT_LOG_NULL(NFT_FAILURE);

        /* get this chain */
        NiftyconfChain *chain = (NiftyconfChain *) element;
        LedChain *c = chain_niftyled(chain);

        /* if dimensions changed, we need to allocate a new surface */
        int width = (led_chain_get_max_x(c) + 1) * renderer_scale_factor();
        int height = (led_chain_get_max_y(c) + 1) * renderer_scale_factor();

        NiftyconfRenderer *r = chain_get_renderer(chain);
        if(!renderer_resize(r, width, height))
        {
                g_error("Failed to resize renderer to %dx%d", width, height);
                return NFT_FAILURE;
        }


        /* create context for drawing */
        cairo_t *cr = cairo_create(*s);

        /* disable antialiasing */
        cairo_set_antialias(cr, CAIRO_ANTIALIAS_NONE);

        /* clear surface */
        cairo_set_source_rgba(cr, 0, 0, 0, 1);
        cairo_rectangle(cr,
                        0, 0,
                        (double) cairo_image_surface_get_width(*s),
                        (double) cairo_image_surface_get_height(*s));
        cairo_fill(cr);


        /* set line-width */
        cairo_set_line_width(cr, 1);



        /* walk all LEDs */
        LedCount i;
        for(i = 0; i < led_chain_get_ledcount(c); i++)
        {
                Led *l = led_chain_get_nth(c, i);
                NiftyconfLed *led = led_get_privdata(l);
                NiftyconfRenderer *lr = led_get_renderer(led);
                cairo_set_source_surface(cr, renderer_get_surface(lr),
                                         (double) led_get_x(l) *
                                         renderer_scale_factor(),
                                         (double) led_get_y(l) *
                                         renderer_scale_factor());
                cairo_paint(cr);
        }

        cairo_destroy(cr);


        return NFT_SUCCESS;
}