/src/GFX/FPSManager.xs

http://github.com/PerlGameDev/SDL · Unknown · 106 lines · 88 code · 18 blank · 0 comment · 0 complexity · 761385735ce008ae60f376dd242c1272 MD5 · raw file

  1. #include "EXTERN.h"
  2. #include "perl.h"
  3. #include "XSUB.h"
  4. #include "ppport.h"
  5. #ifndef aTHX_
  6. #define aTHX_
  7. #endif
  8. #include <SDL.h>
  9. #ifdef HAVE_SDL_GFX_FRAMERATE
  10. #include <SDL_framerate.h>
  11. #endif
  12. MODULE = SDL::GFX::FPSManager PACKAGE = SDL::GFX::FPSManager PREFIX = gfx_fps_
  13. =for documentation
  14. The Following are XS bindings to the SDL_gfx Library
  15. typedef struct {
  16. Uint32 framecount;
  17. float rateticks;
  18. Uint32 lastticks;
  19. Uint32 rate;
  20. } FPSmanager;
  21. Described here:
  22. See: L<http:/*www.ferzkopp.net/joomla/content/view/19/14/> */
  23. =cut
  24. #ifdef HAVE_SDL_GFX_FRAMERATE
  25. FPSmanager *
  26. gfx_fps_new (CLASS, framecount, rateticks, lastticks, rate)
  27. char *CLASS
  28. Uint32 framecount
  29. float rateticks
  30. Uint32 lastticks
  31. Uint32 rate
  32. CODE:
  33. RETVAL = (FPSmanager *) safemalloc(sizeof(FPSmanager));
  34. RETVAL->framecount = framecount;
  35. RETVAL->rateticks = rateticks;
  36. RETVAL->lastticks = lastticks;
  37. RETVAL->rate = rate;
  38. OUTPUT:
  39. RETVAL
  40. Uint32
  41. gfx_fps_framecount ( fps, ... )
  42. FPSmanager *fps
  43. CODE:
  44. if (items > 1 ) fps->framecount = SvIV(ST(1));
  45. RETVAL = fps->framecount;
  46. OUTPUT:
  47. RETVAL
  48. float
  49. gfx_fps_rateticks ( fps, ... )
  50. FPSmanager *fps
  51. CODE:
  52. if (items > 1 ) fps->rateticks = SvNV(ST(1));
  53. RETVAL = fps->rateticks;
  54. OUTPUT:
  55. RETVAL
  56. Uint32
  57. gfx_fps_lastticks ( fps, ... )
  58. FPSmanager *fps
  59. CODE:
  60. if (items > 1 ) fps->lastticks = SvIV(ST(1));
  61. RETVAL = fps->lastticks;
  62. OUTPUT:
  63. RETVAL
  64. Uint32
  65. gfx_fps_rate ( fps, ... )
  66. FPSmanager *fps
  67. CODE:
  68. if (items > 1 ) fps->rate = SvIV(ST(1));
  69. RETVAL = fps->rate;
  70. OUTPUT:
  71. RETVAL
  72. void
  73. gfx_fps_DESTROY(bag)
  74. SV *bag
  75. CODE:
  76. if( sv_isobject(bag) && (SvTYPE(SvRV(bag)) == SVt_PVMG) ) {
  77. void** pointers = (void**)INT2PTR(void *, SvIV((SV *)SvRV( bag )));
  78. FPSmanager * fps = (FPSmanager*)(pointers[0]);
  79. if (PERL_GET_CONTEXT == pointers[1]) {
  80. pointers[0] = NULL;
  81. safefree(fps);
  82. }
  83. } else if (bag == 0) {
  84. XSRETURN(0);
  85. } else {
  86. XSRETURN_UNDEF;
  87. }
  88. #endif