static gboolean expose(GtkWidget* widget, GdkEventExpose* e, gpointer data)
{
	struct program *p = (struct program *)data;
	GdkGLContext* context = gtk_widget_get_gl_context(widget);
	GdkGLDrawable* drawable = gtk_widget_get_gl_drawable(widget);
	(void)e;

	p->draw.width = widget->allocation.width;
	p->draw.height = widget->allocation.height;

	if (!gdk_gl_drawable_gl_begin(drawable, context))
		return FALSE;

	if (p->viewed.type == TYPE_TEXTURE)
		texture_draw(p);
	else
		draw_tri(p);

	if (gdk_gl_drawable_is_double_buffered (drawable))
		gdk_gl_drawable_swap_buffers(drawable);
	else
		glFlush();

	gdk_gl_drawable_gl_end(drawable);

	return TRUE;
}
示例#2
0
文件: player.c 项目: ryonagana/skiOS
void player_draw(void){

    /*
     * this condition gets the actual state of the screen
     *
     * */

    switch(SCR_Actual_State){

        /* *
         *  THIS state is when whe player is skiing down bot down left or down right
         * keeps  pushing   enemies on the screen in randomplaces every BOTTOM + 32 or LEFT + 32 or RIGHT + 32
         *
         * and updates  the coordenates of all enemies in actual position
         *
         * This event is intended to be called only when the player is skiing down
        */
        case FSM_SCR_RENDER_OBJECT:
            break;

        /* this event is  when the player is idle or  walking to SIDE or LEFT  (not down) */
        case FSM_SCR_WAIT:
            break;

    }




    if (ski_player.actor == NULL){
        DEBUG_PRINT("player_draw():  actor is NULL - FATAL ERROR");
        exit(1);
    }






    texture_draw(ski_player.actor->sprite, &ski_player.actor->x, &ski_player.actor->y, 0);



  
}
示例#3
0
/* ...redraw main application window */
static void objdet_redraw(display_data_t *display, void *data)
{
    app_data_t     *app = data;
    window_data_t  *window = app->window;
    GstBuffer      *buffer;

    /* ...retrieve pending buffer from rendering queue */
    while ((buffer = objdet_pop_buffer(app)) != NULL)
    {
        vsink_meta_t       *vmeta = gst_buffer_get_vsink_meta(buffer);
        objdet_meta_t      *ometa = gst_buffer_get_objdet_meta(buffer);
        texture_data_t     *texture = vmeta->priv;
        float               fps = window_frame_rate_update(window);
        cairo_t            *cr;

        /* ...add some performance monitors here - tbd */
        TRACE(INFO, _b("redraw frame: %u"), app->frame_num++);

		/* ...clear buffer before drawing anything */
		glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
		glClearDepthf(1.0f);
		glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);

        /* ...output buffer on screen */
        texture_draw(texture, &app->view, NULL, 1.0);

        /* ...get cairo drawing context */
        cr = window_get_cairo(window);

        /* ...set cairo transformation matrix for a given view-port - tbd */
        cairo_save(cr);
        
        /* ...apply visualization matrix */
        cairo_set_matrix(cr, &app->matrix);

        /* ...visualize detection data as required */
        objdet_engine_ldw_draw(app->od, &ometa->scene, cr);

        /* ...restore transformation matrix */
        cairo_restore(cr);

        /* ...output current vehicle status? - use unprocessed frame, maybe... */
        if (app->flags & APP_FLAG_DEBUG)
        {
            /* ...output frame-rate in the upper-left corner */
            cairo_set_source_rgba(cr, 1, 1, 1, 0.5);
            cairo_move_to(cr, 40, 80);
            draw_string(cr, "%.1f FPS", fps);
        }
        else
        {
            TRACE(DEBUG, _b("fps: %.2f"), fps);
        }

        /* ...output GUI graphics as needed */
        gui_redraw(app->gui, cr);

        /* ...release cairo drawing context */
        window_put_cairo(window, cr);

        /* ...submit window to composer */
        window_draw(window);

        /* ...return buffer to the pool */
        gst_buffer_unref(buffer);
    }

    TRACE(DEBUG, _b("frontal camera drawing complete.."));
}
示例#4
0
void game_textout_adv(rs_texture_t *dest, int x, int y, int font_index, int draw_mode, char* s) {
//void game_textout(int x, int y, int font_index, char* s) {
    
    int i = 0;
    while (*s) {
        if (*s != ' ') {
            texture_draw(&game.framebuffer, &game.tex_font[ 64*font_index + ((*s - 48) % 64) ], x+i*game.tex_font[64*font_index+0].w, y, draw_mode);
        };
        s++;
        i++;
    };
    
//    for (i = 0; i < 8; i++) {
//        texture_draw(&game.framebuffer, &game.tex_font[i], 40+8+game.tx+i*game.tex_font[i].w, 80+game.ty, DRAW_MODE_ALPHA);
//    }
    
    

//    //char *s = "12345_QUICK_BROWN_FOX_JUMPS_OVER_A_LAZY_DOG";
//
//    float w = 2.0*h/3.0;
//    int len = strlen(s);
//
//    x -= (float) align * 0.5 * len * w;
//
//    float sx = 0.0;
//    float sy = 0.0;
//
//
//
//    int i;
//    for (i = 0; i < len; i++) {
//        unsigned char c = s[i];
//
//        if (c == '\n') {
//            sx = 0.0;
//            sy += h;
//            continue;
//        };
//
//        if (c == ' ') {
//            sx += w;
//            continue;
//        };
//
//        c = (c-48)%64;
//        float tx = 1.0 / 8.0 * (c % 8);
//        float ty = 1.0 / 8.0 * (c / 8);
//
//        glUniform4fv( game.text_shader[RS_SH_SCALE_ID], 1, &(game_colors[4*0]) ); // black shadow
//        glrsDrawRect_full(sx + x + h/12,
//                          sy + y-h/2 + h/12,
//                          sx + x + w + h/12,
//                          sy + y+h/2 + h/12,
//                          tx, ty, tx+1.0/8.0, ty+1.0/8.0,
//                          game.text_shader[RS_SH_POS_ID], game.text_shader[RS_SH_UV_ID],
//                          0.0, 0.0, 0.0 );
//
//        glUniform4fv( game.text_shader[RS_SH_SCALE_ID], 1, &(game_colors[4*color]) );
////        glUniform3f( game.text_shader[RS_SH_TIME_ID], 1.0, 1.0, 0.0 );
//        glrsDrawRect_full(sx + x,
//                          sy + y-h/2,
//                          sx + x + w,
//                          sy + y+h/2,
//                          tx, ty, tx+1.0/8.0, ty+1.0/8.0,
//                          game.text_shader[RS_SH_POS_ID], game.text_shader[RS_SH_UV_ID],
//                          0.0, 0.0, 0.0 );
//        sx += w;
//    }

};
示例#5
0
void game_draw() {

	int w = 320;
	int h = 180;
	

	int kk = 20; // (rskos_get_time()/1) % 160;


    texture_clear(&game.framebuffer, game.bg_color );
    
    game.bg_color = COLOR_BLACK;
    

    int i, c, c2, c3;
    for (i = 0; i < 100; i++) {
        c = (0.5+0.45*rs_noise(kk+150, kk+i))*255;
        c2 = c + 0.05*rs_noise(kk+150, kk+i)*255;
        c3 = c2; // (0.5+0.49*rs_noise(kk+150, kk+i+2))*255;
        texture_set_pixel(&game.framebuffer, (0.5+0.49*rs_noise(kk+1100, kk+i))*GAME_WIDTH, (0.5+0.49*rs_noise(kk+1200, kk+i+1300))*GAME_HEIGHT, 
                          c + (c2<<8) + (c3<<16) + 0xFF000000);
    };

    texture_clear(&game.tex_ground, COLOR_TRANSPARENT);
    rs_perlin_configure(47, 4, 0.5, 1000, 256);
    for (i = 0; i < game.tex_ground.w; i++) {
        texture_draw_vline(&game.tex_ground, i, 25 + rs_perlin(0,i+game.tz)*25, 2, 0xFF113300);
        texture_draw_vline(&game.tex_ground, i, 25 + rs_perlin(0,i+game.tz)*25 + 2, 999, 0xFF000000);
    };
    
    

    if (game.status == STATUS_MENU) {

        char **title = menu_titles[game.menu_index]; 
        int y = (game.menu_index == MENU_MAIN) ? 80 : 50;
        texture_draw(&game.framebuffer, &game.tex_gui_line, 0, y+15*game.menu_item_index, DRAW_MODE_ALPHA);
        while (*title) {
            game_textout(20, y, (*(title))[0]==' ' ? 3 : 0 , (*(title))+1 );  // first (zero) char defines action, title starts from second (1st) char
            title++;
            y+=15;
        };
        
        if (game.menu_index == MENU_MAIN) {
                
            for (i = 0; i < 3; i++) {
                texture_draw(&game.framebuffer, &game.tex_rocks[i], 250+80*rs_noise(i,150), 60+60*rs_noise(i,1110), DRAW_MODE_ADDITIVE );
            };
                
            game_textout( GAME_WIDTH/2 - 100, 40, 1,  "HELI0THRYX");
//            game_textout( GAME_WIDTH/2 - 8, 58, 3,  "TECHDEM0");
            game_textout( 2, GAME_HEIGHT-10, 2,  L_BOTTOM_LINE_DEVELOPER_INFO);
        };
    
    }
    else {
        
        int i, j;
        game_obj_t *obj;
        for (i = 0; i < game.objs_count; i++) {
            obj = &(game.objs[i]);
            
            if (obj->obj_type == OBJ_BULLET) {
                    
                texture_set_pixel(&game.framebuffer, obj->x-4, obj->y, 0xFF00BB00);
                texture_set_pixel(&game.framebuffer, obj->x-3, obj->y, 0xFF00CC00);
                texture_set_pixel(&game.framebuffer, obj->x-2, obj->y, 0xFF00DD00);
                texture_set_pixel(&game.framebuffer, obj->x-1, obj->y, 0xFF00EE00);
                texture_set_pixel(&game.framebuffer, obj->x-0, obj->y, 0xFF00FF00);
                
            }
            else if (obj->obj_type == OBJ_RED_BULLET) {
                    
                texture_set_pixel(&game.framebuffer, obj->x-1, obj->y-0, 0xFFFF0000);
                texture_set_pixel(&game.framebuffer, obj->x-1, obj->y-1, 0xFFFF6600);
                texture_set_pixel(&game.framebuffer, obj->x-1, obj->y-0, 0xFFFF0000);
                texture_set_pixel(&game.framebuffer, obj->x-0, obj->y-1, 0xFFFF0000);
                texture_set_pixel(&game.framebuffer, obj->x-0, obj->y-0, 0xFFFF6600);
                texture_set_pixel(&game.framebuffer, obj->x+1, obj->y-1, 0xFFFF0000);
                texture_set_pixel(&game.framebuffer, obj->x+1, obj->y-0, 0xFFFF6600);
                
            }
            else if (obj->obj_type == OBJ_EXPLOSION) {
                texture_draw( &game.framebuffer, &game.tex_explosions[ obj->t ], obj->x - obj->radius, obj->y - obj->radius, DRAW_MODE_ALPHA );
            }
            else if (obj->obj_type == OBJ_HUGE_EXPLOSION) {
                texture_draw( &game.framebuffer, &game.tex_huge_explosions[ obj->t ], obj->x - obj->radius, obj->y - obj->radius, DRAW_MODE_ALPHA );
            }
            else if (obj->obj_type == OBJ_ROCK) {
                texture_draw( &game.framebuffer, &game.tex_rocks[ obj->tag ], obj->x - obj->radius, obj->y - obj->radius, DRAW_MODE_ALPHA );
            }
            else if (obj->obj_type == OBJ_MINIROCK) {
                texture_draw( &game.framebuffer, &game.tex_minirocks[ obj->tag ], obj->x - obj->radius, obj->y - obj->radius, DRAW_MODE_ALPHA );
            }
            else if (obj->obj_type == OBJ_TURRET) {
                texture_draw( &game.framebuffer, &game.tex_rocks[ 0 ], obj->x - obj->radius, obj->y - obj->radius, DRAW_MODE_ALPHA );
                texture_draw( &game.framebuffer, &game.tex_rocks[ 0 ], obj->x - obj->radius, obj->y - obj->radius, DRAW_MODE_ADDITIVE );
                
                for (j = 0; j < 1 + (obj->tag)/6; j++) {
                    texture_draw_vline(&game.framebuffer, obj->x - obj->radius + j*4 + 0, obj->y - obj->radius - 16, 8, 0xFF993333 );
                    texture_draw_vline(&game.framebuffer, obj->x - obj->radius + j*4 + 1, obj->y - obj->radius - 16, 8, 0xFF993333 );
                    texture_draw_vline(&game.framebuffer, obj->x - obj->radius + j*4 + 2, obj->y - obj->radius - 16, 8, 0xFF993333 );
                };
                
            }

        };
        
 
        texture_draw(&game.framebuffer, &game.tex_ship[0], game.player_x-8, game.player_y-4, DRAW_MODE_ALPHA);
        texture_draw(&game.framebuffer, &game.tex_ship[1], game.player_x-8, game.player_y-4, DRAW_MODE_ALPHA);
        texture_draw(&game.framebuffer, &game.tex_ship[2], game.player_x, game.player_y-4, DRAW_MODE_ALPHA);
        texture_draw(&game.framebuffer, &game.tex_ship[3], game.player_x, game.player_y-4, DRAW_MODE_ALPHA);
        
        
        if ( game.stage == 0 ) {
                
            int stage_label_y = GAME_HEIGHT/3 - (game.stage_timer - 25)*(game.stage_timer - 25)*(game.stage_timer - 25)/100;
                
            //game_textout_at_center( 0, GAME_HEIGHT + 50 - game.stage_timer*(GAME_HEIGHT+50)/50, 1, "LEVEL 1" );
            
            char stage_str[] = "5TAGE xx";
            char *stage_num = &stage_str[6];
            
            if ( (game.stage_level+1) > 9 ) {
                stage_num[0] = '0' + (game.stage_level+1)/10;
                stage_num[1] = '0' + (game.stage_level+1)%10;
            }
            else {
                stage_num[0] = '0' + (game.stage_level+1)%10;
                stage_num[1] = 0;
            };
            
            game_textout_at_center( -10, stage_label_y, 1, stage_str );
            
            if ( IS_BIT_CLEARED ( game.flags, GAME_FLAG_INSTRUCTIONS_PASSED ) ) {
                game_textout_at_center( 0, GAME_HEIGHT*3/4, 2, L_TECHDEMO_LINE1 );
            };
        }
        
        char s_score[] = "0000";
        s_score[0] += (game.score / 1000) % 10;
        s_score[1] += (game.score / 100) % 10;
        s_score[2] += (game.score / 10) % 10;
        s_score[3] += (game.score / 1) % 10;
        
        game_textout_at_center(0, 10, 3, s_score);
        
        
        
        
        char s_health[] = "HEALTH: 0 ";
        char s_ammo[] = "AMM0: 00 ";
        
        s_health[8] += game.health;
        s_ammo[6] += game.ammo / 10;
        s_ammo[7] += game.ammo % 10;
        
        game_textout(8, 8, 2, s_health);
        game_textout(GAME_WIDTH - 12 - GAME_AMMO_MAX*2 - 1, 8, 2, s_ammo);
        
        for (i = 0; i < game.ammo; i++) {
            texture_draw_vline(&game.framebuffer, GAME_WIDTH - 12 - GAME_AMMO_MAX*2 + i*2, 20, 8, 0xFF3366FF );
        };
        
        int health_color = 0xFF339933;
        if (game.health < 5) {
            health_color = 0xFF808010;
        };
        if (game.health < 3) {
            health_color = 0xFFFF3300;
        };

        for (i = 0; i < game.health; i++) {
            texture_draw_vline(&game.framebuffer, 8 + i*4 + 0, 20, 8, health_color  );
            texture_draw_vline(&game.framebuffer, 8 + i*4 + 1, 20, 8, health_color  );
            texture_draw_vline(&game.framebuffer, 8 + i*4 + 2, 20, 8, health_color  );
        };
        

        
    };

    texture_draw(&game.tex_ground, &game.tex_clouds, game.tz, 0, /* game.tx, game.ty, */ DRAW_MODE_ADDITIVE | DRAW_TILED_FLAG );
    texture_draw(&game.framebuffer, &game.tex_ground, 0, GAME_HEIGHT-50, DRAW_MODE_ALPHA);


	rskos_draw_area(0, 0, w, h, game.window_scale, game.framebuffer.data, game.scaled_framebuffer);

};