ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/Client.xs
(Generate patch)

Comparing deliantra/Deliantra-Client/Client.xs (file contents):
Revision 1.77 by root, Fri May 12 00:16:34 2006 UTC vs.
Revision 1.93 by root, Tue May 23 18:54:37 2006 UTC

1#ifdef _WIN32 1#ifdef _WIN32
2# define _WIN32_WINNT 0x0500 // needed to get win2000 api calls
2# include <malloc.h> 3# include <malloc.h>
4# include <windows.h>
3# pragma warning(disable:4244) 5# pragma warning(disable:4244)
4#endif 6#endif
5 7
6#include "EXTERN.h" 8#include "EXTERN.h"
7#include "perl.h" 9#include "perl.h"
8#include "XSUB.h" 10#include "XSUB.h"
9 11
12#include <math.h>
10#include <string.h> 13#include <string.h>
11#include <stdio.h> 14#include <stdio.h>
12 15
13#include <SDL.h> 16#include <SDL.h>
14#include <SDL_endian.h> 17#include <SDL_endian.h>
81 84
82static void 85static void
83substitute_func (FcPattern *pattern, gpointer data) 86substitute_func (FcPattern *pattern, gpointer data)
84{ 87{
85 FcPatternAddBool (pattern, FC_HINTING , 1); 88 FcPatternAddBool (pattern, FC_HINTING , 1);
89#ifdef _WIN32
90 FcPatternAddBool (pattern, FC_AUTOHINT, 1);
91#else
86 FcPatternAddBool (pattern, FC_AUTOHINT, 0); 92 FcPatternAddBool (pattern, FC_AUTOHINT, 0);
93#endif
87} 94}
88 95
89static void 96static void
90layout_update_font (CFClient__Layout self) 97layout_update_font (CFClient__Layout self)
91{ 98{
404# undef const_iv 411# undef const_iv
405 }; 412 };
406 413
407 for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ-- > const_iv; ) 414 for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ-- > const_iv; )
408 newCONSTSUB (stash, (char *)civ->name, newSViv (civ->iv)); 415 newCONSTSUB (stash, (char *)civ->name, newSViv (civ->iv));
416}
409 417
418void
419pango_init ()
420 CODE:
421{
422 // delayed, so it can pick up new fonts added by AddFontResourceEx
410 ft2_fontmap = pango_ft2_font_map_new (); 423 ft2_fontmap = pango_ft2_font_map_new ();
411 pango_ft2_font_map_set_default_substitute ((PangoFT2FontMap *)ft2_fontmap, substitute_func, 0, 0); 424 pango_ft2_font_map_set_default_substitute ((PangoFT2FontMap *)ft2_fontmap, substitute_func, 0, 0);
412 ft2_context = pango_ft2_font_map_create_context ((PangoFT2FontMap *)ft2_fontmap); 425 ft2_context = pango_ft2_font_map_create_context ((PangoFT2FontMap *)ft2_fontmap);
413 426
414 cairo_fontmap = pango_cairo_font_map_get_default (); 427 cairo_fontmap = pango_cairo_font_map_get_default ();
415 cairo_context = pango_cairo_font_map_create_context ((PangoCairoFontMap *)cairo_fontmap); 428 cairo_context = pango_cairo_font_map_create_context ((PangoCairoFontMap *)cairo_fontmap);
416} 429}
417 430
418int 431int
419SDL_Init (U32 flags = SDL_INIT_VIDEO | SDL_INIT_AUDIO) 432SDL_Init (U32 flags = SDL_INIT_VIDEO | SDL_INIT_AUDIO)
420 433
430 SDL_GL_SetAttribute (SDL_GL_RED_SIZE, 5); 443 SDL_GL_SetAttribute (SDL_GL_RED_SIZE, 5);
431 SDL_GL_SetAttribute (SDL_GL_GREEN_SIZE, 5); 444 SDL_GL_SetAttribute (SDL_GL_GREEN_SIZE, 5);
432 SDL_GL_SetAttribute (SDL_GL_BLUE_SIZE, 5); 445 SDL_GL_SetAttribute (SDL_GL_BLUE_SIZE, 5);
433 SDL_GL_SetAttribute (SDL_GL_ALPHA_SIZE, 1); 446 SDL_GL_SetAttribute (SDL_GL_ALPHA_SIZE, 1);
434 447
448 SDL_GL_SetAttribute (SDL_GL_BUFFER_SIZE, 15);
449 SDL_GL_SetAttribute (SDL_GL_DEPTH_SIZE, 16);
450
435 SDL_GL_SetAttribute (SDL_GL_ACCUM_RED_SIZE, 0); 451 SDL_GL_SetAttribute (SDL_GL_ACCUM_RED_SIZE, 0);
436 SDL_GL_SetAttribute (SDL_GL_ACCUM_GREEN_SIZE, 0); 452 SDL_GL_SetAttribute (SDL_GL_ACCUM_GREEN_SIZE, 0);
437 SDL_GL_SetAttribute (SDL_GL_ACCUM_BLUE_SIZE, 0); 453 SDL_GL_SetAttribute (SDL_GL_ACCUM_BLUE_SIZE, 0);
438 SDL_GL_SetAttribute (SDL_GL_ACCUM_ALPHA_SIZE, 0); 454 SDL_GL_SetAttribute (SDL_GL_ACCUM_ALPHA_SIZE, 0);
439 455
440 SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER, 1); 456 SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER, 1);
441 SDL_GL_SetAttribute (SDL_GL_BUFFER_SIZE, 15);
442 SDL_GL_SetAttribute (SDL_GL_DEPTH_SIZE, 0);
443 457
444 SDL_EnableUNICODE (1); 458 SDL_EnableUNICODE (1);
445 SDL_EnableKeyRepeat (SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL); 459 SDL_EnableKeyRepeat (SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
446 460
447 m = SDL_ListModes (0, SDL_FULLSCREEN | SDL_OPENGL); 461 m = SDL_ListModes (0, SDL_FULLSCREEN | SDL_OPENGL);
456 470
457 ++m; 471 ++m;
458 } 472 }
459} 473}
460 474
475char *
476SDL_GetError ()
477
461int 478int
462SDL_SetVideoMode (int w, int h, int fullscreen) 479SDL_SetVideoMode (int w, int h, int fullscreen)
463 CODE: 480 CODE:
464 RETVAL = !!SDL_SetVideoMode ( 481 RETVAL = !!SDL_SetVideoMode (
465 w, h, 0, SDL_OPENGL | (fullscreen ? SDL_FULLSCREEN : 0) 482 w, h, 0, SDL_OPENGL | (fullscreen ? SDL_FULLSCREEN : 0)
474void 491void
475SDL_PollEvent () 492SDL_PollEvent ()
476 PPCODE: 493 PPCODE:
477{ 494{
478 SDL_Event ev; 495 SDL_Event ev;
496 int i;
497 static int modifier;
498 static int modkey[] = {
499 SDLK_RSHIFT, KMOD_RSHIFT,
500 SDLK_LSHIFT, KMOD_LSHIFT,
501 SDLK_RCTRL, KMOD_RCTRL,
502 SDLK_LCTRL, KMOD_LCTRL,
503 SDLK_RALT, KMOD_RALT,
504 SDLK_LALT, KMOD_LALT,
505 SDLK_RMETA, KMOD_RMETA,
506 SDLK_LMETA, KMOD_LMETA,
507 };
479 508
480 while (SDL_PollEvent (&ev)) 509 while (SDL_PollEvent (&ev))
481 { 510 {
482 HV *hv = newHV (); 511 HV *hv = newHV ();
483 hv_store (hv, "type", 4, newSViv (ev.type), 0); 512 hv_store (hv, "type", 4, newSViv (ev.type), 0);
484 513
485 switch (ev.type) 514 switch (ev.type)
486 { 515 {
487 case SDL_KEYDOWN: 516 case SDL_KEYDOWN:
488 case SDL_KEYUP: 517 case SDL_KEYUP:
518
519 for (i = 0; i < sizeof (modkey) / (sizeof (int) * 2); i++)
520 if (modkey [i * 2] == ev.key.keysym.sym)
521 {
522 if (ev.type == SDL_KEYDOWN)
523 modifier |= modkey [i * 2 + 1];
524 else
525 modifier &= ~modkey [i * 2 + 1];
526 break;
527 }
528
489 hv_store (hv, "state", 5, newSViv (ev.key.state), 0); 529 hv_store (hv, "state", 5, newSViv (ev.key.state), 0);
490 hv_store (hv, "sym", 3, newSViv (ev.key.keysym.sym), 0); 530 hv_store (hv, "sym", 3, newSViv (ev.key.keysym.sym), 0);
491 hv_store (hv, "mod", 3, newSViv (ev.key.keysym.mod), 0); 531 hv_store (hv, "mod", 3, newSViv (ev.key.keysym.mod), 0);
492 hv_store (hv, "unicode", 7, newSViv (ev.key.keysym.unicode), 0); 532 hv_store (hv, "unicode", 7, newSViv (ev.key.keysym.unicode), 0);
493 break; 533 break;
496 hv_store (hv, "gain", 4, newSViv (ev.active.gain), 0); 536 hv_store (hv, "gain", 4, newSViv (ev.active.gain), 0);
497 hv_store (hv, "state", 5, newSViv (ev.active.state), 0); 537 hv_store (hv, "state", 5, newSViv (ev.active.state), 0);
498 break; 538 break;
499 539
500 case SDL_MOUSEMOTION: 540 case SDL_MOUSEMOTION:
541 hv_store (hv, "mod", 3, newSViv (modifier), 0);
542
501 hv_store (hv, "state", 5, newSViv (ev.motion.state), 0); 543 hv_store (hv, "state", 5, newSViv (ev.motion.state), 0);
502 hv_store (hv, "x", 1, newSViv (ev.motion.x), 0); 544 hv_store (hv, "x", 1, newSViv (ev.motion.x), 0);
503 hv_store (hv, "y", 1, newSViv (ev.motion.y), 0); 545 hv_store (hv, "y", 1, newSViv (ev.motion.y), 0);
504 hv_store (hv, "xrel", 4, newSViv (ev.motion.xrel), 0); 546 hv_store (hv, "xrel", 4, newSViv (ev.motion.xrel), 0);
505 hv_store (hv, "yrel", 4, newSViv (ev.motion.yrel), 0); 547 hv_store (hv, "yrel", 4, newSViv (ev.motion.yrel), 0);
506 break; 548 break;
507 549
508 case SDL_MOUSEBUTTONDOWN: 550 case SDL_MOUSEBUTTONDOWN:
509 case SDL_MOUSEBUTTONUP: 551 case SDL_MOUSEBUTTONUP:
552 hv_store (hv, "mod", 3, newSViv (modifier), 0);
553
510 hv_store (hv, "button", 6, newSViv (ev.button.button), 0); 554 hv_store (hv, "button", 6, newSViv (ev.button.button), 0);
511 hv_store (hv, "state", 5, newSViv (ev.button.state), 0); 555 hv_store (hv, "state", 5, newSViv (ev.button.state), 0);
512 hv_store (hv, "x", 1, newSViv (ev.button.x), 0); 556 hv_store (hv, "x", 1, newSViv (ev.button.x), 0);
513 hv_store (hv, "y", 1, newSViv (ev.button.y), 0); 557 hv_store (hv, "y", 1, newSViv (ev.button.y), 0);
514 break; 558 break;
542#ifndef _WIN32 586#ifndef _WIN32
543 setsockopt (fd, IPPROTO_TCP, TCP_NODELAY, &val, sizeof (val)); 587 setsockopt (fd, IPPROTO_TCP, TCP_NODELAY, &val, sizeof (val));
544#endif 588#endif
545 589
546char * 590char *
591gl_vendor ()
592 CODE:
593 RETVAL = (char *)glGetString (GL_VENDOR);
594 OUTPUT:
595 RETVAL
596
597char *
547gl_version () 598gl_version ()
548 CODE: 599 CODE:
549 RETVAL = (char *)glGetString (GL_VERSION); 600 RETVAL = (char *)glGetString (GL_VERSION);
550 OUTPUT: 601 OUTPUT:
551 RETVAL 602 RETVAL
559 610
560void 611void
561add_font (char *file) 612add_font (char *file)
562 CODE: 613 CODE:
563 FcConfigAppFontAddFile (0, (const FcChar8 *)file); /* no idea wether this is required */ 614 FcConfigAppFontAddFile (0, (const FcChar8 *)file); /* no idea wether this is required */
615#ifdef _WIN32
616 // cairo... sigh... requires win2000
617 AddFontResourceEx (file, FR_PRIVATE, 0);
618#endif
564 619
565void 620void
566load_image_inline (SV *image_) 621load_image_inline (SV *image_)
567 ALIAS: 622 ALIAS:
568 load_image_file = 1 623 load_image_file = 1
652} 707}
653 708
654void 709void
655error (char *message) 710error (char *message)
656 CODE: 711 CODE:
712 fprintf (stderr, "ERROR: %s\n", message);
657#ifdef _WIN32 713#ifdef _WIN32
658 MessageBox (0, message, "Crossfire+ Error", MB_OK | MB_ICONERROR | MB_SETFOREGROUND); 714 MessageBox (0, message, "Crossfire+ Error", MB_OK | MB_ICONERROR);
659#else
660 fprintf (stderr, "ERROR: %s\n", message);
661#endif 715#endif
662 716
663void 717void
664fatal (char *message) 718fatal (char *message)
665 CODE: 719 CODE:
720 fprintf (stderr, "FATAL: %s\n", message);
666#ifdef _WIN32 721#ifdef _WIN32
667 MessageBox (0, message, "Crossfire+ Fatal Error", MB_OK | MB_ICONERROR | MB_SETFOREGROUND); 722 MessageBox (0, message, "Crossfire+ Fatal Error", MB_OK | MB_ICONERROR);
668#else
669 fprintf (stderr, "FATAL: %s\n", message);
670#endif 723#endif
671 exit (1); 724 exit (1);
672 725
673MODULE = CFClient PACKAGE = CFClient::Font 726MODULE = CFClient PACKAGE = CFClient::Font
674 727
697MODULE = CFClient PACKAGE = CFClient::Layout 750MODULE = CFClient PACKAGE = CFClient::Layout
698 751
699CFClient::Layout 752CFClient::Layout
700new (SV *class, int rgba = 0) 753new (SV *class, int rgba = 0)
701 CODE: 754 CODE:
755#if _WIN32
756 rgba = 0;//D
757#endif
702 New (0, RETVAL, 1, struct cf_layout); 758 New (0, RETVAL, 1, struct cf_layout);
703 759
704 RETVAL->pl = pango_layout_new (rgba ? cairo_context : ft2_context); 760 RETVAL->pl = pango_layout_new (rgba ? cairo_context : ft2_context);
705 RETVAL->rgba = rgba; 761 RETVAL->rgba = rgba;
706 RETVAL->r = 1.; 762 RETVAL->r = 1.;
786set_width (CFClient::Layout self, int max_width = -1) 842set_width (CFClient::Layout self, int max_width = -1)
787 CODE: 843 CODE:
788 pango_layout_set_width (self->pl, max_width < 0 ? max_width : max_width * PANGO_SCALE); 844 pango_layout_set_width (self->pl, max_width < 0 ? max_width : max_width * PANGO_SCALE);
789 845
790void 846void
847set_indent (CFClient::Layout self, int indent)
848 CODE:
849 pango_layout_set_indent (self->pl, indent * PANGO_SCALE);
850
851void
852set_spacing (CFClient::Layout self, int spacing)
853 CODE:
854 pango_layout_set_spacing (self->pl, spacing * PANGO_SCALE);
855
856void
857set_ellipsise (CFClient::Layout self, int ellipsise)
858 CODE:
859 pango_layout_set_ellipsize (self->pl,
860 ellipsise == 1 ? PANGO_ELLIPSIZE_START
861 : ellipsise == 2 ? PANGO_ELLIPSIZE_MIDDLE
862 : ellipsise == 3 ? PANGO_ELLIPSIZE_END
863 : PANGO_ELLIPSIZE_NONE
864 );
865
866void
867set_single_paragraph_mode (CFClient::Layout self, int spm)
868 CODE:
869 pango_layout_set_single_paragraph_mode (self->pl, !!spm);
870
871void
791size (CFClient::Layout self) 872size (CFClient::Layout self)
792 PPCODE: 873 PPCODE:
793{ 874{
794 int w, h; 875 int w, h;
795 876
861 942
862 while (p < e) 943 while (p < e)
863 { 944 {
864 uint32_t rgba = *p; 945 uint32_t rgba = *p;
865 rgba = (rgba >> 24) | (rgba << 8); 946 rgba = (rgba >> 24) | (rgba << 8);
947#if 0
948#ifdef _WIN32
949 {//D
950 uint8_t r = rgba >> 24;
951 uint8_t g = rgba >> 16;
952 uint8_t b = rgba >> 8;
953 uint8_t a = rgba >> 0;
954
955 rgba = (rgba & 0xffffff00) | a;
956 }
957#endif
958#endif
866 rgba = SDL_SwapBE32 (rgba); 959 rgba = SDL_SwapBE32 (rgba);
867 *p++ = rgba; 960 *p++ = rgba;
868 } 961 }
869 } 962 }
870 963
927 1020
928 if (ix) 1021 if (ix)
929 { 1022 {
930 glEnable (GL_BLEND); 1023 glEnable (GL_BLEND);
931 glBlendFunc (ix == 1 ? GL_SRC_ALPHA : GL_ONE, GL_ONE_MINUS_SRC_ALPHA); 1024 glBlendFunc (ix == 1 ? GL_SRC_ALPHA : GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
1025 glEnable (GL_ALPHA_TEST);
1026 glAlphaFunc (GL_GREATER, 0.01f);
932 } 1027 }
933 1028
934 glBindTexture (GL_TEXTURE_2D, name); 1029 glBindTexture (GL_TEXTURE_2D, name);
935 1030
936 if (wrap_mode) 1031 if (wrap_mode)
945 glTexCoord2f (s, t); glVertex2f (x + w, y + h); 1040 glTexCoord2f (s, t); glVertex2f (x + w, y + h);
946 glTexCoord2f (s, 0); glVertex2f (x + w, y ); 1041 glTexCoord2f (s, 0); glVertex2f (x + w, y );
947 glEnd (); 1042 glEnd ();
948 1043
949 if (ix) 1044 if (ix)
1045 {
1046 glDisable (GL_ALPHA_TEST);
950 glDisable (GL_BLEND); 1047 glDisable (GL_BLEND);
1048 }
951} 1049}
952 1050
953MODULE = CFClient PACKAGE = CFClient::Map 1051MODULE = CFClient PACKAGE = CFClient::Map
954 1052
955CFClient::Map 1053CFClient::Map
1466 const_iv (GL_COLOR_MATERIAL), 1564 const_iv (GL_COLOR_MATERIAL),
1467 const_iv (GL_SMOOTH), 1565 const_iv (GL_SMOOTH),
1468 const_iv (GL_FLAT), 1566 const_iv (GL_FLAT),
1469 const_iv (GL_DITHER), 1567 const_iv (GL_DITHER),
1470 const_iv (GL_BLEND), 1568 const_iv (GL_BLEND),
1569 const_iv (GL_CULL_FACE),
1471 const_iv (GL_SCISSOR_TEST), 1570 const_iv (GL_SCISSOR_TEST),
1571 const_iv (GL_DEPTH_TEST),
1572 const_iv (GL_ALPHA_TEST),
1573 const_iv (GL_NORMALIZE),
1574 const_iv (GL_RESCALE_NORMAL),
1472 const_iv (GL_AND), 1575 const_iv (GL_AND),
1473 const_iv (GL_ONE), 1576 const_iv (GL_ONE),
1474 const_iv (GL_ZERO), 1577 const_iv (GL_ZERO),
1475 const_iv (GL_SRC_ALPHA), 1578 const_iv (GL_SRC_ALPHA),
1476 const_iv (GL_SRC_ALPHA_SATURATE), 1579 const_iv (GL_SRC_ALPHA_SATURATE),
1477 const_iv (GL_ONE_MINUS_SRC_ALPHA), 1580 const_iv (GL_ONE_MINUS_SRC_ALPHA),
1478 const_iv (GL_ONE_MINUS_DST_ALPHA), 1581 const_iv (GL_ONE_MINUS_DST_ALPHA),
1479 const_iv (GL_RGB), 1582 const_iv (GL_RGB),
1480 const_iv (GL_RGBA), 1583 const_iv (GL_RGBA),
1481 const_iv (GL_UNSIGNED_BYTE), 1584 const_iv (GL_UNSIGNED_BYTE),
1585 const_iv (GL_UNSIGNED_SHORT),
1586 const_iv (GL_UNSIGNED_INT),
1482 const_iv (GL_ALPHA), 1587 const_iv (GL_ALPHA),
1588 const_iv (GL_INTENSITY),
1483 const_iv (GL_LUMINANCE), 1589 const_iv (GL_LUMINANCE),
1590 const_iv (GL_LUMINANCE_ALPHA),
1484 const_iv (GL_FLOAT), 1591 const_iv (GL_FLOAT),
1485 const_iv (GL_UNSIGNED_INT_8_8_8_8_REV), 1592 const_iv (GL_UNSIGNED_INT_8_8_8_8_REV),
1486 const_iv (GL_COMPILE), 1593 const_iv (GL_COMPILE),
1487 const_iv (GL_TEXTURE_1D), 1594 const_iv (GL_TEXTURE_1D),
1488 const_iv (GL_TEXTURE_2D), 1595 const_iv (GL_TEXTURE_2D),
1502 const_iv (GL_LINEAR_MIPMAP_LINEAR), 1609 const_iv (GL_LINEAR_MIPMAP_LINEAR),
1503 const_iv (GL_GENERATE_MIPMAP), 1610 const_iv (GL_GENERATE_MIPMAP),
1504 const_iv (GL_MODULATE), 1611 const_iv (GL_MODULATE),
1505 const_iv (GL_DECAL), 1612 const_iv (GL_DECAL),
1506 const_iv (GL_REPLACE), 1613 const_iv (GL_REPLACE),
1614 const_iv (GL_DEPTH_BUFFER_BIT),
1507 const_iv (GL_COLOR_BUFFER_BIT), 1615 const_iv (GL_COLOR_BUFFER_BIT),
1508 const_iv (GL_PROJECTION), 1616 const_iv (GL_PROJECTION),
1509 const_iv (GL_MODELVIEW), 1617 const_iv (GL_MODELVIEW),
1510 const_iv (GL_COLOR_LOGIC_OP), 1618 const_iv (GL_COLOR_LOGIC_OP),
1511 const_iv (GL_SEPARABLE_2D), 1619 const_iv (GL_SEPARABLE_2D),
1512 const_iv (GL_CONVOLUTION_2D), 1620 const_iv (GL_CONVOLUTION_2D),
1513 const_iv (GL_CONVOLUTION_BORDER_MODE), 1621 const_iv (GL_CONVOLUTION_BORDER_MODE),
1514 const_iv (GL_CONSTANT_BORDER), 1622 const_iv (GL_CONSTANT_BORDER),
1515 const_iv (GL_LINES), 1623 const_iv (GL_LINES),
1624 const_iv (GL_LINE_LOOP),
1516 const_iv (GL_QUADS), 1625 const_iv (GL_QUADS),
1517 const_iv (GL_LINE_LOOP), 1626 const_iv (GL_QUAD_STRIP),
1627 const_iv (GL_TRIANGLES),
1628 const_iv (GL_TRIANGLE_STRIP),
1629 const_iv (GL_TRIANGLE_FAN),
1518 const_iv (GL_PERSPECTIVE_CORRECTION_HINT), 1630 const_iv (GL_PERSPECTIVE_CORRECTION_HINT),
1519 const_iv (GL_FASTEST), 1631 const_iv (GL_FASTEST),
1632 const_iv (GL_V2F),
1633 const_iv (GL_V3F),
1634 const_iv (GL_T2F_V3F),
1635 const_iv (GL_T2F_N3F_V3F),
1520# undef const_iv 1636# undef const_iv
1521 }; 1637 };
1522 1638
1523 for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ-- > const_iv; ) 1639 for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ-- > const_iv; )
1524 newCONSTSUB (stash, (char *)civ->name, newSViv (civ->iv)); 1640 newCONSTSUB (stash, (char *)civ->name, newSViv (civ->iv));
1539 1655
1540void glHint (int target, int mode) 1656void glHint (int target, int mode)
1541 1657
1542void glBlendFunc (int sfactor, int dfactor) 1658void glBlendFunc (int sfactor, int dfactor)
1543 1659
1660void glDepthMask (int flag)
1661
1544void glLogicOp (int opcode) 1662void glLogicOp (int opcode)
1545 1663
1546void glColorMask (int red, int green, int blue, int alpha) 1664void glColorMask (int red, int green, int blue, int alpha)
1547 1665
1548void glMatrixMode (int mode) 1666void glMatrixMode (int mode)
1551 1669
1552void glPopMatrix () 1670void glPopMatrix ()
1553 1671
1554void glLoadIdentity () 1672void glLoadIdentity ()
1555 1673
1556# near and far are due to microsofts buggy c compiler 1674# near_ and far_ are due to microsofts buggy "c" compiler
1675void glFrustum (double left, double right, double bottom, double top, double near_, double far_)
1676
1677# near_ and far_ are due to microsofts buggy "c" compiler
1557void glOrtho (double left, double right, double bottom, double top, double near_, double far_) 1678void glOrtho (double left, double right, double bottom, double top, double near_, double far_)
1558 1679
1559void glViewport (int x, int y, int width, int height) 1680void glViewport (int x, int y, int width, int height)
1560 1681
1561void glScissor (int x, int y, int width, int height) 1682void glScissor (int x, int y, int width, int height)
1577void glEnd () 1698void glEnd ()
1578 1699
1579void glColor (float r, float g, float b, float a = 1.0) 1700void glColor (float r, float g, float b, float a = 1.0)
1580 PROTOTYPE: @ 1701 PROTOTYPE: @
1581 CODE: 1702 CODE:
1582 glColor4ub (r * 255.999, g * 255.999, b * 255.999, a * 255.999); 1703 // microsoft visual "c" rounds instead of truncating...
1704 glColor4ub (MIN ((int)(r * 255.f), 255),
1705 MIN ((int)(g * 255.f), 255),
1706 MIN ((int)(b * 255.f), 255),
1707 MIN ((int)(a * 255.f), 255));
1708
1709void glInterleavedArrays (int format, int stride, char *data)
1710
1711void glDrawElements (int mode, int count, int type, char *indices)
1712
1713# 1.2 void glDrawRangeElements (int mode, int start, int end
1714
1715void glRasterPos (float x, float y, float z = 0.)
1716 CODE:
1717 glRasterPos3f (0, 0, z);
1718 glBitmap (0, 0, 0, 0, x, y, 0);
1583 1719
1584void glVertex (float x, float y, float z = 0.) 1720void glVertex (float x, float y, float z = 0.)
1585 CODE: 1721 CODE:
1586 glVertex3f (x, y, z); 1722 glVertex3f (x, y, z);
1587 1723
1615 1751
1616void glTexImage2D (int target, int level, int internalformat, int width, int height, int border, int format, int type, char *data) 1752void glTexImage2D (int target, int level, int internalformat, int width, int height, int border, int format, int type, char *data)
1617 1753
1618void glCopyTexImage2D (int target, int level, int internalformat, int x, int y, int width, int height, int border) 1754void glCopyTexImage2D (int target, int level, int internalformat, int x, int y, int width, int height, int border)
1619 1755
1620void glRasterPos (int x, int y) 1756void glDrawPixels (int width, int height, int format, int type, char *pixels)
1621 CODE:
1622 glRasterPos2i (x, y);
1623 1757
1624void glCopyPixels (int x, int y, int width, int height, int type = GL_COLOR) 1758void glCopyPixels (int x, int y, int width, int height, int type = GL_COLOR)
1625 1759
1626int glGenTexture () 1760int glGenTexture ()
1627 CODE: 1761 CODE:
1654 1788
1655void glEndList () 1789void glEndList ()
1656 1790
1657void glCallList (int list) 1791void glCallList (int list)
1658 1792
1793

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines