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