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.65 by root, Mon Apr 24 08:22:21 2006 UTC vs.
Revision 1.75 by root, Mon May 8 18:28:40 2006 UTC

1#ifdef _WIN32 1#ifdef _WIN32
2# include <malloc.h> 2# include <malloc.h>
3# pragma warning(disable:4244)
3#endif 4#endif
4 5
5#include "EXTERN.h" 6#include "EXTERN.h"
6#include "perl.h" 7#include "perl.h"
7#include "XSUB.h" 8#include "XSUB.h"
258 } 259 }
259 } 260 }
260} 261}
261 262
262static void 263static void
263music_finished () 264music_finished (void)
264{ 265{
265 SDL_UserEvent ev; 266 SDL_UserEvent ev;
266 267
267 ev.type = SDL_USEREVENT; 268 ev.type = SDL_USEREVENT;
268 ev.code = 0; 269 ev.code = 0;
269 ev.data1 = 0; 270 ev.data1 = 0;
271 ev.data2 = 0;
272
273 SDL_PushEvent ((SDL_Event *)&ev);
274}
275
276static void
277channel_finished (int channel)
278{
279 SDL_UserEvent ev;
280
281 ev.type = SDL_USEREVENT;
282 ev.code = 1;
283 ev.data1 = (void *)(long)channel;
270 ev.data2 = 0; 284 ev.data2 = 0;
271 285
272 SDL_PushEvent ((SDL_Event *)&ev); 286 SDL_PushEvent ((SDL_Event *)&ev);
273} 287}
274 288
457 471
458 while (SDL_PollEvent (&ev)) 472 while (SDL_PollEvent (&ev))
459 { 473 {
460 HV *hv = newHV (); 474 HV *hv = newHV ();
461 hv_store (hv, "type", 4, newSViv (ev.type), 0); 475 hv_store (hv, "type", 4, newSViv (ev.type), 0);
476
462 switch (ev.type) 477 switch (ev.type)
463 { 478 {
464 case SDL_KEYDOWN: 479 case SDL_KEYDOWN:
465 case SDL_KEYUP: 480 case SDL_KEYUP:
466 hv_store (hv, "state", 5, newSViv (ev.key.state), 0); 481 hv_store (hv, "state", 5, newSViv (ev.key.state), 0);
486 case SDL_MOUSEBUTTONUP: 501 case SDL_MOUSEBUTTONUP:
487 hv_store (hv, "button", 6, newSViv (ev.button.button), 0); 502 hv_store (hv, "button", 6, newSViv (ev.button.button), 0);
488 hv_store (hv, "state", 5, newSViv (ev.button.state), 0); 503 hv_store (hv, "state", 5, newSViv (ev.button.state), 0);
489 hv_store (hv, "x", 1, newSViv (ev.button.x), 0); 504 hv_store (hv, "x", 1, newSViv (ev.button.x), 0);
490 hv_store (hv, "y", 1, newSViv (ev.button.y), 0); 505 hv_store (hv, "y", 1, newSViv (ev.button.y), 0);
506 break;
507
508 case SDL_USEREVENT:
509 hv_store (hv, "code", 4, newSViv (ev.user.code), 0);
510 hv_store (hv, "data1", 5, newSViv ((IV)ev.user.data1), 0);
511 hv_store (hv, "data2", 5, newSViv ((IV)ev.user.data2), 0);
512 break;
491 } 513 }
492 514
493 XPUSHs (sv_2mortal (newRV_noinc ((SV *)hv))); 515 XPUSHs (sv_2mortal (newRV_noinc ((SV *)hv)));
494 } 516 }
495} 517}
496 518
497int 519int
498Mix_OpenAudio (int frequency = 22050, int format = MIX_DEFAULT_FORMAT, int channels = 1, int chunksize = 512) 520Mix_OpenAudio (int frequency = 48000, int format = MIX_DEFAULT_FORMAT, int channels = 1, int chunksize = 2048)
499 POSTCALL: 521 POSTCALL:
500 Mix_HookMusicFinished (music_finished); 522 Mix_HookMusicFinished (music_finished);
523 Mix_ChannelFinished (channel_finished);
501 524
502void 525void
503Mix_CloseAudio () 526Mix_CloseAudio ()
504 527
505int 528int
619 PUSHs (sv_2mortal (newSViv (b / y))); 642 PUSHs (sv_2mortal (newSViv (b / y)));
620 PUSHs (sv_2mortal (newSViv (a / y))); 643 PUSHs (sv_2mortal (newSViv (a / y)));
621} 644}
622 645
623void 646void
647error (char *message)
648 CODE:
649#ifdef _WIN32
650 MessageBox (0, message, "Crossfire+ Error", MB_OK | MB_ICONERROR | MB_SETFOREGROUND);
651#else
652 fprintf (stderr, "ERROR: %s\n", message);
653#endif
654
655void
624fatal (char *message) 656fatal (char *message)
625 CODE: 657 CODE:
626#ifdef _WIN32 658#ifdef _WIN32
627 MessageBox (0, message, "Crossfire+ Fatal Error", MB_OK | MB_ICONERROR | MB_SETFOREGROUND); 659 MessageBox (0, message, "Crossfire+ Fatal Error", MB_OK | MB_ICONERROR | MB_SETFOREGROUND);
628#else 660#else
631 exit (1); 663 exit (1);
632 664
633MODULE = CFClient PACKAGE = CFClient::Font 665MODULE = CFClient PACKAGE = CFClient::Font
634 666
635CFClient::Font 667CFClient::Font
636new_from_file (SV *class, char *path) 668new_from_file (SV *class, char *path, int id = 0)
637 CODE: 669 CODE:
638{ 670{
639 int count; 671 int count;
640 FcPattern *pattern = FcFreeTypeQuery ((const FcChar8 *)path, 0, 0, &count); 672 FcPattern *pattern = FcFreeTypeQuery ((const FcChar8 *)path, id, 0, &count);
641 RETVAL = pango_fc_font_description_from_pattern (pattern, 0); 673 RETVAL = pango_fc_font_description_from_pattern (pattern, 0);
642 FcPatternDestroy (pattern); 674 FcPatternDestroy (pattern);
643} 675}
644 OUTPUT: 676 OUTPUT:
645 RETVAL 677 RETVAL
1339 } *civ, const_iv[] = { 1371 } *civ, const_iv[] = {
1340# define const_iv(name) { # name, (IV)name } 1372# define const_iv(name) { # name, (IV)name }
1341 const_iv (GL_COLOR_MATERIAL), 1373 const_iv (GL_COLOR_MATERIAL),
1342 const_iv (GL_SMOOTH), 1374 const_iv (GL_SMOOTH),
1343 const_iv (GL_FLAT), 1375 const_iv (GL_FLAT),
1376 const_iv (GL_DITHER),
1344 const_iv (GL_BLEND), 1377 const_iv (GL_BLEND),
1378 const_iv (GL_SCISSOR_TEST),
1345 const_iv (GL_AND), 1379 const_iv (GL_AND),
1380 const_iv (GL_ONE),
1381 const_iv (GL_ZERO),
1346 const_iv (GL_SRC_ALPHA), 1382 const_iv (GL_SRC_ALPHA),
1383 const_iv (GL_SRC_ALPHA_SATURATE),
1347 const_iv (GL_ONE_MINUS_SRC_ALPHA), 1384 const_iv (GL_ONE_MINUS_SRC_ALPHA),
1385 const_iv (GL_ONE_MINUS_DST_ALPHA),
1348 const_iv (GL_RGB), 1386 const_iv (GL_RGB),
1349 const_iv (GL_RGBA), 1387 const_iv (GL_RGBA),
1350 const_iv (GL_UNSIGNED_BYTE), 1388 const_iv (GL_UNSIGNED_BYTE),
1351 const_iv (GL_ALPHA), 1389 const_iv (GL_ALPHA),
1352 const_iv (GL_FLOAT), 1390 const_iv (GL_FLOAT),
1367 const_iv (GL_NEAREST_MIPMAP_NEAREST), 1405 const_iv (GL_NEAREST_MIPMAP_NEAREST),
1368 const_iv (GL_LINEAR_MIPMAP_NEAREST), 1406 const_iv (GL_LINEAR_MIPMAP_NEAREST),
1369 const_iv (GL_NEAREST_MIPMAP_LINEAR), 1407 const_iv (GL_NEAREST_MIPMAP_LINEAR),
1370 const_iv (GL_LINEAR_MIPMAP_LINEAR), 1408 const_iv (GL_LINEAR_MIPMAP_LINEAR),
1371 const_iv (GL_GENERATE_MIPMAP), 1409 const_iv (GL_GENERATE_MIPMAP),
1372 const_iv (GL_LINEAR),
1373 const_iv (GL_MODULATE), 1410 const_iv (GL_MODULATE),
1411 const_iv (GL_DECAL),
1374 const_iv (GL_REPLACE), 1412 const_iv (GL_REPLACE),
1375 const_iv (GL_COLOR_BUFFER_BIT), 1413 const_iv (GL_COLOR_BUFFER_BIT),
1376 const_iv (GL_PROJECTION), 1414 const_iv (GL_PROJECTION),
1377 const_iv (GL_MODELVIEW), 1415 const_iv (GL_MODELVIEW),
1378 const_iv (GL_COLOR_LOGIC_OP), 1416 const_iv (GL_COLOR_LOGIC_OP),
1417 const_iv (GL_SEPARABLE_2D),
1379 const_iv (GL_CONVOLUTION_2D), 1418 const_iv (GL_CONVOLUTION_2D),
1380 const_iv (GL_CONVOLUTION_BORDER_MODE), 1419 const_iv (GL_CONVOLUTION_BORDER_MODE),
1381 const_iv (GL_CONSTANT_BORDER), 1420 const_iv (GL_CONSTANT_BORDER),
1382 const_iv (GL_LINES), 1421 const_iv (GL_LINES),
1383 const_iv (GL_QUADS), 1422 const_iv (GL_QUADS),
1408 1447
1409void glBlendFunc (int sfactor, int dfactor) 1448void glBlendFunc (int sfactor, int dfactor)
1410 1449
1411void glLogicOp (int opcode) 1450void glLogicOp (int opcode)
1412 1451
1452void glColorMask (int red, int green, int blue, int alpha)
1453
1413void glMatrixMode (int mode) 1454void glMatrixMode (int mode)
1414 1455
1415void glPushMatrix () 1456void glPushMatrix ()
1416 1457
1417void glPopMatrix () 1458void glPopMatrix ()
1420 1461
1421# near and far are due to microsofts buggy c compiler 1462# near and far are due to microsofts buggy c compiler
1422void glOrtho (double left, double right, double bottom, double top, double near_, double far_) 1463void glOrtho (double left, double right, double bottom, double top, double near_, double far_)
1423 1464
1424void glViewport (int x, int y, int width, int height) 1465void glViewport (int x, int y, int width, int height)
1466
1467void glScissor (int x, int y, int width, int height)
1425 1468
1426void glTranslate (float x, float y, float z = 0.) 1469void glTranslate (float x, float y, float z = 0.)
1427 CODE: 1470 CODE:
1428 glTranslatef (x, y, z); 1471 glTranslatef (x, y, z);
1429 1472
1440void glEnd () 1483void glEnd ()
1441 1484
1442void glColor (float r, float g, float b, float a = 1.0) 1485void glColor (float r, float g, float b, float a = 1.0)
1443 PROTOTYPE: @ 1486 PROTOTYPE: @
1444 CODE: 1487 CODE:
1445 glColor4f (r, g, b, a); 1488 glColor4ub (r * 255., g * 255., b * 255., a * 255.);
1446 1489
1447void glVertex (float x, float y, float z = 0.) 1490void glVertex (float x, float y, float z = 0.)
1448 CODE: 1491 CODE:
1449 glVertex3f (x, y, z); 1492 glVertex3f (x, y, z);
1450 1493
1469void glConvolutionFilter2D (int target, int internalformat, int width, int height, int format, int type, char *data) 1512void glConvolutionFilter2D (int target, int internalformat, int width, int height, int format, int type, char *data)
1470 CODE: 1513 CODE:
1471 GL_CALL (PFNGLCONVOLUTIONFILTER2DEXTPROC, glConvolutionFilter2D, 1514 GL_CALL (PFNGLCONVOLUTIONFILTER2DEXTPROC, glConvolutionFilter2D,
1472 (target, internalformat, width, height, format, type, data)); 1515 (target, internalformat, width, height, format, type, data));
1473 1516
1517void glSeparableFilter2D (int target, int internalformat, int width, int height, int format, int type, char *row, char *column)
1518 CODE:
1519 GL_CALL (PFNGLSEPARABLEFILTER2DEXTPROC, glSeparableFilter2D,
1520 (target, internalformat, width, height, format, type, row, column));
1521
1474void glTexImage2D (int target, int level, int internalformat, int width, int height, int border, int format, int type, char *data) 1522void glTexImage2D (int target, int level, int internalformat, int width, int height, int border, int format, int type, char *data)
1475 1523
1476void glCopyTexImage2D (int target, int level, int internalformat, int x, int y, int width, int height, int border) 1524void glCopyTexImage2D (int target, int level, int internalformat, int x, int y, int width, int height, int border)
1525
1526void glRasterPos (int x, int y)
1527 CODE:
1528 glRasterPos2i (x, y);
1529
1530void glCopyPixels (int x, int y, int width, int height, int type = GL_COLOR)
1477 1531
1478int glGenTexture () 1532int glGenTexture ()
1479 CODE: 1533 CODE:
1480{ 1534{
1481 GLuint name; 1535 GLuint name;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines