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.56 by root, Thu Apr 20 09:13:31 2006 UTC

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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines