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.53 by root, Wed Apr 19 21:38:04 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
414 SDL_WM_SetCaption ("Crossfire+ Client " VERSION, "Crossfire+"); 429 SDL_WM_SetCaption ("Crossfire+ Client " VERSION, "Crossfire+");
415 OUTPUT: 430 OUTPUT:
416 RETVAL 431 RETVAL
417 432
418void 433void
434SDL_GL_SwapBuffers ()
435
436void
419SDL_PollEvent () 437SDL_PollEvent ()
420 PPCODE: 438 PPCODE:
421{ 439{
422 SDL_Event ev; 440 SDL_Event ev;
423 441
460 } 478 }
461} 479}
462 480
463int 481int
464Mix_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);
465 485
466void 486void
467Mix_CloseAudio () 487Mix_CloseAudio ()
468 488
469int 489int
930 cell->darkness = -1; 950 cell->darkness = -1;
931 } 951 }
932} 952}
933 953
934SV * 954SV *
935mapmap (CFClient::Map self, int w, int h) 955mapmap (CFClient::Map self, int x0, int y0, int w, int h)
936 CODE: 956 CODE:
937{ 957{
938 int x0, x1, x; 958 int x1, x;
939 int y0, y1, y; 959 int y1, y;
940 int z; 960 int z;
941 SV *map_sv = newSV (w * h * sizeof (uint32_t)); 961 SV *map_sv = newSV (w * h * sizeof (uint32_t));
942 uint32_t *map = (uint32_t *)SvPVX (map_sv); 962 uint32_t *map = (uint32_t *)SvPVX (map_sv);
943 963
944 SvPOK_only (map_sv); 964 SvPOK_only (map_sv);
945 SvCUR_set (map_sv, w * h * sizeof (uint32_t)); 965 SvCUR_set (map_sv, w * h * sizeof (uint32_t));
946 966
947 x0 = self->x - w / 2; x1 = x0 + w; 967 x0 += self->x; x1 = x0 + w;
948 y0 = self->y - h / 2; y1 = y0 + h; 968 y0 += self->y; y1 = y0 + h;
949 969
950 for (y = y0; y < y1; y++) 970 for (y = y0; y < y1; y++)
951 { 971 {
952 maprow *row = 0 <= y && y < self->rows 972 maprow *row = 0 <= y && y < self->rows
953 ? self->row + y 973 ? self->row + y
1093 *data++ = 0; /* version 0 format */ 1113 *data++ = 0; /* version 0 format */
1094 *data++ = w >> 8; *data++ = w; 1114 *data++ = w >> 8; *data++ = w;
1095 *data++ = h >> 8; *data++ = h; 1115 *data++ = h >> 8; *data++ = h;
1096 1116
1097 // 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
1098 // TODO: treat rows as we treat 1118 // TODO: treat rows as we treat columns
1099 map_get_row (self, y0 + self->y - self->oy);//D 1119 map_get_row (self, y0 + self->y - self->oy);//D
1100 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
1101 1121
1102 x0 += self->x - self->ox; 1122 x0 += self->x - self->ox;
1103 y0 += self->y - self->oy; 1123 y0 += self->y - self->oy;
1167 1187
1168 w = *data++ << 8; w |= *data++; 1188 w = *data++ << 8; w |= *data++;
1169 h = *data++ << 8; h |= *data++; 1189 h = *data++ << 8; h |= *data++;
1170 1190
1171 // 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
1172 // TODO: treat rows as we treat 1192 // TODO: treat rows as we treat columns
1173 map_get_row (self, y0 + self->y - self->oy);//D 1193 map_get_row (self, y0 + self->y - self->oy);//D
1174 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
1175 1195
1176 x0 += self->x - self->ox; 1196 x0 += self->x - self->ox;
1177 y0 += self->y - self->oy; 1197 y0 += self->y - self->oy;
1268 CODE: 1288 CODE:
1269 RETVAL = Mix_PlayMusic (self, loops); 1289 RETVAL = Mix_PlayMusic (self, loops);
1270 OUTPUT: 1290 OUTPUT:
1271 RETVAL 1291 RETVAL
1272 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