Changeset 3929 for neercs/trunk/src/wm.c


Ignore:
Timestamp:
Nov 18, 2009 1:28:38 PM (5 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.