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.52 by root, Wed Apr 19 21:17:15 2006 UTC vs.
Revision 1.57 by root, Fri Apr 21 07:09:10 2006 UTC

33 typedef signed char int8_t; 33 typedef signed char int8_t;
34 typedef signed short int16_t; 34 typedef signed short int16_t;
35 typedef signed int int32_t; 35 typedef signed int int32_t;
36#endif 36#endif
37 37
38#include "glext.h"
39
38#define FOW_DARKNESS 32 40#define FOW_DARKNESS 32
39 41
40#define MAP_EXTEND_X 32 42#define MAP_EXTEND_X 32
41#define MAP_EXTEND_Y 512 43#define MAP_EXTEND_Y 512
42 44
237 break; 239 break;
238 240
239 row->col[x - row->c0].darkness = -1; 241 row->col[x - row->c0].darkness = -1;
240 } 242 }
241 } 243 }
244}
245
246static void
247music_finished ()
248{
249 SDL_UserEvent ev;
250
251 ev.type = SDL_USEREVENT;
252 ev.code = 0;
253 ev.data1 = 0;
254 ev.data2 = 0;
255
256 SDL_PushEvent ((SDL_Event *)&ev);
242} 257}
243 258
244MODULE = CFClient PACKAGE = CFClient 259MODULE = CFClient PACKAGE = CFClient
245 260
246PROTOTYPES: ENABLE 261PROTOTYPES: ENABLE
386 401
387 SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER, 1); 402 SDL_GL_SetAttribute (SDL_GL_DOUBLEBUFFER, 1);
388 SDL_GL_SetAttribute (SDL_GL_BUFFER_SIZE, 15); 403 SDL_GL_SetAttribute (SDL_GL_BUFFER_SIZE, 15);
389 SDL_GL_SetAttribute (SDL_GL_DEPTH_SIZE, 0); 404 SDL_GL_SetAttribute (SDL_GL_DEPTH_SIZE, 0);
390 405
406 SDL_EnableUNICODE (1);
407 SDL_EnableKeyRepeat (SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL);
408
391 m = SDL_ListModes (0, SDL_FULLSCREEN | SDL_OPENGL); 409 m = SDL_ListModes (0, SDL_FULLSCREEN | SDL_OPENGL);
392 410
393 if (m && m != (SDL_Rect **)-1) 411 if (m && m != (SDL_Rect **)-1)
394 while (*m) 412 while (*m)
395 { 413 {
410 ); 428 );
411 SDL_WM_SetCaption ("Crossfire+ Client " VERSION, "Crossfire+"); 429 SDL_WM_SetCaption ("Crossfire+ Client " VERSION, "Crossfire+");
412 OUTPUT: 430 OUTPUT:
413 RETVAL 431 RETVAL
414 432
415int 433void
416Mix_VolumeMusic (int newvol = -1) 434SDL_GL_SwapBuffers ()
435
436void
437SDL_PollEvent ()
438 PPCODE:
439{
440 SDL_Event ev;
441
442 while (SDL_PollEvent (&ev))
443 {
444 HV *hv = newHV ();
445 hv_store (hv, "type", 4, newSViv (ev.type), 0);
446 switch (ev.type)
447 {
448 case SDL_KEYDOWN:
449 case SDL_KEYUP:
450 hv_store (hv, "state", 5, newSViv (ev.key.state), 0);
451 hv_store (hv, "sym", 3, newSViv (ev.key.keysym.sym), 0);
452 hv_store (hv, "mod", 3, newSViv (ev.key.keysym.mod), 0);
453 hv_store (hv, "unicode", 7, newSViv (ev.key.keysym.unicode), 0);
454 break;
455
456 case SDL_ACTIVEEVENT:
457 hv_store (hv, "gain", 4, newSViv (ev.active.gain), 0);
458 hv_store (hv, "state", 5, newSViv (ev.active.state), 0);
459 break;
460
461 case SDL_MOUSEMOTION:
462 hv_store (hv, "state", 5, newSViv (ev.motion.state), 0);
463 hv_store (hv, "x", 1, newSViv (ev.motion.x), 0);
464 hv_store (hv, "y", 1, newSViv (ev.motion.y), 0);
465 hv_store (hv, "xrel", 4, newSViv (ev.motion.xrel), 0);
466 hv_store (hv, "yrel", 4, newSViv (ev.motion.yrel), 0);
467 break;
468
469 case SDL_MOUSEBUTTONDOWN:
470 case SDL_MOUSEBUTTONUP:
471 hv_store (hv, "button", 6, newSViv (ev.button.button), 0);
472 hv_store (hv, "state", 5, newSViv (ev.button.state), 0);
473 hv_store (hv, "x", 1, newSViv (ev.button.x), 0);
474 hv_store (hv, "y", 1, newSViv (ev.button.y), 0);
475 }
476
477 XPUSHs (sv_2mortal (newRV_noinc ((SV *)hv)));
478 }
479}
417 480
418int 481int
419Mix_OpenAudio (int frequency = 22050, int format = MIX_DEFAULT_FORMAT, int channels = 1, int chunksize = 512) 482Mix_OpenAudio (int frequency = 22050, int format = MIX_DEFAULT_FORMAT, int channels = 1, int chunksize = 512)
483 POSTCALL:
484 Mix_HookMusicFinished (music_finished);
420 485
421void 486void
422Mix_CloseAudio () 487Mix_CloseAudio ()
423 488
424int 489int
885 cell->darkness = -1; 950 cell->darkness = -1;
886 } 951 }
887} 952}
888 953
889SV * 954SV *
890mapmap (CFClient::Map self, int w, int h) 955mapmap (CFClient::Map self, int x0, int y0, int w, int h)
891 CODE: 956 CODE:
892{ 957{
893 int x0, x1, x; 958 int x1, x;
894 int y0, y1, y; 959 int y1, y;
895 int z; 960 int z;
896 SV *map_sv = newSV (w * h * sizeof (uint32_t)); 961 SV *map_sv = newSV (w * h * sizeof (uint32_t));
897 uint32_t *map = (uint32_t *)SvPVX (map_sv); 962 uint32_t *map = (uint32_t *)SvPVX (map_sv);
898 963
899 SvPOK_only (map_sv); 964 SvPOK_only (map_sv);
900 SvCUR_set (map_sv, w * h * sizeof (uint32_t)); 965 SvCUR_set (map_sv, w * h * sizeof (uint32_t));
901 966
902 x0 = self->x - w / 2; x1 = x0 + w; 967 x0 += self->x; x1 = x0 + w;
903 y0 = self->y - h / 2; y1 = y0 + h; 968 y0 += self->y; y1 = y0 + h;
904 969
905 for (y = y0; y < y1; y++) 970 for (y = y0; y < y1; y++)
906 { 971 {
907 maprow *row = 0 <= y && y < self->rows 972 maprow *row = 0 <= y && y < self->rows
908 ? self->row + y 973 ? self->row + y
1048 *data++ = 0; /* version 0 format */ 1113 *data++ = 0; /* version 0 format */
1049 *data++ = w >> 8; *data++ = w; 1114 *data++ = w >> 8; *data++ = w;
1050 *data++ = h >> 8; *data++ = h; 1115 *data++ = h >> 8; *data++ = h;
1051 1116
1052 // we need to do this 'cause we don't keep an absolute coord system for rows 1117 // we need to do this 'cause we don't keep an absolute coord system for rows
1053 // TODO: treat rows as we treat 1118 // TODO: treat rows as we treat columns
1054 map_get_row (self, y0 + self->y - self->oy);//D 1119 map_get_row (self, y0 + self->y - self->oy);//D
1055 map_get_row (self, y0 + self->y - self->oy + h - 1);//D 1120 map_get_row (self, y0 + self->y - self->oy + h - 1);//D
1056 1121
1057 x0 += self->x - self->ox; 1122 x0 += self->x - self->ox;
1058 y0 += self->y - self->oy; 1123 y0 += self->y - self->oy;
1122 1187
1123 w = *data++ << 8; w |= *data++; 1188 w = *data++ << 8; w |= *data++;
1124 h = *data++ << 8; h |= *data++; 1189 h = *data++ << 8; h |= *data++;
1125 1190
1126 // we need to do this 'cause we don't keep an absolute coord system for rows 1191 // we need to do this 'cause we don't keep an absolute coord system for rows
1127 // TODO: treat rows as we treat 1192 // TODO: treat rows as we treat columns
1128 map_get_row (self, y0 + self->y - self->oy);//D 1193 map_get_row (self, y0 + self->y - self->oy);//D
1129 map_get_row (self, y0 + self->y - self->oy + h - 1);//D 1194 map_get_row (self, y0 + self->y - self->oy + h - 1);//D
1130 1195
1131 x0 += self->x - self->ox; 1196 x0 += self->x - self->ox;
1132 y0 += self->y - self->oy; 1197 y0 += self->y - self->oy;
1223 CODE: 1288 CODE:
1224 RETVAL = Mix_PlayMusic (self, loops); 1289 RETVAL = Mix_PlayMusic (self, loops);
1225 OUTPUT: 1290 OUTPUT:
1226 RETVAL 1291 RETVAL
1227 1292
1293MODULE = CFClient PACKAGE = CFClient::OpenGL
1294
1295BOOT:
1296{
1297 HV *stash = gv_stashpv ("CFClient::OpenGL", 1);
1298 static const struct {
1299 const char *name;
1300 IV iv;
1301 } *civ, const_iv[] = {
1302# define const_iv(name) { # name, (IV)name }
1303 const_iv (GL_COLOR_MATERIAL),
1304 const_iv (GL_SMOOTH),
1305 const_iv (GL_FLAT),
1306 const_iv (GL_BLEND),
1307 const_iv (GL_AND),
1308 const_iv (GL_SRC_ALPHA),
1309 const_iv (GL_ONE_MINUS_SRC_ALPHA),
1310 const_iv (GL_RGB),
1311 const_iv (GL_RGBA),
1312 const_iv (GL_UNSIGNED_BYTE),
1313 const_iv (GL_ALPHA4),
1314 const_iv (GL_ALPHA),
1315 const_iv (GL_FLOAT),
1316 const_iv (GL_UNSIGNED_INT_8_8_8_8_REV),
1317 const_iv (GL_COMPILE),
1318 const_iv (GL_TEXTURE_1D),
1319 const_iv (GL_TEXTURE_2D),
1320 const_iv (GL_TEXTURE_ENV),
1321 const_iv (GL_TEXTURE_MAG_FILTER),
1322 const_iv (GL_TEXTURE_MIN_FILTER),
1323 const_iv (GL_TEXTURE_ENV_MODE),
1324 const_iv (GL_TEXTURE_WRAP_S),
1325 const_iv (GL_TEXTURE_WRAP_T),
1326 const_iv (GL_CLAMP),
1327 const_iv (GL_REPEAT),
1328 const_iv (GL_NEAREST),
1329 const_iv (GL_LINEAR),
1330 const_iv (GL_NEAREST_MIPMAP_NEAREST),
1331 const_iv (GL_LINEAR_MIPMAP_NEAREST),
1332 const_iv (GL_NEAREST_MIPMAP_LINEAR),
1333 const_iv (GL_LINEAR_MIPMAP_LINEAR),
1334 const_iv (GL_GENERATE_MIPMAP),
1335 const_iv (GL_LINEAR),
1336 const_iv (GL_MODULATE),
1337 const_iv (GL_REPLACE),
1338 const_iv (GL_COLOR_BUFFER_BIT),
1339 const_iv (GL_PROJECTION),
1340 const_iv (GL_MODELVIEW),
1341 const_iv (GL_COLOR_LOGIC_OP),
1342 const_iv (GL_CONVOLUTION_2D),
1343 const_iv (GL_CONVOLUTION_BORDER_MODE),
1344 const_iv (GL_CONSTANT_BORDER),
1345 const_iv (GL_LINES),
1346 const_iv (GL_QUADS),
1347 const_iv (GL_LINE_LOOP),
1348 const_iv (GL_PERSPECTIVE_CORRECTION_HINT),
1349 const_iv (GL_FASTEST),
1350# undef const_iv
1351 };
1352
1353 for (civ = const_iv + sizeof (const_iv) / sizeof (const_iv [0]); civ-- > const_iv; )
1354 newCONSTSUB (stash, (char *)civ->name, newSViv (civ->iv));
1355}
1356
1357int glGetError ()
1358
1359void glClear (int mask)
1360
1361void glClearColor (float r, float g, float b, float a = 1.0)
1362 PROTOTYPE: @
1363
1364void glEnable (int cap)
1365
1366void glDisable (int cap)
1367
1368void glShadeModel (int mode)
1369
1370void glHint (int target, int mode)
1371
1372void glBlendFunc (int sfactor, int dfactor)
1373
1374void glLogicOp (int opcode)
1375
1376void glMatrixMode (int mode)
1377
1378void glPushMatrix ()
1379
1380void glPopMatrix ()
1381
1382void glLoadIdentity ()
1383
1384void glOrtho (double left, double right, double bottom, double top, double near, double far)
1385
1386void glViewport (int x, int y, int width, int height)
1387
1388void glTranslate (float x, float y, float z = 0.)
1389 CODE:
1390 glTranslatef (x, y, z);
1391
1392void glScale (float x, float y, float z)
1393 CODE:
1394 glScalef (x, y, z);
1395
1396void glRotate (float angle, float x, float y, float z)
1397 CODE:
1398 glRotatef (angle, x, y, z);
1399
1400void glBegin (int mode)
1401
1402void glEnd ()
1403
1404void glColor (float r, float g, float b, float a = 1.0)
1405 PROTOTYPE: @
1406 CODE:
1407 glColor4f (r, g, b, a);
1408
1409void glVertex (float x, float y, float z = 0.)
1410 CODE:
1411 glVertex3f (x, y, z);
1412
1413void glTexCoord (float s, float t)
1414 CODE:
1415 glTexCoord2f (s, t);
1416
1417void glTexEnv (int target, int pname, float param)
1418 CODE:
1419 glTexEnvf (target, pname, param);
1420
1421void glTexParameter (int target, int pname, float param)
1422 CODE:
1423 glTexParameterf (target, pname, param);
1424
1425void glBindTexture (int target, int name)
1426
1427void glConvolutionParameter (int target, int pname, float params)
1428 CODE:
1429 glConvolutionParameterf (target, pname, params);
1430
1431void glConvolutionFilter2D (int target, int internalformat, int width, int height, int format, int type, char *data)
1432
1433void glTexImage2D (int target, int level, int internalformat, int width, int height, int border, int format, int type, char *data)
1434
1435void glCopyTexImage2D (int target, int level, int internalformat, int x, int y, int width, int height, int border)
1436
1437int glGenTexture ()
1438 CODE:
1439{
1440 GLuint name;
1441 glGenTextures (1, &name);
1442 RETVAL = name;
1443}
1444 OUTPUT:
1445 RETVAL
1446
1447void glDeleteTexture (int name)
1448 CODE:
1449{
1450 GLuint name_ = name;
1451 glDeleteTextures (1, &name_);
1452}
1453
1454int glGenList ()
1455 CODE:
1456 RETVAL = glGenLists (1);
1457 OUTPUT:
1458 RETVAL
1459
1460void glDeleteList (int list)
1461 CODE:
1462 glDeleteLists (list, 1);
1463
1464void glNewList (int list, int mode = GL_COMPILE)
1465
1466void glEndList ()
1467
1468void glCallList (int list)
1469

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines