Ignore:
Timestamp:
Apr 18, 2006, 5:11:25 PM (14 years ago)
Author:
Sam Hocevar
Message:
  • Renamed caca_t into caca_display_t.
  • Renamed canvas handle variables from "c" to "cv". Eh ouais mon gros.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libcaca/trunk/caca/driver_gl.c

    r810 r811  
    4242 */
    4343
    44 static caca_t *gl_kk; /* FIXME: we ought to get rid of this */
     44static caca_display_t *gl_d; /* FIXME: we ought to get rid of this */
    4545
    4646/*
     
    7777};
    7878
    79 static int gl_init_graphics(caca_t *kk)
     79static int gl_init_graphics(caca_display_t *dp)
    8080{
    8181    char *empty_texture;
     
    8686    int i;
    8787
    88     kk->drv.p = malloc(sizeof(struct driver_private));
    89 
    90     gl_kk = kk;
     88    dp->drv.p = malloc(sizeof(struct driver_private));
     89
     90    gl_d = dp;
    9191
    9292#if defined(HAVE_GETENV)
     
    9797
    9898    if(width && height)
    99         _cucul_set_size(kk->c, width, height);
    100 
    101     kk->drv.p->font_width = 9;
    102     kk->drv.p->font_height = 15;
    103 
    104     kk->drv.p->width = kk->c->width * kk->drv.p->font_width;
    105     kk->drv.p->height = kk->c->height * kk->drv.p->font_height;
     99        _cucul_set_size(dp->cv, width, height);
     100
     101    dp->drv.p->font_width = 9;
     102    dp->drv.p->font_height = 15;
     103
     104    dp->drv.p->width = dp->cv->width * dp->drv.p->font_width;
     105    dp->drv.p->height = dp->cv->height * dp->drv.p->font_height;
    106106
    107107#ifdef HAVE_GLUTCLOSEFUNC
    108     kk->drv.p->close = 0;
    109 #endif
    110     kk->drv.p->bit = 0;
    111 
    112     kk->drv.p->mouse_changed = kk->drv.p->mouse_clicked = 0;
    113     kk->drv.p->mouse_button = kk->drv.p->mouse_state = 0;
    114 
    115     kk->drv.p->key = 0;
    116     kk->drv.p->special_key = 0;
    117 
    118     kk->drv.p->sw = 9.0f / 16.0f;
    119     kk->drv.p->sh = 15.0f / 16.0f;
     108    dp->drv.p->close = 0;
     109#endif
     110    dp->drv.p->bit = 0;
     111
     112    dp->drv.p->mouse_changed = dp->drv.p->mouse_clicked = 0;
     113    dp->drv.p->mouse_button = dp->drv.p->mouse_state = 0;
     114
     115    dp->drv.p->key = 0;
     116    dp->drv.p->special_key = 0;
     117
     118    dp->drv.p->sw = 9.0f / 16.0f;
     119    dp->drv.p->sh = 15.0f / 16.0f;
    120120
    121121    glutInit(&argc, argv);
    122122
    123123    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
    124     glutInitWindowSize(kk->drv.p->width, kk->drv.p->height);
    125     kk->drv.p->window = glutCreateWindow("caca for GL");
    126 
    127     gluOrtho2D(0, kk->drv.p->width, kk->drv.p->height, 0);
     124    glutInitWindowSize(dp->drv.p->width, dp->drv.p->height);
     125    dp->drv.p->window = glutCreateWindow("caca for GL");
     126
     127    gluOrtho2D(0, dp->drv.p->width, dp->drv.p->height, 0);
    128128
    129129    glDisable(GL_CULL_FACE);
     
    148148    glPushMatrix();
    149149    glLoadIdentity();
    150     gluOrtho2D(0, kk->drv.p->width, kk->drv.p->height, 0);
     150    gluOrtho2D(0, dp->drv.p->width, dp->drv.p->height, 0);
    151151
    152152    glMatrixMode(GL_MODELVIEW);
     
    163163    for(i = 32; i < 128; i++)
    164164    {
    165         glGenTextures(1, (GLuint*)&kk->drv.p->id[i - 32]);
    166         glBindTexture(GL_TEXTURE_2D, kk->drv.p->id[i - 32]);
     165        glGenTextures(1, (GLuint*)&dp->drv.p->id[i - 32]);
     166        glBindTexture(GL_TEXTURE_2D, dp->drv.p->id[i - 32]);
    167167        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    168168        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
     
    181181
    182182        glEnable(GL_TEXTURE_2D);
    183         glBindTexture(GL_TEXTURE_2D, kk->drv.p->id[i - 32]);
     183        glBindTexture(GL_TEXTURE_2D, dp->drv.p->id[i - 32]);
    184184        glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB,
    185                          0, kk->drv.p->height - 16, 16, 16, 0);
     185                         0, dp->drv.p->height - 16, 16, 16, 0);
    186186
    187187#ifdef HAVE_GLUTCHECKLOOP
     
    196196}
    197197
    198 static int gl_end_graphics(caca_t *kk)
    199 {
    200     glutDestroyWindow(kk->drv.p->window);
    201     free(kk->drv.p);
     198static int gl_end_graphics(caca_display_t *dp)
     199{
     200    glutDestroyWindow(dp->drv.p->window);
     201    free(dp->drv.p);
    202202    return 0;
    203203}
    204204
    205 static int gl_set_window_title(caca_t *kk, char const *title)
     205static int gl_set_window_title(caca_display_t *dp, char const *title)
    206206{
    207207    glutSetWindowTitle(title);
     
    209209}
    210210
    211 static unsigned int gl_get_window_width(caca_t *kk)
    212 {
    213     return kk->drv.p->width;
    214 }
    215 
    216 static unsigned int gl_get_window_height(caca_t *kk)
    217 {
    218     return kk->drv.p->height;
    219 }
    220 
    221 static void gl_display(caca_t *kk)
     211static unsigned int gl_get_window_width(caca_display_t *dp)
     212{
     213    return dp->drv.p->width;
     214}
     215
     216static unsigned int gl_get_window_height(caca_display_t *dp)
     217{
     218    return dp->drv.p->height;
     219}
     220
     221static void gl_display(caca_display_t *dp)
    222222{
    223223    unsigned int x, y, line;
     
    226226
    227227    line = 0;
    228     for(y = 0; y < kk->drv.p->height; y += kk->drv.p->font_height)
    229     {
    230         uint32_t *attr = kk->c->attr + line * kk->c->width;
    231 
    232         for(x = 0; x < kk->drv.p->width; x += kk->drv.p->font_width)
     228    for(y = 0; y < dp->drv.p->height; y += dp->drv.p->font_height)
     229    {
     230        uint32_t *attr = dp->cv->attr + line * dp->cv->width;
     231
     232        for(x = 0; x < dp->drv.p->width; x += dp->drv.p->font_width)
    233233        {
    234234            uint16_t bg = _cucul_argb32_to_rgb12bg(*attr++);
     
    239239            glBegin(GL_QUADS);
    240240                glVertex2f(x, y);
    241                 glVertex2f(x + kk->drv.p->font_width, y);
    242                 glVertex2f(x + kk->drv.p->font_width,
    243                            y + kk->drv.p->font_height);
    244                 glVertex2f(x, y + kk->drv.p->font_height);
     241                glVertex2f(x + dp->drv.p->font_width, y);
     242                glVertex2f(x + dp->drv.p->font_width,
     243                           y + dp->drv.p->font_height);
     244                glVertex2f(x, y + dp->drv.p->font_height);
    245245            glEnd();
    246246        }
     
    255255
    256256    line = 0;
    257     for(y = 0; y < kk->drv.p->height; y += kk->drv.p->font_height)
    258     {
    259         uint32_t *attr = kk->c->attr + line * kk->c->width;
    260         uint32_t *chars = kk->c->chars + line * kk->c->width;
    261 
    262         for(x = 0; x < kk->drv.p->width; x += kk->drv.p->font_width)
     257    for(y = 0; y < dp->drv.p->height; y += dp->drv.p->font_height)
     258    {
     259        uint32_t *attr = dp->cv->attr + line * dp->cv->width;
     260        uint32_t *chars = dp->cv->chars + line * dp->cv->width;
     261
     262        for(x = 0; x < dp->drv.p->width; x += dp->drv.p->font_width)
    263263        {
    264             uint32_t c = *chars++;
    265 
    266             if(c > 0x00000020 && c < 0x00000080)
     264            uint32_t cv = *chars++;
     265
     266            if(cv > 0x00000020 && cv < 0x00000080)
    267267            {
    268268                uint16_t fg = _cucul_argb32_to_rgb12fg(*attr);
    269                 glBindTexture(GL_TEXTURE_2D, kk->drv.p->id[c - 32]);
     269                glBindTexture(GL_TEXTURE_2D, dp->drv.p->id[cv - 32]);
    270270                glColor3b(((fg & 0xf00) >> 8) * 8,
    271271                          ((fg & 0x0f0) >> 4) * 8,
    272272                          (fg & 0x00f) * 8);
    273273                glBegin(GL_QUADS);
    274                     glTexCoord2f(0, kk->drv.p->sh);
     274                    glTexCoord2f(0, dp->drv.p->sh);
    275275                    glVertex2f(x, y);
    276                     glTexCoord2f(kk->drv.p->sw, kk->drv.p->sh);
    277                     glVertex2f(x + kk->drv.p->font_width, y);
    278                     glTexCoord2f(kk->drv.p->sw, 0);
    279                     glVertex2f(x + kk->drv.p->font_width,
    280                                y + kk->drv.p->font_height);
     276                    glTexCoord2f(dp->drv.p->sw, dp->drv.p->sh);
     277                    glVertex2f(x + dp->drv.p->font_width, y);
     278                    glTexCoord2f(dp->drv.p->sw, 0);
     279                    glVertex2f(x + dp->drv.p->font_width,
     280                               y + dp->drv.p->font_height);
    281281                    glTexCoord2f(0, 0);
    282                     glVertex2f(x, y + kk->drv.p->font_height);
     282                    glVertex2f(x, y + dp->drv.p->font_height);
    283283                glEnd();
    284284            }
     
    300300}
    301301
    302 static void gl_handle_resize(caca_t *kk)
    303 {
    304     kk->drv.p->width = kk->drv.p->new_width;
    305     kk->drv.p->height = kk->drv.p->new_height;
     302static void gl_handle_resize(caca_display_t *dp)
     303{
     304    dp->drv.p->width = dp->drv.p->new_width;
     305    dp->drv.p->height = dp->drv.p->new_height;
    306306
    307307    glMatrixMode(GL_PROJECTION);
     
    309309    glLoadIdentity();
    310310
    311     glViewport(0, 0, kk->drv.p->width, kk->drv.p->height);
    312     gluOrtho2D(0, kk->drv.p->width, kk->drv.p->height, 0);
     311    glViewport(0, 0, dp->drv.p->width, dp->drv.p->height);
     312    gluOrtho2D(0, dp->drv.p->width, dp->drv.p->height, 0);
    313313    glMatrixMode(GL_MODELVIEW);
    314314}
    315315
    316 static int gl_get_event(caca_t *kk, caca_event_t *ev)
     316static int gl_get_event(caca_display_t *dp, caca_event_t *ev)
    317317{
    318318#ifdef HAVE_GLUTCHECKLOOP
     
    323323
    324324#ifdef HAVE_GLUTCLOSEFUNC
    325     if(kk->drv.p->close)
    326     {
    327         kk->drv.p->close = 0;
     325    if(dp->drv.p->close)
     326    {
     327        dp->drv.p->close = 0;
    328328        ev->type = CACA_EVENT_QUIT;
    329329        return 1;
     
    331331#endif
    332332
    333     if(kk->resize.resized)
     333    if(dp->resize.resized)
    334334    {
    335335        ev->type = CACA_EVENT_RESIZE;
    336         ev->data.resize.w = kk->c->width;
    337         ev->data.resize.h = kk->c->height;
     336        ev->data.resize.w = dp->cv->width;
     337        ev->data.resize.h = dp->cv->height;
    338338        return 1;
    339339    }
    340340
    341     if(kk->drv.p->mouse_changed)
     341    if(dp->drv.p->mouse_changed)
    342342    {
    343343        ev->type = CACA_EVENT_MOUSE_MOTION;
    344         ev->data.mouse.x = kk->mouse.x;
    345         ev->data.mouse.y = kk->mouse.y;
    346         kk->drv.p->mouse_changed = 0;
    347 
    348         if(kk->drv.p->mouse_clicked)
     344        ev->data.mouse.x = dp->mouse.x;
     345        ev->data.mouse.y = dp->mouse.y;
     346        dp->drv.p->mouse_changed = 0;
     347
     348        if(dp->drv.p->mouse_clicked)
    349349        {
    350             _push_event(kk, ev);
     350            _push_event(dp, ev);
    351351            ev->type = CACA_EVENT_MOUSE_PRESS;
    352             ev->data.mouse.button = kk->drv.p->mouse_button;
    353             kk->drv.p->mouse_clicked = 0;
     352            ev->data.mouse.button = dp->drv.p->mouse_button;
     353            dp->drv.p->mouse_clicked = 0;
    354354        }
    355355
     
    357357    }
    358358
    359     if(kk->drv.p->key != 0)
     359    if(dp->drv.p->key != 0)
    360360    {
    361361        ev->type = CACA_EVENT_KEY_PRESS;
    362         ev->data.key.ch = kk->drv.p->key;
    363         ev->data.key.ucs4 = (uint32_t)kk->drv.p->key;
    364         ev->data.key.utf8[0] = kk->drv.p->key;
     362        ev->data.key.ch = dp->drv.p->key;
     363        ev->data.key.ucs4 = (uint32_t)dp->drv.p->key;
     364        ev->data.key.utf8[0] = dp->drv.p->key;
    365365        ev->data.key.utf8[1] = '\0';
    366         kk->drv.p->key = 0;
     366        dp->drv.p->key = 0;
    367367        return 1;
    368368    }
    369369
    370     if(kk->drv.p->special_key != 0)
    371     {
    372         switch(kk->drv.p->special_key)
     370    if(dp->drv.p->special_key != 0)
     371    {
     372        switch(dp->drv.p->special_key)
    373373        {
    374374            case GLUT_KEY_F1 : ev->data.key.ch = CACA_KEY_F1; break;
     
    395395        ev->data.key.utf8[0] = '\0';
    396396
    397         kk->drv.p->special_key = 0;
     397        dp->drv.p->special_key = 0;
    398398        return 1;
    399399    }
     
    404404
    405405
    406 static void gl_set_mouse(caca_t *kk, int flag)
     406static void gl_set_mouse(caca_display_t *dp, int flag)
    407407{
    408408    if(flag)
     
    418418static void gl_handle_keyboard(unsigned char key, int x, int y)
    419419{
    420     caca_t *kk = gl_kk;
    421 
    422     kk->drv.p->key = key;
     420    caca_display_t *dp = gl_d;
     421
     422    dp->drv.p->key = key;
    423423}
    424424
    425425static void gl_handle_special_key(int key, int x, int y)
    426426{
    427     caca_t *kk = gl_kk;
    428 
    429     kk->drv.p->special_key = key;
     427    caca_display_t *dp = gl_d;
     428
     429    dp->drv.p->special_key = key;
    430430}
    431431
    432432static void gl_handle_reshape(int w, int h)
    433433{
    434     caca_t *kk = gl_kk;
    435 
    436     if(kk->drv.p->bit) /* Do not handle reshaping at the first time */
    437     {
    438         kk->drv.p->new_width = w;
    439         kk->drv.p->new_height = h;
    440 
    441         kk->resize.w = w / kk->drv.p->font_width;
    442         kk->resize.h = (h / kk->drv.p->font_height) + 1;
    443 
    444         kk->resize.resized = 1;
     434    caca_display_t *dp = gl_d;
     435
     436    if(dp->drv.p->bit) /* Do not handle reshaping at the first time */
     437    {
     438        dp->drv.p->new_width = w;
     439        dp->drv.p->new_height = h;
     440
     441        dp->resize.w = w / dp->drv.p->font_width;
     442        dp->resize.h = (h / dp->drv.p->font_height) + 1;
     443
     444        dp->resize.resized = 1;
    445445    }
    446446    else
    447         kk->drv.p->bit = 1;
     447        dp->drv.p->bit = 1;
    448448}
    449449
    450450static void gl_handle_mouse(int button, int state, int x, int y)
    451451{
    452     caca_t *kk = gl_kk;
    453 
    454     kk->drv.p->mouse_clicked = 1;
    455     kk->drv.p->mouse_button = button;
    456     kk->drv.p->mouse_state = state;
    457     kk->drv.p->mouse_x = x / kk->drv.p->font_width;
    458     kk->drv.p->mouse_y = y / kk->drv.p->font_height;
    459     kk->mouse.x = kk->drv.p->mouse_x;
    460     kk->mouse.y = kk->drv.p->mouse_y;
    461     kk->drv.p->mouse_changed = 1;
     452    caca_display_t *dp = gl_d;
     453
     454    dp->drv.p->mouse_clicked = 1;
     455    dp->drv.p->mouse_button = button;
     456    dp->drv.p->mouse_state = state;
     457    dp->drv.p->mouse_x = x / dp->drv.p->font_width;
     458    dp->drv.p->mouse_y = y / dp->drv.p->font_height;
     459    dp->mouse.x = dp->drv.p->mouse_x;
     460    dp->mouse.y = dp->drv.p->mouse_y;
     461    dp->drv.p->mouse_changed = 1;
    462462}
    463463
    464464static void gl_handle_mouse_motion(int x, int y)
    465465{
    466     caca_t *kk = gl_kk;
    467     kk->drv.p->mouse_x = x / kk->drv.p->font_width;
    468     kk->drv.p->mouse_y = y / kk->drv.p->font_height;
    469     kk->mouse.x = kk->drv.p->mouse_x;
    470     kk->mouse.y = kk->drv.p->mouse_y;
    471     kk->drv.p->mouse_changed = 1;
     466    caca_display_t *dp = gl_d;
     467    dp->drv.p->mouse_x = x / dp->drv.p->font_width;
     468    dp->drv.p->mouse_y = y / dp->drv.p->font_height;
     469    dp->mouse.x = dp->drv.p->mouse_x;
     470    dp->mouse.y = dp->drv.p->mouse_y;
     471    dp->drv.p->mouse_changed = 1;
    472472}
    473473
     
    475475static void gl_handle_close(void)
    476476{
    477     caca_t *kk = gl_kk;
    478     kk->drv.p->close = 1;
     477    caca_display_t *dp = gl_d;
     478    dp->drv.p->close = 1;
    479479}
    480480#endif
     
    482482static void _display(void)
    483483{
    484     caca_t *kk = gl_kk;
    485     gl_display(kk);
     484    caca_display_t *dp = gl_d;
     485    gl_display(dp);
    486486}
    487487
     
    491491 */
    492492
    493 int gl_install(caca_t *kk)
     493int gl_install(caca_display_t *dp)
    494494{
    495495#if defined(HAVE_GETENV) && defined(GLUT_XLIB_IMPLEMENTATION)
     
    498498#endif
    499499
    500     kk->drv.driver = CACA_DRIVER_GL;
    501 
    502     kk->drv.init_graphics = gl_init_graphics;
    503     kk->drv.end_graphics = gl_end_graphics;
    504     kk->drv.set_window_title = gl_set_window_title;
    505     kk->drv.get_window_width = gl_get_window_width;
    506     kk->drv.get_window_height = gl_get_window_height;
    507     kk->drv.display = gl_display;
    508     kk->drv.handle_resize = gl_handle_resize;
    509     kk->drv.get_event = gl_get_event;
    510     kk->drv.set_mouse = gl_set_mouse;
     500    dp->drv.driver = CACA_DRIVER_GL;
     501
     502    dp->drv.init_graphics = gl_init_graphics;
     503    dp->drv.end_graphics = gl_end_graphics;
     504    dp->drv.set_window_title = gl_set_window_title;
     505    dp->drv.get_window_width = gl_get_window_width;
     506    dp->drv.get_window_height = gl_get_window_height;
     507    dp->drv.display = gl_display;
     508    dp->drv.handle_resize = gl_handle_resize;
     509    dp->drv.get_event = gl_get_event;
     510    dp->drv.set_mouse = gl_set_mouse;
    511511
    512512    return 0;
Note: See TracChangeset for help on using the changeset viewer.