ruby-sdl2 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.dir-locals.el +2 -0
- data/.gitignore +17 -0
- data/COPYING.txt +165 -0
- data/README.md +30 -0
- data/Rakefile +95 -0
- data/clipboard.c +37 -0
- data/doc/po/ja.po +1160 -0
- data/event.c +1027 -0
- data/extconf.rb +53 -0
- data/filesystem.c +36 -0
- data/gamecontroller.c +194 -0
- data/gl.c.m4 +201 -0
- data/hint.c +56 -0
- data/joystick.c +316 -0
- data/key.c.m4 +794 -0
- data/lib/sdl2.rb +3 -0
- data/lib/sdl2/version.rb +6 -0
- data/main.c +244 -0
- data/messagebox.c +231 -0
- data/mixer.c +1079 -0
- data/mouse.c +286 -0
- data/rubysdl2_internal.h +125 -0
- data/sample/chunk_destroy.rb +16 -0
- data/sample/icon.bmp +0 -0
- data/sample/memory_test/m1.rb +28 -0
- data/sample/memory_test/m2.rb +18 -0
- data/sample/memory_test/m3.rb +12 -0
- data/sample/message_box.rb +33 -0
- data/sample/music_player.rb +133 -0
- data/sample/playwave.rb +19 -0
- data/sample/primitives.rb +32 -0
- data/sample/test_clipboard.rb +11 -0
- data/sample/test_controller.rb +57 -0
- data/sample/test_joystick.rb +48 -0
- data/sample/test_keyboard.rb +44 -0
- data/sample/test_mouse.rb +44 -0
- data/sample/test_surface.rb +8 -0
- data/sample/test_ttf.rb +77 -0
- data/sample/test_video.rb +53 -0
- data/sample/testgl.rb +175 -0
- data/sample/testsprite.rb +296 -0
- data/sample/testspriteminimal.rb +75 -0
- data/sample/timer.rb +11 -0
- data/sample/version.rb +12 -0
- data/sample/video_info.rb +65 -0
- data/timer.c +63 -0
- data/ttf.c +196 -0
- data/video.c.m4 +2935 -0
- metadata +102 -0
data/mouse.c
ADDED
@@ -0,0 +1,286 @@
|
|
1
|
+
#include "rubysdl2_internal.h"
|
2
|
+
#include <SDL_mouse.h>
|
3
|
+
#include <SDL_events.h>
|
4
|
+
|
5
|
+
static VALUE mMouse;
|
6
|
+
static VALUE cCursor;
|
7
|
+
static VALUE cState;
|
8
|
+
|
9
|
+
/*
|
10
|
+
* Document-module: SDL2::Mouse
|
11
|
+
*
|
12
|
+
* This module have mouse input handling functions.
|
13
|
+
*
|
14
|
+
*/
|
15
|
+
|
16
|
+
/*
|
17
|
+
* Document-class: SDL2::Mouse::Cursor
|
18
|
+
*
|
19
|
+
* This class represents mouse cursor shape, and
|
20
|
+
* have some class-methods for a mouse cursor.
|
21
|
+
*/
|
22
|
+
|
23
|
+
/*
|
24
|
+
* Document-class: SDL2::Mouse::State
|
25
|
+
*
|
26
|
+
* This class represents mouse stetes.
|
27
|
+
*
|
28
|
+
* You can get a mouse state with {SDL2::Mouse.state}.
|
29
|
+
*
|
30
|
+
* @attribute x
|
31
|
+
* the x coordinate of the mouse cursor.
|
32
|
+
*
|
33
|
+
* For {SDL2::Mouse.state}, this attribute means the x coordinate
|
34
|
+
* relative to the window.
|
35
|
+
* For {SDL2::Mouse.relative_state}, this attribute means the x coordinate
|
36
|
+
* relative to the previous call of {SDL2::Mouse.relative_state}.
|
37
|
+
*
|
38
|
+
* @return [Integer]
|
39
|
+
*
|
40
|
+
* @attribute y
|
41
|
+
* the y coordinate of the mouse cursor
|
42
|
+
*
|
43
|
+
* For {SDL2::Mouse.state}, this attribute means the y coordinate
|
44
|
+
* relative to the window.
|
45
|
+
* For {SDL2::Mouse.relative_state}, this attribute means the y coordinate
|
46
|
+
* relative to the previous call of {SDL2::Mouse.relative_state}.
|
47
|
+
*
|
48
|
+
* @return [Integer]
|
49
|
+
*
|
50
|
+
* @attribute button_bits
|
51
|
+
* button bits
|
52
|
+
* @return [Integer]
|
53
|
+
* @see #pressed?
|
54
|
+
*/
|
55
|
+
|
56
|
+
static VALUE State_new(int x, int y, Uint32 buttons)
|
57
|
+
{
|
58
|
+
VALUE state = rb_obj_alloc(cState);
|
59
|
+
rb_iv_set(state, "@x", INT2FIX(x));
|
60
|
+
rb_iv_set(state, "@y", INT2FIX(y));
|
61
|
+
rb_iv_set(state, "@button_bits", UINT2NUM(buttons));
|
62
|
+
return state;
|
63
|
+
}
|
64
|
+
|
65
|
+
static VALUE mouse_state(Uint32 (*func)(int*,int*))
|
66
|
+
{
|
67
|
+
int x, y;
|
68
|
+
Uint32 state;
|
69
|
+
state = func(&x, &y);
|
70
|
+
return State_new(x, y, state);
|
71
|
+
}
|
72
|
+
|
73
|
+
#if SDL_VERSION_ATLEAST(2,0,4)
|
74
|
+
/*
|
75
|
+
* Get the current mouse state in relation to the desktop.
|
76
|
+
*
|
77
|
+
* The return value contains the x and y coordinates of the cursor
|
78
|
+
* relative to the desktop and the state of mouse buttons.
|
79
|
+
*
|
80
|
+
* @note This module function is available since SDL 2.0.4.
|
81
|
+
* @return [SDL2::Mouse::State] current state
|
82
|
+
*/
|
83
|
+
static VALUE Mouse_s_global_state(VALUE self)
|
84
|
+
{
|
85
|
+
return mouse_state(SDL_GetGlobalMouseState);
|
86
|
+
}
|
87
|
+
#endif
|
88
|
+
|
89
|
+
/*
|
90
|
+
* Get the current state of the mouse.
|
91
|
+
*
|
92
|
+
* The return value contains the x and y coordinates of the cursor and
|
93
|
+
* the state of mouse buttons.
|
94
|
+
*
|
95
|
+
* @return [SDL2::Mouse::State] current state
|
96
|
+
*/
|
97
|
+
static VALUE Mouse_s_state(VALUE self)
|
98
|
+
{
|
99
|
+
return mouse_state(SDL_GetMouseState);
|
100
|
+
}
|
101
|
+
|
102
|
+
/*
|
103
|
+
* Return true if relative mouse mode is enabled.
|
104
|
+
*
|
105
|
+
* @see .relative_mode=
|
106
|
+
*/
|
107
|
+
static VALUE Mouse_s_relative_mode_p(VALUE self)
|
108
|
+
{
|
109
|
+
return INT2BOOL(SDL_GetRelativeMouseMode());
|
110
|
+
}
|
111
|
+
|
112
|
+
/*
|
113
|
+
* @overload relative_mode=(bool)
|
114
|
+
* @param [Boolean] bool true if you want to enable relative mouse mode
|
115
|
+
*
|
116
|
+
* Set relative mouse mode.
|
117
|
+
*
|
118
|
+
* While the mouse is in relative mode, the cursor is hidden, and the
|
119
|
+
* driver will try to report continuous motion in the current window.
|
120
|
+
* Only relative motion events will be delivered, the mouse position
|
121
|
+
* will not change.
|
122
|
+
*
|
123
|
+
* @note This function will flush any pending mouse motion.
|
124
|
+
*
|
125
|
+
* @return [bool]
|
126
|
+
* @see .relative_mode?
|
127
|
+
*/
|
128
|
+
static VALUE Mouse_s_set_relative_mode(VALUE self, VALUE enabled)
|
129
|
+
{
|
130
|
+
HANDLE_ERROR(SDL_SetRelativeMouseMode(RTEST(enabled)));
|
131
|
+
return enabled;
|
132
|
+
}
|
133
|
+
|
134
|
+
/*
|
135
|
+
* Get the relative state of the mouse.
|
136
|
+
*
|
137
|
+
* The button state is same as {.state} and
|
138
|
+
* x and y of the returned object are set to the
|
139
|
+
* mouse deltas since the last call to this method.
|
140
|
+
*
|
141
|
+
* @return [SDL2::Mouse::State]
|
142
|
+
*/
|
143
|
+
static VALUE Mouse_s_relative_state(VALUE self)
|
144
|
+
{
|
145
|
+
return mouse_state(SDL_GetRelativeMouseState);
|
146
|
+
}
|
147
|
+
|
148
|
+
/*
|
149
|
+
* Get the window which has mouse focus.
|
150
|
+
*
|
151
|
+
* @return [SDL2::Window] the window which has mouse focus
|
152
|
+
* @return [nil] if no window governed by SDL has mouse focus
|
153
|
+
*/
|
154
|
+
static VALUE Mouse_s_focused_window(VALUE self)
|
155
|
+
{
|
156
|
+
SDL_Window* window = SDL_GetMouseFocus();
|
157
|
+
if (!window)
|
158
|
+
return Qnil;
|
159
|
+
else
|
160
|
+
return find_window_by_id(SDL_GetWindowID(window));
|
161
|
+
}
|
162
|
+
|
163
|
+
/*
|
164
|
+
* Show the mouse cursor.
|
165
|
+
* @return [nil]
|
166
|
+
*/
|
167
|
+
static VALUE Cursor_s_show(VALUE self)
|
168
|
+
{
|
169
|
+
HANDLE_ERROR(SDL_ShowCursor(SDL_ENABLE));
|
170
|
+
return Qnil;
|
171
|
+
}
|
172
|
+
|
173
|
+
/*
|
174
|
+
* Hide the mouse cursor.
|
175
|
+
* @return [nil]
|
176
|
+
*/
|
177
|
+
static VALUE Cursor_s_hide(VALUE self)
|
178
|
+
{
|
179
|
+
HANDLE_ERROR(SDL_ShowCursor(SDL_DISABLE));
|
180
|
+
return Qnil;
|
181
|
+
}
|
182
|
+
|
183
|
+
/*
|
184
|
+
* Return true if the mouse cursor is shown.
|
185
|
+
*/
|
186
|
+
static VALUE Cursor_s_shown_p(VALUE self)
|
187
|
+
{
|
188
|
+
return INT2BOOL(HANDLE_ERROR(SDL_ShowCursor(SDL_QUERY)));
|
189
|
+
}
|
190
|
+
|
191
|
+
/*
|
192
|
+
* @overload warp(window, x, y)
|
193
|
+
* Move the mouse cursor to the given position within the window.
|
194
|
+
*
|
195
|
+
* @param [SDL::Window] window the window to move the mouse cursor into
|
196
|
+
* @param [Integer] x the x coordinate within the window
|
197
|
+
* @param [Integer] y the y coordinate within the window
|
198
|
+
* @return [nil]
|
199
|
+
*/
|
200
|
+
static VALUE Cursor_s_warp(VALUE self, VALUE window, VALUE x, VALUE y)
|
201
|
+
{
|
202
|
+
SDL_WarpMouseInWindow(Get_SDL_Window(window), NUM2INT(x), NUM2INT(y));
|
203
|
+
return Qnil;
|
204
|
+
}
|
205
|
+
|
206
|
+
#if SDL_VERSION_ATLEAST(2,0,4)
|
207
|
+
/*
|
208
|
+
* @overload warp_globally(x, y)
|
209
|
+
* Move the mouse cursor to the given position within the desktop.
|
210
|
+
*
|
211
|
+
* @note This class module function is available since SDL 2.0.4.
|
212
|
+
* @param [Integer] x the x coordinate within the desktop
|
213
|
+
* @param [Integer] y the y coordinate within the desktop
|
214
|
+
* @return [nil]
|
215
|
+
*/
|
216
|
+
static VALUE Cursor_s_warp_globally(VALUE self, VALUE x, VALUE y)
|
217
|
+
{
|
218
|
+
SDL_WarpMouseGlobal(NUM2INT(x), NUM2INT(y));
|
219
|
+
return Qnil;
|
220
|
+
}
|
221
|
+
#endif
|
222
|
+
|
223
|
+
/*
|
224
|
+
* @overload pressed?(index)
|
225
|
+
* Return true a mouse button is pressed.
|
226
|
+
*
|
227
|
+
* @param [Integer] index the index of a mouse button, start at index 0
|
228
|
+
*
|
229
|
+
*/
|
230
|
+
static VALUE State_pressed_p(VALUE self, VALUE index)
|
231
|
+
{
|
232
|
+
int idx = NUM2INT(index);
|
233
|
+
if (idx < 0 || idx >= 32)
|
234
|
+
rb_raise(rb_eArgError, "button index out of range (%d for 1..32)", idx);
|
235
|
+
return INT2BOOL(NUM2UINT(rb_iv_get(self, "@button_bits")) & SDL_BUTTON(idx));
|
236
|
+
}
|
237
|
+
|
238
|
+
/* @return [String] inspection string */
|
239
|
+
static VALUE State_inspect(VALUE self)
|
240
|
+
{
|
241
|
+
int i;
|
242
|
+
Uint32 buttons = NUM2UINT(rb_iv_get(self, "@button_bits"));
|
243
|
+
VALUE pressed = rb_ary_new();
|
244
|
+
VALUE string_for_pressed;
|
245
|
+
for (i=1; i<=32; ++i)
|
246
|
+
if (buttons & SDL_BUTTON(i))
|
247
|
+
rb_ary_push(pressed, rb_sprintf("%d", i));
|
248
|
+
|
249
|
+
string_for_pressed = rb_ary_join(pressed, rb_str_new2(" "));
|
250
|
+
return rb_sprintf("<%s:%p x=%d y=%d pressed=[%s]>",
|
251
|
+
rb_obj_classname(self), (void*)self,
|
252
|
+
NUM2INT(rb_iv_get(self, "@x")), NUM2INT(rb_iv_get(self, "@y")),
|
253
|
+
StringValueCStr(string_for_pressed));
|
254
|
+
}
|
255
|
+
|
256
|
+
void rubysdl2_init_mouse(void)
|
257
|
+
{
|
258
|
+
mMouse = rb_define_module_under(mSDL2, "Mouse");
|
259
|
+
|
260
|
+
#if SDL_VERSION_ATLEAST(2,0,4)
|
261
|
+
rb_define_module_function(mMouse, "global_state", Mouse_s_global_state, 0);
|
262
|
+
#endif
|
263
|
+
rb_define_module_function(mMouse, "state", Mouse_s_state, 0);
|
264
|
+
rb_define_module_function(mMouse, "relative_mode?", Mouse_s_relative_mode_p, 0);
|
265
|
+
rb_define_module_function(mMouse, "relative_mode=", Mouse_s_set_relative_mode, 1);
|
266
|
+
rb_define_module_function(mMouse, "relative_state", Mouse_s_relative_state, 0);
|
267
|
+
rb_define_module_function(mMouse, "focused_window", Mouse_s_focused_window, 0);
|
268
|
+
|
269
|
+
cCursor = rb_define_class_under(mMouse, "Cursor", rb_cObject);
|
270
|
+
|
271
|
+
rb_define_singleton_method(cCursor, "show", Cursor_s_show, 0);
|
272
|
+
rb_define_singleton_method(cCursor, "hide", Cursor_s_hide, 0);
|
273
|
+
rb_define_singleton_method(cCursor, "shown?", Cursor_s_shown_p, 0);
|
274
|
+
rb_define_singleton_method(cCursor, "warp", Cursor_s_warp, 3);
|
275
|
+
#if SDL_VERSION_ATLEAST(2,0,4)
|
276
|
+
rb_define_singleton_method(cCursor, "warp_globally", Cursor_s_warp_globally, 3);
|
277
|
+
#endif
|
278
|
+
|
279
|
+
|
280
|
+
cState = rb_define_class_under(mMouse, "State", rb_cObject);
|
281
|
+
|
282
|
+
rb_undef_method(rb_singleton_class(cState), "new");
|
283
|
+
define_attr_readers(cState, "x", "y", "button_bits", NULL);
|
284
|
+
rb_define_method(cState, "pressed?", State_pressed_p, 1);
|
285
|
+
rb_define_method(cState, "inspect", State_inspect, 0);
|
286
|
+
}
|
data/rubysdl2_internal.h
ADDED
@@ -0,0 +1,125 @@
|
|
1
|
+
/*
|
2
|
+
* Ruby/SDL2 Ruby extensiion library for SDL 2.x
|
3
|
+
*
|
4
|
+
* Copyright (C) 2014 Ippei Obayashi
|
5
|
+
*
|
6
|
+
* This file is part of Ruby/SDL2.
|
7
|
+
*
|
8
|
+
* Ruby/SDL2 is free software: you can redistribute it and/or modify
|
9
|
+
* it under the terms of the GNU Lesser General Public License as published by
|
10
|
+
* the Free Software Foundation, either version 3 of the License, or
|
11
|
+
* (at your option) any later version.
|
12
|
+
*
|
13
|
+
* Ruby/SDL2 is distributed in the hope that it will be useful,
|
14
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
* GNU Lesser General Public License for more details.
|
17
|
+
*
|
18
|
+
* You should have received a copy of the GNU Lesser General Public License
|
19
|
+
* along with Ruby/SDL2. If not, see <http://www.gnu.org/licenses/>.
|
20
|
+
*/
|
21
|
+
#ifndef RUBYSDL2_INTERNAL_H
|
22
|
+
#define RUBYSDL2_INTERNAL_H
|
23
|
+
|
24
|
+
#include <ruby.h>
|
25
|
+
#include <ruby/encoding.h>
|
26
|
+
#define SDL_MAIN_HANDLED
|
27
|
+
#include <SDL_surface.h>
|
28
|
+
#include <SDL_version.h>
|
29
|
+
#include <SDL_video.h>
|
30
|
+
|
31
|
+
#ifndef SDL2_EXTERN
|
32
|
+
#define SDL2_EXTERN extern
|
33
|
+
#endif
|
34
|
+
|
35
|
+
/** utility functions */
|
36
|
+
int rubysdl2_handle_error(int code, const char* cfunc);
|
37
|
+
int rubysdl2_is_active(void);
|
38
|
+
void rubysdl2_define_attr_readers(VALUE klass, ...);
|
39
|
+
VALUE rubysdl2_utf8str_new_cstr(const char* str);
|
40
|
+
VALUE rubysdl2_Surface_new(SDL_Surface* surface);
|
41
|
+
SDL_Color rubysdl2_Array_to_SDL_Color(VALUE ary);
|
42
|
+
VALUE rubysdl2_SDL_version_to_String(const SDL_version* ver);
|
43
|
+
VALUE rubysdl2_SDL_version_to_Array(const SDL_version* ver);
|
44
|
+
VALUE rubysdl2_find_window_by_id(Uint32 id);
|
45
|
+
SDL_Rect* rubysdl2_Get_SDL_Rect(VALUE);
|
46
|
+
SDL_Window* rubysdl2_Get_SDL_Window(VALUE);
|
47
|
+
const char* rubysdl2_INT2BOOLCSTR(int);
|
48
|
+
|
49
|
+
/** initialize interfaces */
|
50
|
+
void rubysdl2_init_hints(void);
|
51
|
+
void rubysdl2_init_video(void);
|
52
|
+
void rubysdl2_init_gl(void);
|
53
|
+
void rubysdl2_init_messagebox(void);
|
54
|
+
void rubysdl2_init_event(void);
|
55
|
+
void rubysdl2_init_key(void);
|
56
|
+
void rubysdl2_init_mouse(void);
|
57
|
+
void rubysdl2_init_joystick(void);
|
58
|
+
void rubysdl2_init_timer(void);
|
59
|
+
void rubysdl2_init_image(void);
|
60
|
+
void rubysdl2_init_mixer(void);
|
61
|
+
void rubysdl2_init_ttf(void);
|
62
|
+
void rubysdl2_init_filesystem(void);
|
63
|
+
void rubysdl2_init_clipboard(void);
|
64
|
+
void rubysdl2_init_gamecontorller(void);
|
65
|
+
|
66
|
+
/** macros */
|
67
|
+
#define HANDLE_ERROR(c) (rubysdl2_handle_error((c), __func__))
|
68
|
+
#define SDL_ERROR() (HANDLE_ERROR(-1))
|
69
|
+
#define INT2BOOL(x) ((x)?Qtrue:Qfalse)
|
70
|
+
#define NUM2UCHAR NUM2UINT
|
71
|
+
#define UCHAR2NUM UINT2NUM
|
72
|
+
#define rb_str_export_to_utf8(str) rb_str_export_to_enc((str), rb_utf8_encoding())
|
73
|
+
|
74
|
+
#define DEFINE_GETTER(scope, ctype, var_class, classname) \
|
75
|
+
scope ctype* Get_##ctype(VALUE obj) \
|
76
|
+
{ \
|
77
|
+
ctype* s; \
|
78
|
+
if (!rb_obj_is_kind_of(obj, var_class)) \
|
79
|
+
rb_raise(rb_eTypeError, "wrong argument type %s (expected %s)", \
|
80
|
+
rb_obj_classname(obj), classname); \
|
81
|
+
Data_Get_Struct(obj, ctype, s); \
|
82
|
+
\
|
83
|
+
return s; \
|
84
|
+
}
|
85
|
+
|
86
|
+
#define DEFINE_WRAP_GETTER(scope, SDL_typename, struct_name, field, classname) \
|
87
|
+
scope SDL_typename* Get_##SDL_typename(VALUE obj) \
|
88
|
+
{ \
|
89
|
+
struct_name* s = Get_##struct_name(obj); \
|
90
|
+
if (s->field == NULL) \
|
91
|
+
HANDLE_ERROR(SDL_SetError(classname " is already destroyed")); \
|
92
|
+
\
|
93
|
+
return s->field; \
|
94
|
+
}
|
95
|
+
|
96
|
+
#define DEFINE_DESTROY_P(scope, struct_name, field) \
|
97
|
+
scope VALUE struct_name##_destroy_p(VALUE self) \
|
98
|
+
{ \
|
99
|
+
return INT2BOOL(Get_##struct_name(self)->field == NULL); \
|
100
|
+
}
|
101
|
+
|
102
|
+
#define DEFINE_WRAPPER(SDL_typename, struct_name, field, var_class, classname) \
|
103
|
+
DEFINE_GETTER(static, struct_name, var_class, classname); \
|
104
|
+
DEFINE_WRAP_GETTER(static ,SDL_typename, struct_name, field, classname); \
|
105
|
+
DEFINE_DESTROY_P(static, struct_name, field);
|
106
|
+
|
107
|
+
/** classes and modules */
|
108
|
+
SDL2_EXTERN VALUE rubysdl2_mSDL2;
|
109
|
+
SDL2_EXTERN VALUE rubysdl2_eSDL2Error;
|
110
|
+
|
111
|
+
/** prefix macros */
|
112
|
+
#define define_attr_readers rubysdl2_define_attr_readers
|
113
|
+
#define utf8str_new_cstr rubysdl2_utf8str_new_cstr
|
114
|
+
#define Surface_new rubysdl2_Surface_new
|
115
|
+
#define Get_SDL_Rect rubysdl2_Get_SDL_Rect
|
116
|
+
#define Get_SDL_Window rubysdl2_Get_SDL_Window
|
117
|
+
#define Array_to_SDL_Color rubysdl2_Array_to_SDL_Color
|
118
|
+
#define mSDL2 rubysdl2_mSDL2
|
119
|
+
#define eSDL2Error rubysdl2_eSDL2Error
|
120
|
+
#define SDL_version_to_String rubysdl2_SDL_version_to_String
|
121
|
+
#define SDL_version_to_Array rubysdl2_SDL_version_to_Array
|
122
|
+
#define INT2BOOLCSTR rubysdl2_INT2BOOLCSTR
|
123
|
+
#define find_window_by_id rubysdl2_find_window_by_id
|
124
|
+
|
125
|
+
#endif
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'sdl2'
|
2
|
+
|
3
|
+
SDL2::init(SDL2::INIT_AUDIO)
|
4
|
+
|
5
|
+
SDL2::Mixer.init(SDL2::Mixer::INIT_FLAC|SDL2::Mixer::INIT_MOD|
|
6
|
+
SDL2::Mixer::INIT_MP3|SDL2::Mixer::INIT_OGG)
|
7
|
+
|
8
|
+
SDL2::Mixer.open(22050, SDL2::Mixer::DEFAULT_FORMAT, 2, 512)
|
9
|
+
|
10
|
+
chunk = SDL2::Mixer::Chunk.load(ARGV[0])
|
11
|
+
p chunk; chunk.destroy; p chunk; p chunk.destroy?
|
12
|
+
|
13
|
+
mus = SDL2::Mixer::Music.load(ARGV[0])
|
14
|
+
p mus; mus.destroy; p mus; p mus.destroy?
|
15
|
+
|
16
|
+
GC.start
|
data/sample/icon.bmp
ADDED
Binary file
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require "sdl2"
|
2
|
+
|
3
|
+
SDL2.init(SDL2::INIT_VIDEO|SDL2::INIT_EVENTS)
|
4
|
+
|
5
|
+
window = SDL2::Window.create("testsprite",
|
6
|
+
SDL2::Window::POS_CENTERED, SDL2::Window::POS_CENTERED,
|
7
|
+
640, 480, 0)
|
8
|
+
|
9
|
+
def f2(renderer)
|
10
|
+
surface = SDL2::Surface.load_bmp("icon.bmp")
|
11
|
+
10.times { renderer.create_texture_from(surface) }
|
12
|
+
p renderer.debug_info
|
13
|
+
end
|
14
|
+
|
15
|
+
def f1(window)
|
16
|
+
renderer = window.create_renderer(-1, 0)
|
17
|
+
p window.debug_info
|
18
|
+
p renderer.debug_info
|
19
|
+
f2(renderer)
|
20
|
+
GC.start
|
21
|
+
p renderer.debug_info
|
22
|
+
end
|
23
|
+
|
24
|
+
f1(window)
|
25
|
+
GC.start
|
26
|
+
p window.debug_info
|
27
|
+
|
28
|
+
|