Changeset 483
- Timestamp:
- Jun 21, 2005, 3:28:51 PM (16 years ago)
- Location:
- libcaca/trunk
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
libcaca/trunk/configure.ac
r475 r483 36 36 AC_ARG_ENABLE(x11, 37 37 [ --enable-x11 X11 support (autodetected)]) 38 AC_ARG_ENABLE(gl, 39 [ --enable-gl OpenGL support (autodetected)]) 38 40 39 41 dnl example programs features … … 124 126 fi 125 127 128 if test "${enable_gl}" != "no"; then 129 ac_cv_my_have_gl="no" 130 AC_CHECK_HEADERS(GL/gl.h GL/glut.h, 131 [AC_CHECK_LIB(glut, glutMainLoopEvent, 132 [ac_cv_my_have_gl="yes" 133 AC_DEFINE(USE_GL, 1, Define to activate the OpenGL backend driver) 134 CACA_LIBS="${CACA_LIBS} -lGL -lglut" 135 CACA_DRIVERS="${CACA_DRIVERS} gl"])]) 136 if test "${ac_cv_my_have_gl}" = "no" -a "${enable_gl}" = "yes"; then 137 AC_MSG_ERROR([cannot find OpenGL+FreeGLUT development files]) 138 fi 139 fi 140 126 141 if test "${enable_ncurses}" != "no"; then 127 142 ac_cv_my_have_ncurses="no" … … 156 171 CFLAGS="${CFLAGS} -g -O2 -fno-strength-reduce -fomit-frame-pointer" 157 172 # Code qui fait des warnings == code de porc == deux baffes dans ta gueule 158 CFLAGS="${CFLAGS} -Wall -Wpointer-arith -Wcast-align -Wcast-qual -Wstrict-prototypes -Wshadow -Waggregate-return -Wmissing-prototypes -Wnested-externs -Wsign-compare" 173 # [Jylam] Removed -Wshadow in order to avoid ncurses/gl conflict 174 # (Comme quoi on est pas les seuls porcs) 175 CFLAGS="${CFLAGS} -Wall -Wpointer-arith -Wcast-align -Wcast-qual -Wstrict-prototypes -Waggregate-return -Wmissing-prototypes -Wnested-externs -Wsign-compare" 159 176 160 177 # Build the PIC library? -
libcaca/trunk/src/caca.c
r375 r483 56 56 # include <windows.h> 57 57 #endif 58 58 #if defined(USE_GL) 59 # include <GL/gl.h> 60 #endif 59 61 #include <stdlib.h> 60 62 #include <string.h> … … 193 195 194 196 SetConsoleMode(win32_hout, ENABLE_MOUSE_INPUT); 197 } 198 else 199 #endif 200 #if defined(USE_GL) 201 if(_caca_driver == CACA_DRIVER_GL) 202 { 203 /* Nothing to do */ 195 204 } 196 205 else … … 427 436 else 428 437 #endif 438 #if defined(USE_GL) 439 if(_caca_driver == CACA_DRIVER_GL) 440 { 441 /* Nothing to do */ 442 } 443 else 444 #endif 429 445 { 430 446 /* Dummy */ … … 459 475 else 460 476 #endif 477 #if defined(USE_GL) 478 if(!strcasecmp(var, "gl")) 479 _caca_driver = CACA_DRIVER_GL; 480 else 481 #endif 461 482 #if defined(USE_SLANG) 462 483 if(!strcasecmp(var, "slang")) … … 491 512 return; 492 513 } 514 #endif 515 #if defined(USE_GL) 516 _caca_driver = CACA_DRIVER_GL; 517 return; 493 518 #endif 494 519 #if defined(USE_SLANG) -
libcaca/trunk/src/caca_internals.h
r353 r483 49 49 CACA_DRIVER_WIN32 = 5, 50 50 #endif 51 #if defined(USE_GL) 52 CACA_DRIVER_GL = 6, 53 #endif 51 54 CACA_DRIVER_NONE = 0 52 55 }; … … 98 101 #endif 99 102 103 #if defined(USE_GL) 104 #include <GL/glut.h> 105 extern unsigned int gl_width, gl_height; 106 #endif 107 108 100 109 #endif /* __CACA_INTERNALS_H__ */ -
libcaca/trunk/src/event.c
r361 r483 55 55 # include <windows.h> 56 56 #endif 57 57 #if defined(USE_GL) 58 #include <GL/gl.h> 59 #include <GL/glut.h> 60 extern int gl_special_key; 61 extern unsigned char gl_key; 62 extern unsigned char gl_resized; 63 extern float gl_font_width; 64 extern float gl_font_height; 65 extern int gl_new_width; 66 extern int gl_new_height; 67 68 #endif 58 69 #include "caca.h" 59 70 #include "caca_internals.h" … … 720 731 else 721 732 #endif 733 #if defined(USE_GL) 734 if(_caca_driver == CACA_DRIVER_GL) 735 { 736 glutMainLoopEvent(); 737 738 if(gl_resized) 739 { 740 if(!_caca_resize) 741 { 742 743 744 _caca_resize = 1; 745 gl_resized=0; 746 return CACA_EVENT_RESIZE; 747 } 748 } 749 750 if(gl_key!=0) 751 { 752 event |= CACA_EVENT_KEY_PRESS; 753 event |= gl_key; 754 gl_key = 0; 755 } 756 757 if(gl_special_key != 0) 758 { 759 event |= CACA_EVENT_KEY_PRESS; 760 761 switch(gl_special_key) 762 { 763 case GLUT_KEY_F1 : gl_special_key = 0; return event | CACA_KEY_F1; 764 case GLUT_KEY_F2 : gl_special_key = 0; return event | CACA_KEY_F2; 765 case GLUT_KEY_F3 : gl_special_key = 0; return event | CACA_KEY_F3; 766 case GLUT_KEY_F4 : gl_special_key = 0; return event | CACA_KEY_F4; 767 case GLUT_KEY_F5 : gl_special_key = 0; return event | CACA_KEY_F5; 768 case GLUT_KEY_F6 : gl_special_key = 0; return event | CACA_KEY_F6; 769 case GLUT_KEY_F7 : gl_special_key = 0; return event | CACA_KEY_F7; 770 case GLUT_KEY_F8 : gl_special_key = 0; return event | CACA_KEY_F8; 771 case GLUT_KEY_F9 : gl_special_key = 0; return event | CACA_KEY_F9; 772 case GLUT_KEY_F10 : gl_special_key = 0; return event | CACA_KEY_F10; 773 case GLUT_KEY_F11 : gl_special_key = 0; return event | CACA_KEY_F11; 774 case GLUT_KEY_F12 : gl_special_key = 0; return event | CACA_KEY_F12; 775 case GLUT_KEY_LEFT : gl_special_key = 0; return event | CACA_KEY_LEFT; 776 case GLUT_KEY_RIGHT: gl_special_key = 0; return event | CACA_KEY_RIGHT; 777 case GLUT_KEY_UP : gl_special_key = 0; return event | CACA_KEY_UP; 778 case GLUT_KEY_DOWN : gl_special_key = 0; return event | CACA_KEY_DOWN; 779 default: return CACA_EVENT_NONE; 780 } 781 } 782 return event; 783 } 784 else 785 #endif 722 786 { 723 787 /* Dummy */ -
libcaca/trunk/src/graphics.c
r466 r483 59 59 # include <windows.h> 60 60 #endif 61 61 #if defined(USE_GL) 62 # include <GL/gl.h> 63 # include <GL/glut.h> 64 #endif 62 65 #if defined(HAVE_INTTYPES_H) || defined(_DOXYGEN_SKIP_ME) 63 66 # include <inttypes.h> … … 233 236 }; 234 237 #endif 238 #if defined(USE_GL) 239 240 static unsigned int const gl_bg_palette[] = 241 { 242 0, 243 0x0000007F, 244 0x00007F00, 245 0x00007F7F, 246 0x007F0000, 247 0x007F007F, 248 0x007F7F00, 249 0x007F7F7F, 250 // + intensity 251 0x00000000, 252 0x000000FF, 253 0x0000FF00, 254 0x0000FFFF, 255 0x00FF0000, 256 0x00FF00FF, 257 0x00FFFF00, 258 0x00FFFFFF, 259 260 }; 261 262 int gl_window; 263 unsigned int gl_width, gl_height; 264 float gl_font_width, gl_font_height; 265 float gl_incx, gl_incy; 266 int id[94]; 267 unsigned char gl_resized=0, gl_bit=0; 268 #endif 269 235 270 236 271 static char *_caca_empty_line; … … 262 297 static int x11_error_handler(Display *, XErrorEvent *); 263 298 #endif 299 300 #if defined(USE_GL) 301 unsigned char gl_key = 0; 302 int gl_special_key=0; 303 int gl_new_width; 304 int gl_new_height; 305 306 307 static void gl_handle_keyboard(unsigned char key, int x, int y) 308 { 309 gl_key = key; 310 } 311 static void gl_handle_special_key(int key, int x, int y) 312 { 313 gl_special_key = key; 314 } 315 static void gl_handle_reshape (int w, int h) 316 { 317 if(gl_bit) /* Do not handle reshaping at the first time*/ 318 { 319 320 gl_new_width = w; 321 gl_new_height = h; 322 323 gl_resized = 1; 324 } 325 else 326 gl_bit=1; 327 328 } 329 #endif 330 331 264 332 265 333 /** \brief Set the default colour pair. … … 331 399 break; 332 400 #endif 401 #if defined(USE_GL) 402 case CACA_DRIVER_GL: 403 /* Nothing to do */ 404 break; 405 #endif 333 406 default: 334 407 break; … … 414 487 #if defined(USE_WIN32) 415 488 case CACA_DRIVER_WIN32: 489 break; 490 #endif 491 #if defined(USE_GL) 492 case CACA_DRIVER_GL: 416 493 break; 417 494 #endif … … 509 586 #if defined(USE_WIN32) 510 587 case CACA_DRIVER_WIN32: 588 break; 589 #endif 590 #if defined(USE_GL) 591 case CACA_DRIVER_GL: 511 592 break; 512 593 #endif … … 881 962 else 882 963 #endif 964 #if defined(USE_GL) 965 if(_caca_driver == CACA_DRIVER_GL) 966 { 967 int i; 968 char *empty; 969 970 if(!_caca_width) 971 _caca_width = 80; 972 if(!_caca_height) 973 _caca_height = 32; 974 975 gl_font_width = 9; 976 gl_font_height = 15; 977 978 gl_width = _caca_width*gl_font_width; 979 gl_height = _caca_height*gl_font_height; 980 981 glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE); 982 glutInitWindowSize(gl_width, gl_height); 983 gl_window = glutCreateWindow("caca for GL"); 984 985 gluOrtho2D(0,gl_width, gl_height, 0); 986 987 glDisable(GL_CULL_FACE); 988 glDisable(GL_DEPTH_TEST); 989 990 glutKeyboardFunc(gl_handle_keyboard); 991 glutSpecialFunc(gl_handle_special_key); 992 glutReshapeFunc(gl_handle_reshape); 993 994 glLoadIdentity(); 995 996 glMatrixMode(GL_PROJECTION); 997 glPushMatrix(); 998 glLoadIdentity(); 999 gluOrtho2D(0, gl_width, gl_height, 0); 1000 1001 glMatrixMode(GL_MODELVIEW); 1002 1003 1004 glClear(GL_COLOR_BUFFER_BIT); 1005 1006 1007 1008 empty = malloc(16*16*4); 1009 if(empty == NULL) 1010 return -1; 1011 1012 memset(empty, 255, 16*16*4); 1013 glEnable(GL_TEXTURE_2D); 1014 1015 for(i=0;i<94;i++) 1016 { 1017 glGenTextures(1,&id[i]); 1018 glBindTexture(GL_TEXTURE_2D, id[i]); 1019 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 1020 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 1021 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB8, 1022 16,16, 1023 0, GL_RGB, GL_UNSIGNED_BYTE, empty); 1024 } 1025 for(i=0;i<94;i++) 1026 { 1027 1028 glDisable(GL_TEXTURE_2D); 1029 glClear(GL_COLOR_BUFFER_BIT); 1030 1031 glColor3f(1,1,1); 1032 glRasterPos2f(0,15); 1033 glutBitmapCharacter(GLUT_BITMAP_9_BY_15,i+32); 1034 1035 1036 glEnable(GL_TEXTURE_2D); 1037 glBindTexture(GL_TEXTURE_2D,id[i]); 1038 glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 0, gl_height-16, 16,16, 0); 1039 1040 glutMainLoopEvent(); 1041 glutPostRedisplay(); 1042 } 1043 } 1044 else 1045 #endif 1046 883 1047 { 884 1048 /* Dummy */ … … 955 1119 else 956 1120 #endif 1121 #if defined(USE_GL) 1122 if(_caca_driver == CACA_DRIVER_GL) 1123 { 1124 glutDestroyWindow(gl_window); 1125 } 1126 else 1127 #endif 957 1128 { 958 1129 /* Dummy */ … … 988 1159 } 989 1160 else 1161 #endif 1162 #if defined(USE_GL) 1163 if(_caca_driver == CACA_DRIVER_GL) 1164 { 1165 glutSetWindowTitle(title); 1166 } 1167 else 990 1168 #endif 991 1169 { … … 1022 1200 else 1023 1201 #endif 1202 #if defined(USE_GL) 1203 if(_caca_driver == CACA_DRIVER_GL) 1204 { 1205 return gl_width; 1206 } 1207 else 1208 #endif 1024 1209 { 1025 1210 /* Dummy */ … … 1054 1239 } 1055 1240 else 1241 #endif 1242 #if defined(USE_GL) 1243 if(_caca_driver == CACA_DRIVER_GL) 1244 { 1245 return gl_height; 1246 } 1247 else 1056 1248 #endif 1057 1249 { … … 1221 1413 } 1222 1414 else 1415 #endif 1416 #if defined(USE_GL) 1417 if(_caca_driver == CACA_DRIVER_GL) 1418 { 1419 unsigned int x, y, offsetx, offsety; 1420 1421 1422 glClear(GL_COLOR_BUFFER_BIT); 1423 1424 offsety=0; 1425 for(y=0;y<gl_height;y+=gl_font_height) 1426 { 1427 offsetx = 0; 1428 for(x=0;x<gl_width;x+=gl_font_width) 1429 { 1430 uint8_t *attr = cache_attr + offsetx + offsety * _caca_width; 1431 int offset; 1432 float br, bg, bb; 1433 offset = attr[0]>>4; 1434 1435 br = ((gl_bg_palette[offset]&0x00FF0000)>>16)/255.0f; 1436 bg = ((gl_bg_palette[offset]&0x0000FF00)>>8)/255.0f; 1437 bb = ((gl_bg_palette[offset]&0x000000FF))/255.0f; 1438 1439 glDisable(GL_TEXTURE_2D); 1440 glColor3f(br, bg, bb); 1441 glBegin(GL_QUADS); 1442 glVertex2f(x,y); 1443 glVertex2f(x+gl_font_width,y); 1444 glVertex2f(x+gl_font_width,y+gl_font_height); 1445 glVertex2f(x,y+gl_font_height); 1446 glEnd(); 1447 1448 1449 offsetx++; 1450 } 1451 1452 offsety++; 1453 } 1454 1455 1456 1457 /* 2nd pass, avoids changing render state too much */ 1458 glEnable(GL_BLEND); 1459 glEnable(GL_TEXTURE_2D); 1460 glBlendFunc(GL_ONE, GL_ONE); 1461 1462 offsety=0; 1463 for(y=0;y<gl_height;y+=gl_font_height) 1464 { 1465 offsetx = 0; 1466 for(x=0;x<gl_width;x+=gl_font_width) 1467 { 1468 uint8_t *attr = cache_attr + offsetx + offsety * _caca_width; 1469 unsigned char *chr = cache_char + offsetx + offsety * _caca_width; 1470 float fr, fg, fb; 1471 1472 1473 fr = ((gl_bg_palette[attr[0] & 0xf]&0x00FF0000)>>16)/255.0f; 1474 fg = ((gl_bg_palette[attr[0] & 0xf]&0x0000FF00)>>8)/255.0f; 1475 fb = ((gl_bg_palette[attr[0] & 0xf]&0x000000FF))/255.0f; 1476 1477 if(chr[0] != ' ') 1478 { 1479 glBindTexture(GL_TEXTURE_2D, id[chr[0]-32]); 1480 1481 glColor3f(fr, fg, fb); 1482 glBegin(GL_QUADS); 1483 glTexCoord2f(0,1); 1484 glVertex2f(x,y); 1485 glTexCoord2f(0.5,1); 1486 glVertex2f(x+gl_font_width,y); 1487 glTexCoord2f(0.5,0); 1488 glVertex2f(x+gl_font_width,y+gl_font_height); 1489 glTexCoord2f(0,0); 1490 glVertex2f(x,y+gl_font_height); 1491 glEnd(); 1492 } 1493 offsetx++; 1494 } 1495 offsety++; 1496 } 1497 glDisable(GL_BLEND); 1498 glDisable(GL_TEXTURE_2D); 1499 1500 1501 1502 glutMainLoopEvent(); 1503 glutSwapBuffers(); 1504 glutPostRedisplay(); 1505 } 1506 else 1223 1507 #endif 1224 1508 { … … 1320 1604 if(_caca_driver == CACA_DRIVER_WIN32) 1321 1605 { 1606 } 1607 else 1608 #endif 1609 #if defined(USE_GL) 1610 if(_caca_driver == CACA_DRIVER_GL) 1611 { 1612 gl_width = gl_new_width; 1613 gl_height = gl_new_height; 1614 1615 _caca_width = gl_width/gl_font_width; 1616 _caca_height = (gl_height/gl_font_height)+1; 1617 1618 glMatrixMode(GL_PROJECTION); 1619 glPushMatrix(); 1620 glLoadIdentity(); 1621 1622 glViewport(0,0,gl_width, gl_height); 1623 gluOrtho2D(0, gl_width, gl_height, 0); 1624 glMatrixMode(GL_MODELVIEW); 1625 1322 1626 } 1323 1627 else
Note: See TracChangeset
for help on using the changeset viewer.