Ignore:
Timestamp:
Nov 18, 2009 1:28:38 PM (4 years ago)
Author:
jylam
Message:
  • Use new caca_fill_triangle_textured API, fix backface culling bug, add warning if D_HAVE_TEXTURED_TRIANGLE is missing
File:
1 edited

Legend:

Unmodified
Added
Removed
  • neercs/trunk/src/wm.c

    r3927 r3929  
    2828{ 
    2929    caca_canvas_t *old, *new; 
    30  
     30     
    3131    if(w==s->w && h==s->h) return; 
    3232    if(w <= 0 || h <= 0) return; 
    33  
     33     
    3434    s->changed = 1; 
    35  
     35     
    3636    s->w = w; 
    3737    s->h = h; 
    38  
     38     
    3939    /* caca_set_canvas_boundaries() is bugged as hell, 
    4040     * so let's resize it by hands */ 
     
    4646    caca_free_canvas(old); 
    4747    set_tty_size(s->fd, w, h); 
    48  
     48     
    4949    s->orig_w = s->w; 
    5050    s->orig_h = s->h; 
     
    5858     
    5959    if(!screen_list->count) return; 
    60  
     60     
    6161    switch(screen_list->wm_type) 
    6262    { 
    63     case WM_CARD: 
    64         update_windows_props_cards(screen_list); 
    65         break; 
    66     case WM_HSPLIT: 
    67         update_windows_props_hsplit(screen_list); 
    68         break; 
    69     case WM_VSPLIT: 
    70         update_windows_props_vsplit(screen_list); 
    71         break; 
    72     case WM_FULL: 
    73     case WM_CUBE: 
    74     default: 
    75         update_windows_props_full(screen_list); 
    76         break; 
     63        case WM_CARD: 
     64            update_windows_props_cards(screen_list); 
     65            break; 
     66        case WM_HSPLIT: 
     67            update_windows_props_hsplit(screen_list); 
     68            break; 
     69        case WM_VSPLIT: 
     70            update_windows_props_vsplit(screen_list); 
     71            break; 
     72        case WM_FULL: 
     73        case WM_CUBE: 
     74        default: 
     75            update_windows_props_full(screen_list); 
     76            break; 
    7777    } 
    7878} 
     
    8383    int w = (screen_list->width / screen_list->count) - 1; 
    8484    int h = screen_list->height - 2; 
    85  
     85     
    8686    for(i = 0; i < screen_list->count; i++) 
    8787    { 
     
    106106    int w = screen_list->width - 2; 
    107107    int h = (screen_list->height) / screen_list->count; 
    108  
     108     
    109109    for(i = 0; i < screen_list->count; i++) 
    110110    { 
     
    130130    int w = screen_list->width - 2; 
    131131    int h = screen_list->height - 2; 
    132  
     132     
    133133    for(i = 0; i < screen_list->count; i++) 
    134134    { 
     
    136136        screen_list->screen[i]->x = 1; 
    137137        screen_list->screen[i]->y = 1; 
    138  
     138         
    139139        resize_screen(screen_list->screen[i], 
    140140                      w, h); 
     
    151151    int x = 1; 
    152152    int y = screen_list->count; 
    153  
     153     
    154154    for(i = 0; i < screen_list->count; i++) 
    155155    { 
     
    157157        screen_list->screen[i]->x = x; 
    158158        screen_list->screen[i]->y = y; 
    159  
     159         
    160160        resize_screen(screen_list->screen[i], 
    161161                      w, h); 
     
    442442{ 
    443443    int i; 
    444          
     444     
    445445    if(!screen_list->cube.in_switch) { 
    446446        wm_refresh_full(screen_list); 
     
    449449         
    450450#define CUBE_TIME 1000000 
    451  
     451         
    452452         
    453453         
     
    485485                angle = -angle; 
    486486             
    487             
    488487            for(i = 0; i < 12; i++) { 
    489              
     488                 
    490489                cube_transformed[i][2] = cube[i][2]*cos(angle) - cube[i][0]*sin(angle); 
    491490                cube_transformed[i][0] = cube[i][2]*sin(angle) + cube[i][0]*cos(angle); 
     
    503502                cube_projected[i][1] *= screen_list->height; 
    504503                 
    505  
     504                 
    506505            } 
     506            caca_set_color_ansi(screen_list->cv, CACA_WHITE, CACA_BLACK); 
    507507            caca_clear_canvas(screen_list->cv); 
    508508             
    509509#if defined HAVE_CACA_TRIANGLE_TEXTURING 
     510 
    510511            caca_canvas_t *first =  screen_list->screen[screen_list->prevpty]->cv; 
    511512            caca_canvas_t *second = screen_list->screen[screen_list->pty]->cv; 
    512  
     513             
     514            int coords[6]; 
     515            float uv[6]; 
     516             
     517             
    513518            if(get_direction(cube_projected[0][0], cube_projected[0][1],  
    514519                             cube_projected[1][0], cube_projected[1][1],  
    515520                             cube_projected[2][0], cube_projected[2][1]) >=0) { 
     521                coords[0] = cube_projected[0][0];  coords[1] = cube_projected[0][1]; 
     522                coords[2] = cube_projected[1][0];  coords[3] = cube_projected[1][1],  
     523                coords[4] = cube_projected[2][0];  coords[5] = cube_projected[2][1], 
     524                uv[0] = 1;  uv[1] = 1; 
     525                uv[2] = 0;  uv[3] = 1; 
     526                uv[4] = 0;  uv[5] = 0; 
    516527                caca_fill_triangle_textured(screen_list->cv,  
    517                                             cube_projected[0][0], cube_projected[0][1],  
    518                                             cube_projected[1][0], cube_projected[1][1],  
    519                                             cube_projected[2][0], cube_projected[2][1],  
    520                                             1, 1, 
    521                                             0, 1, 
    522                                             0, 0, 
    523                                             first); 
     528                                            coords, 
     529                                            first, 
     530                                            uv); 
     531                 
     532                coords[0] = cube_projected[0][0];  coords[1] = cube_projected[0][1]; 
     533                coords[2] = cube_projected[2][0];  coords[3] = cube_projected[2][1],  
     534                coords[4] = cube_projected[3][0];  coords[5] = cube_projected[3][1], 
     535                uv[0] = 1;  uv[1] = 1; 
     536                uv[2] = 0;  uv[3] = 0; 
     537                uv[4] = 1;  uv[5] = 0;       
    524538                caca_fill_triangle_textured(screen_list->cv,  
    525                                             cube_projected[0][0], cube_projected[0][1],  
    526                                             cube_projected[2][0], cube_projected[2][1],  
    527                                             cube_projected[3][0], cube_projected[3][1],  
    528                                             1, 1, 
    529                                             0, 0, 
    530                                             1, 0, 
    531                                             first); 
    532                  
    533                  
     539                                            coords,  
     540                                            first, 
     541                                            uv); 
    534542                caca_set_color_ansi(screen_list->cv, CACA_LIGHTGREEN, CACA_BLACK); 
    535543                caca_draw_thin_line(screen_list->cv,  
     
    554562                                 cube_projected[5][0], cube_projected[5][1],  
    555563                                 cube_projected[6][0], cube_projected[6][1]) >=0) { 
    556                 caca_fill_triangle_textured(screen_list->cv,  
    557                                             cube_projected[4][0], cube_projected[4][1],  
    558                                             cube_projected[5][0], cube_projected[5][1],  
    559                                             cube_projected[6][0], cube_projected[6][1],  
    560                                             1, 1, 
    561                                             0, 1, 
    562                                             0, 0, 
    563                                             second); 
    564                 caca_fill_triangle_textured(screen_list->cv,  
    565                                             cube_projected[4][0], cube_projected[4][1],  
    566                                             cube_projected[6][0], cube_projected[6][1],  
    567                                             cube_projected[7][0], cube_projected[7][1],  
    568                                             1, 1, 
    569                                             0, 0, 
    570                                             1, 0, 
    571                                             second); 
    572                 caca_set_color_ansi(screen_list->cv, CACA_RED, CACA_BLACK); 
    573  
    574                 caca_draw_thin_line(screen_list->cv,  
    575                                     cube_projected[4][0], cube_projected[4][1],  
    576                                     cube_projected[5][0], cube_projected[5][1]); 
    577                 caca_draw_thin_line(screen_list->cv,  
    578                                     cube_projected[5][0], cube_projected[5][1],  
    579                                     cube_projected[6][0], cube_projected[6][1]); 
    580                 caca_draw_thin_line(screen_list->cv,  
    581                                     cube_projected[6][0], cube_projected[6][1],  
    582                                     cube_projected[7][0], cube_projected[7][1]); 
    583                 caca_draw_thin_line(screen_list->cv,  
    584                                     cube_projected[7][0], cube_projected[7][1],  
    585                                     cube_projected[4][0], cube_projected[4][1]); 
     564                    coords[0] = cube_projected[4][0];  coords[1] = cube_projected[4][1]; 
     565                    coords[2] = cube_projected[5][0];  coords[3] = cube_projected[5][1],  
     566                    coords[4] = cube_projected[6][0];  coords[5] = cube_projected[6][1], 
     567                    uv[0] = 1;  uv[1] = 1; 
     568                    uv[2] = 0;  uv[3] = 1; 
     569                    uv[4] = 0;  uv[5] = 0; 
     570                     
     571                     
     572                        caca_fill_triangle_textured(screen_list->cv,  
     573                                                coords, 
     574                                                second, 
     575                                                uv); 
     576                    coords[0] = cube_projected[4][0];  coords[1] = cube_projected[4][1]; 
     577                    coords[2] = cube_projected[6][0];  coords[3] = cube_projected[6][1],  
     578                    coords[4] = cube_projected[7][0];  coords[5] = cube_projected[7][1], 
     579                    uv[0] = 1;  uv[1] = 1; 
     580                    uv[2] = 0;  uv[3] = 0; 
     581                    uv[4] = 1;  uv[5] = 0;       
     582                        caca_fill_triangle_textured(screen_list->cv,  
     583                                                coords, 
     584                                                second, 
     585                                                uv); 
     586                    caca_set_color_ansi(screen_list->cv, CACA_RED, CACA_BLACK); 
     587                     
     588                    caca_draw_thin_line(screen_list->cv,  
     589                                        cube_projected[4][0], cube_projected[4][1],  
     590                                        cube_projected[5][0], cube_projected[5][1]); 
     591                    caca_draw_thin_line(screen_list->cv,  
     592                                        cube_projected[5][0], cube_projected[5][1],  
     593                                        cube_projected[6][0], cube_projected[6][1]); 
     594                    caca_draw_thin_line(screen_list->cv,  
     595                                        cube_projected[6][0], cube_projected[6][1],  
     596                                        cube_projected[7][0], cube_projected[7][1]); 
     597                    caca_draw_thin_line(screen_list->cv,  
     598                                        cube_projected[7][0], cube_projected[7][1],  
     599                                        cube_projected[4][0], cube_projected[4][1]); 
    586600                } 
    587601                 
     
    591605                if(get_direction(cube_projected[9][0], cube_projected[9][1],  
    592606                                 cube_projected[8][0], cube_projected[8][1],  
    593                                  cube_projected[10][0], cube_projected[10][1])) { 
    594                 caca_fill_triangle_textured(screen_list->cv,  
    595                                             cube_projected[9][0], cube_projected[9][1],  
    596                                             cube_projected[8][0], cube_projected[8][1],  
    597                                             cube_projected[10][0], cube_projected[10][1],  
    598                                             1, 1, 
    599                                             0, 1, 
    600                                             1, 0, 
    601                                             second); 
    602                 caca_fill_triangle_textured(screen_list->cv,  
    603                                             cube_projected[8][0], cube_projected[8][1],  
    604                                             cube_projected[10][0], cube_projected[10][1],  
    605                                             cube_projected[11][0], cube_projected[11][1],  
    606                                             0, 1, 
    607                                             1, 0, 
    608                                             0, 0, 
    609                                             second); 
    610                 caca_set_color_ansi(screen_list->cv, CACA_RED, CACA_BLACK); 
    611                 caca_draw_thin_line(screen_list->cv,  
    612                                     cube_projected[8][0], cube_projected[8][1],  
    613                                     cube_projected[9][0], cube_projected[9][1]); 
    614                 caca_draw_thin_line(screen_list->cv,  
    615                                     cube_projected[9][0], cube_projected[9][1],  
    616                                     cube_projected[10][0], cube_projected[10][1]); 
    617                 caca_draw_thin_line(screen_list->cv,  
    618                                     cube_projected[10][0], cube_projected[10][1],  
    619                                     cube_projected[11][0], cube_projected[11][1]); 
    620                 caca_draw_thin_line(screen_list->cv,  
    621                                     cube_projected[11][0], cube_projected[11][1],  
    622                                     cube_projected[8][0], cube_projected[8][1]); 
     607                                 cube_projected[10][0], cube_projected[10][1]) > 0.0f) { 
     608                    coords[0] = cube_projected[9][0];  coords[1] = cube_projected[9][1]; 
     609                    coords[2] = cube_projected[8][0];  coords[3] = cube_projected[8][1],  
     610                    coords[4] = cube_projected[10][0];  coords[5] = cube_projected[10][1], 
     611                    uv[0] = 1;  uv[1] = 1; 
     612                    uv[2] = 0;  uv[3] = 1; 
     613                    uv[4] = 1;  uv[5] = 0; 
     614                     
     615                    caca_fill_triangle_textured(screen_list->cv,  
     616                                                coords, 
     617                                                second, 
     618                                                uv); 
     619                     
     620                    coords[0] = cube_projected[8][0];  coords[1] = cube_projected[8][1]; 
     621                    coords[2] = cube_projected[10][0];  coords[3] = cube_projected[10][1],  
     622                    coords[4] = cube_projected[11][0];  coords[5] = cube_projected[11][1], 
     623                    uv[0] = 0;  uv[1] = 1; 
     624                    uv[2] = 1;  uv[3] = 0; 
     625                    uv[4] = 0;  uv[5] = 0; 
     626                     
     627                    caca_fill_triangle_textured(screen_list->cv,  
     628                                                coords, 
     629                                                second, 
     630                                                uv); 
     631                    caca_set_color_ansi(screen_list->cv, CACA_RED, CACA_BLACK); 
     632                    caca_draw_thin_line(screen_list->cv,  
     633                                        cube_projected[8][0], cube_projected[8][1],  
     634                                        cube_projected[9][0], cube_projected[9][1]); 
     635                    caca_draw_thin_line(screen_list->cv,  
     636                                        cube_projected[9][0], cube_projected[9][1],  
     637                                        cube_projected[10][0], cube_projected[10][1]); 
     638                    caca_draw_thin_line(screen_list->cv,  
     639                                        cube_projected[10][0], cube_projected[10][1],  
     640                                        cube_projected[11][0], cube_projected[11][1]); 
     641                    caca_draw_thin_line(screen_list->cv,  
     642                                        cube_projected[11][0], cube_projected[11][1],  
     643                                        cube_projected[8][0], cube_projected[8][1]); 
    623644                } 
    624645            } 
     646#else 
     647#   warning temporary : HAVE_CACA_TRIANGLE_TEXTURING is not defined 
    625648#endif 
    626649             
Note: See TracChangeset for help on using the changeset viewer.