sdl2-bindings 0.0.0.pre

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: dff21b21106958f4db5399f9a5db1e6d77368c076630554d9c2f6eaf3fe3379a
4
+ data.tar.gz: d613101c0808dbe74ceb554da6c906bf9fbd9dcae26045f38d4c8699a617b49e
5
+ SHA512:
6
+ metadata.gz: 5fcd3d8eb266fd79019c646235f61f53cf305aa4ddeadba1b9abb6456ca12d58e6726ca91886c90c9d10f9258aa5b7a4718be9070a7fc07c592ef67bd71e711a
7
+ data.tar.gz: bd6a51dd22d647c0988ec0b22a3dd0da2ae62a01804f6d2245368a405bec01e9c252d031293c68e992c2a4d0522e3aea9bd5b42e81bc37b7b590fff9dac4fbd5
@@ -0,0 +1,55 @@
1
+ 2019-08-31 vaiorabbit <http://twitter.com/vaiorabbit>
2
+
3
+ * Refactoring + Cleanup
4
+ * Some tests are usable again
5
+
6
+ 2019-08-28 vaiorabbit <http://twitter.com/vaiorabbit>
7
+
8
+ * Exception-safety
9
+
10
+ 2019-08-27 vaiorabbit <http://twitter.com/vaiorabbit>
11
+
12
+ * lib/sdl2_mixer.rb: Added (experimental)
13
+
14
+ 2019-08-24 vaiorabbit <http://twitter.com/vaiorabbit>
15
+
16
+ * Added SDL 2.0.10 features.
17
+ * Added generator. Binding codes are generated semi-automatically.
18
+ * Now depends on Ruby/FFI. Note that some codes in 'test' directory are still not usable.
19
+
20
+ 2016-04-03 vaiorabbit <http://twitter.com/vaiorabbit>
21
+
22
+ * lib/sdl2_gfx.rb, test/test_gfx.rb: Added.
23
+
24
+ 2016-04-02 vaiorabbit <http://twitter.com/vaiorabbit>
25
+
26
+ * Added SDL 2.0.4 features.
27
+ * lib/version.rb: Added SDL_MAJOR_VERSION, etc.
28
+
29
+ 2015-09-29 vaiorabbit <http://twitter.com/vaiorabbit>
30
+
31
+ * lib/sdl2_ttf.rb: Added.
32
+
33
+ 2015-09-28 vaiorabbit <http://twitter.com/vaiorabbit>
34
+
35
+ * lib/sdl2_image.rb: Added.
36
+ * lib/sdl2_mixer.rb: Added.
37
+
38
+ 2015-09-22 vaiorabbit <http://twitter.com/vaiorabbit>
39
+
40
+ * lib/pixels.rb, lib/gamecontroller.rb, lib/joystick.rb: Added.
41
+ * lib/rwops.rb, lib/syswm.rb, lib/surface.rb, lib/render.rb: Added.
42
+ * lib/cpuinfo.rb, lib/gesture.rb, lib/touch.rb, lib/audio.rb: Added.
43
+
44
+ 2015-09-21 vaiorabbit <http://twitter.com/vaiorabbit>
45
+
46
+ * lib/events.rb, lib/timer.rb, lib/video.rb: Added.
47
+ * lib/keyboard.rb, lib/keycode.rb, lib/scancode.rb: Added.
48
+ * lib/error.rb: Added.
49
+ * lib/blendmode.rb, lib/clipboard.rb, lib/filesystem.rb, lib/version.rb: Added.
50
+ * lib/platform.rb, lib/rect.rb, lib/mouse.rb: Added.
51
+ * lib/messagebox.rb, lib/pixels.rb: Added.
52
+
53
+ 2015-09-19 vaiorabbit <http://twitter.com/vaiorabbit>
54
+
55
+ * Project started.
@@ -0,0 +1,21 @@
1
+ sdl2-bindings : Yet another SDL2 wrapper for Ruby
2
+ Copyright (c) 2015-2019 vaiorabbit <http://twitter.com/vaiorabbit>
3
+
4
+ This software is provided 'as-is', without any express or implied
5
+ warranty. In no event will the authors be held liable for any damages
6
+ arising from the use of this software.
7
+
8
+ Permission is granted to anyone to use this software for any purpose,
9
+ including commercial applications, and to alter it and redistribute it
10
+ freely, subject to the following restrictions:
11
+
12
+ 1. The origin of this software must not be misrepresented; you must not
13
+ claim that you wrote the original software. If you use this software
14
+ in a product, an acknowledgment in the product documentation would be
15
+ appreciated but is not required.
16
+
17
+ 2. Altered source versions must be plainly marked as such, and must not be
18
+ misrepresented as being the original software.
19
+
20
+ 3. This notice may not be removed or altered from any source
21
+ distribution.
@@ -0,0 +1,46 @@
1
+ <!-- -*- mode:markdown; coding:utf-8; -*- -->
2
+
3
+ # sdl2-bindings : Yet another SDL2 wrapper for Ruby #
4
+
5
+ [Notice] Experimental project.
6
+
7
+ * Created : 2015-09-19
8
+ * Last modified : 2019-08-31
9
+
10
+ ## Features ##
11
+
12
+ * Generated semi-automatically
13
+ * Based on Ruby/FFI
14
+ * No need to build C extension library
15
+
16
+
17
+ ## Limitations ##
18
+
19
+ * Some APIs provided by pre-processor cannot be imported.
20
+
21
+ ## Tested Environment ##
22
+
23
+ * [2015-09-19] SDL 2.0.3 (Installed via Homebrew)
24
+ * Mac OS X 10.10.5, ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-darwin14]
25
+ * [2016-04-03] SDL 2.0.4 (Installed via Homebrew)
26
+ * Mac OS X 10.11.4, ruby 2.3.0p0 (2015-12-25 revision 53290) [x86_64-darwin15]
27
+ * sdl2_gfx : 1.0.1
28
+ * sdl2_image : 2.0.1
29
+ * sdl2_mixer : 2.0.1
30
+ * sdl2_ttf : 2.0.13
31
+ * [2019-08-31] SDL 2.0.10 (Installed via Homebrew)
32
+
33
+ ## License ##
34
+
35
+ The zlib/libpng License ( http://opensource.org/licenses/Zlib ).
36
+
37
+ sdl2-bindings : Yet another SDL2 wrapper for Ruby
38
+ Copyright (c) 2015-2019 vaiorabbit <http://twitter.com/vaiorabbit>
39
+
40
+ This software is provided 'as-is', without any express or implied
41
+ warranty. In no event will the authors be held liable for any damages
42
+ arising from the use of this software.
43
+
44
+ Permission is granted to anyone to use this software for any purpose,
45
+ including commercial applications, and to alter it and redistribute it
46
+ freely, subject to the following restrictions:
@@ -0,0 +1,166 @@
1
+ # Ruby-SDL2 : Yet another SDL2 wrapper for Ruby
2
+ #
3
+ # * https://github.com/vaiorabbit/sdl2-bindings
4
+
5
+ require 'ffi'
6
+ require_relative 'sdl2_main.rb'
7
+ require_relative 'sdl2_audio.rb'
8
+ require_relative 'sdl2_blendmode.rb'
9
+ require_relative 'sdl2_clipboard.rb'
10
+ require_relative 'sdl2_cpuinfo.rb'
11
+ require_relative 'sdl2_error.rb'
12
+ require_relative 'sdl2_events.rb'
13
+ require_relative 'sdl2_filesystem.rb'
14
+ require_relative 'sdl2_gamecontroller.rb'
15
+ require_relative 'sdl2_gesture.rb'
16
+ require_relative 'sdl2_haptic.rb'
17
+ require_relative 'sdl2_hints.rb'
18
+ require_relative 'sdl2_joystick.rb'
19
+ require_relative 'sdl2_keyboard.rb'
20
+ require_relative 'sdl2_keycode.rb'
21
+ require_relative 'sdl2_log.rb'
22
+ require_relative 'sdl2_messagebox.rb'
23
+ require_relative 'sdl2_mouse.rb'
24
+ require_relative 'sdl2_pixels.rb'
25
+ require_relative 'sdl2_platform.rb'
26
+ require_relative 'sdl2_power.rb'
27
+ require_relative 'sdl2_rect.rb'
28
+ require_relative 'sdl2_render.rb'
29
+ require_relative 'sdl2_rwops.rb'
30
+ require_relative 'sdl2_scancode.rb'
31
+ require_relative 'sdl2_shape.rb'
32
+ require_relative 'sdl2_surface.rb'
33
+ require_relative 'sdl2_timer.rb'
34
+ require_relative 'sdl2_touch.rb'
35
+ require_relative 'sdl2_version.rb'
36
+ require_relative 'sdl2_video.rb'
37
+ require_relative 'sdl2_vulkan.rb'
38
+
39
+ require_relative 'sdl2_framerate.rb'
40
+ require_relative 'sdl2_gfxPrimitives.rb'
41
+ require_relative 'sdl2_image.rb'
42
+ require_relative 'sdl2_rotozoom.rb'
43
+ require_relative 'sdl2_imageFilter.rb'
44
+ require_relative 'sdl2_ttf.rb'
45
+ require_relative 'sdl2_mixer.rb'
46
+
47
+ module SDL2
48
+ extend FFI::Library
49
+
50
+ @@sdl2_import_done = false
51
+ def self.load_lib(libpath, image_libpath: nil, ttf_libpath: nil, mixer_libpath: nil, gfx_libpath: nil)
52
+
53
+ unless @@sdl2_import_done
54
+ # Ref.: Using Multiple and Alternate Libraries
55
+ # https://github.com/ffi/ffi/wiki/Using-Multiple-and-Alternate-Libraries
56
+ begin
57
+ lib_paths = [libpath, image_libpath, ttf_libpath, mixer_libpath, gfx_libpath].compact
58
+
59
+ ffi_lib_flags :now, :global
60
+ ffi_lib *lib_paths
61
+ setup_symbols()
62
+
63
+ if image_libpath != nil
64
+ setup_image_symbols()
65
+ end
66
+
67
+ if ttf_libpath != nil
68
+ setup_ttf_symbols()
69
+ end
70
+
71
+ if mixer_libpath != nil
72
+ setup_mixer_symbols()
73
+ end
74
+
75
+ if gfx_libpath != nil
76
+ setup_gfx_framerate_symbols()
77
+ setup_gfx_primitives_symbols()
78
+ setup_gfx_imagefilter_symbols()
79
+ setup_gfx_rotozoom_symbols()
80
+ end
81
+ rescue => error
82
+ puts error
83
+ end
84
+ end
85
+
86
+ end
87
+
88
+ def self.setup_symbols()
89
+ setup_main_symbols()
90
+ setup_audio_symbols()
91
+ setup_blendmode_symbols()
92
+ setup_clipboard_symbols()
93
+ setup_cpuinfo_symbols()
94
+ setup_error_symbols()
95
+ setup_events_symbols()
96
+ setup_filesystem_symbols()
97
+ setup_gamecontroller_symbols()
98
+ setup_gesture_symbols()
99
+ setup_haptic_symbols()
100
+ setup_hints_symbols()
101
+ setup_joystick_symbols()
102
+ setup_keyboard_symbols()
103
+ setup_keycode_symbols()
104
+ setup_log_symbols()
105
+ setup_messagebox_symbols()
106
+ setup_mouse_symbols()
107
+ setup_pixels_symbols()
108
+ setup_platform_symbols()
109
+ setup_power_symbols()
110
+ setup_rect_symbols()
111
+ setup_render_symbols()
112
+ setup_rwops_symbols()
113
+ setup_scancode_symbols()
114
+ setup_shape_symbols()
115
+ setup_surface_symbols()
116
+ setup_timer_symbols()
117
+ setup_touch_symbols()
118
+ setup_version_symbols()
119
+ setup_video_symbols()
120
+ setup_vulkan_symbols()
121
+ end
122
+
123
+ end
124
+
125
+
126
+ if __FILE__ == $0
127
+ # SDL2.load_lib('libSDL2.dylib')
128
+ # p SDL2.SDL_Init(SDL2::SDL_INIT_EVERYTHING)
129
+ SDL2.load_lib('libSDL2.dylib',
130
+ gfx_libpath: '/usr/local/lib/libSDL2_gfx.dylib'
131
+ )
132
+ #SDL2.SDL_SetMainReady()
133
+ success = SDL2.SDL_Init(SDL2::SDL_INIT_EVERYTHING)
134
+ exit if success < 0
135
+
136
+ WINDOW_W = 320
137
+ WINDOW_H = 240
138
+ window = SDL2.SDL_CreateWindow("1st SDL Window via sdl2-bindings", 0, 0, WINDOW_W, WINDOW_H, 0)
139
+
140
+ fpsdelay = 100;
141
+
142
+ count = 0
143
+ event = SDL2::SDL_Event.new
144
+ done = false
145
+ while not done
146
+ while SDL2.SDL_PollEvent(event) != 0
147
+ # 'type' and 'timestamp' are common members for all SDL Event structs.
148
+ event_type = event[:common][:type]
149
+ event_timestamp = event[:common][:timestamp]
150
+ puts "Event : type=0x#{event_type.to_s(16)}, timestamp=#{event_timestamp}"
151
+
152
+ case event_type
153
+ when SDL2::SDL_KEYDOWN
154
+ if event[:key][:keysym][:sym] == SDL2::SDLK_SPACE
155
+ puts "\tSPACE key pressed."
156
+ end
157
+ end
158
+ end
159
+
160
+ count += 1
161
+ done = true if count >= 100
162
+ SDL2.SDL_Delay(fpsdelay)
163
+ end
164
+
165
+ SDL2.SDL_Quit()
166
+ end
@@ -0,0 +1,201 @@
1
+ # Ruby-SDL2 : Yet another SDL2 wrapper for Ruby
2
+ #
3
+ # * https://github.com/vaiorabbit/sdl2-bindings
4
+ #
5
+ # [NOTICE] This is an automatically generated file.
6
+
7
+ require 'ffi'
8
+
9
+ module SDL2
10
+ extend FFI::Library
11
+ # Define/Macro
12
+
13
+ SDL_AUDIO_MASK_BITSIZE = ( 0xFF )
14
+ SDL_AUDIO_MASK_DATATYPE = ( 1 << 8 )
15
+ SDL_AUDIO_MASK_ENDIAN = ( 1 << 12 )
16
+ SDL_AUDIO_MASK_SIGNED = ( 1 << 15 )
17
+ SDL_AUDIO_ALLOW_FREQUENCY_CHANGE = 0x00000001
18
+ SDL_AUDIO_ALLOW_FORMAT_CHANGE = 0x00000002
19
+ SDL_AUDIO_ALLOW_CHANNELS_CHANGE = 0x00000004
20
+ SDL_AUDIO_ALLOW_SAMPLES_CHANGE = 0x00000008
21
+ SDL_AUDIO_ALLOW_ANY_CHANGE = ( SDL_AUDIO_ALLOW_FREQUENCY_CHANGE | SDL_AUDIO_ALLOW_FORMAT_CHANGE | SDL_AUDIO_ALLOW_CHANNELS_CHANGE | SDL_AUDIO_ALLOW_SAMPLES_CHANGE )
22
+ SDL_AUDIOCVT_MAX_FILTERS = 9
23
+ SDL_MIX_MAXVOLUME = 128
24
+
25
+ # Enum
26
+
27
+ SDL_AUDIO_STOPPED = 0
28
+ SDL_AUDIO_PLAYING = 1
29
+ SDL_AUDIO_PAUSED = 2
30
+
31
+ # Typedef
32
+
33
+ typedef :ushort, :SDL_AudioFormat
34
+ callback :SDL_AudioCallback, [:pointer, :pointer, :int], :void
35
+ callback :SDL_AudioFilter, [:pointer, :ushort], :void
36
+ typedef :uint, :SDL_AudioDeviceID
37
+ typedef :int, :SDL_AudioStatus
38
+
39
+ # Struct
40
+
41
+ class SDL_AudioSpec < FFI::Struct
42
+ layout(
43
+ :freq, :int,
44
+ :format, :ushort,
45
+ :channels, :uchar,
46
+ :silence, :uchar,
47
+ :samples, :ushort,
48
+ :padding, :ushort,
49
+ :size, :uint,
50
+ :callback, :pointer,
51
+ :userdata, :pointer,
52
+ )
53
+ end
54
+
55
+ class SDL_AudioCVT < FFI::Struct
56
+ layout(
57
+ :needed, :int,
58
+ :src_format, :ushort,
59
+ :dst_format, :ushort,
60
+ :rate_incr, :double,
61
+ :buf, :pointer,
62
+ :len, :int,
63
+ :len_cvt, :int,
64
+ :len_mult, :int,
65
+ :len_ratio, :double,
66
+ :filters, [:pointer, 10],
67
+ :filter_index, :int,
68
+ )
69
+ end
70
+
71
+
72
+ # Function
73
+
74
+ def self.setup_audio_symbols()
75
+ symbols = [
76
+ :SDL_GetNumAudioDrivers,
77
+ :SDL_GetAudioDriver,
78
+ :SDL_AudioInit,
79
+ :SDL_AudioQuit,
80
+ :SDL_GetCurrentAudioDriver,
81
+ :SDL_OpenAudio,
82
+ :SDL_GetNumAudioDevices,
83
+ :SDL_GetAudioDeviceName,
84
+ :SDL_OpenAudioDevice,
85
+ :SDL_GetAudioStatus,
86
+ :SDL_GetAudioDeviceStatus,
87
+ :SDL_PauseAudio,
88
+ :SDL_PauseAudioDevice,
89
+ :SDL_LoadWAV_RW,
90
+ :SDL_FreeWAV,
91
+ :SDL_BuildAudioCVT,
92
+ :SDL_ConvertAudio,
93
+ :SDL_NewAudioStream,
94
+ :SDL_AudioStreamPut,
95
+ :SDL_AudioStreamGet,
96
+ :SDL_AudioStreamAvailable,
97
+ :SDL_AudioStreamFlush,
98
+ :SDL_AudioStreamClear,
99
+ :SDL_FreeAudioStream,
100
+ :SDL_MixAudio,
101
+ :SDL_MixAudioFormat,
102
+ :SDL_QueueAudio,
103
+ :SDL_DequeueAudio,
104
+ :SDL_GetQueuedAudioSize,
105
+ :SDL_ClearQueuedAudio,
106
+ :SDL_LockAudio,
107
+ :SDL_LockAudioDevice,
108
+ :SDL_UnlockAudio,
109
+ :SDL_UnlockAudioDevice,
110
+ :SDL_CloseAudio,
111
+ :SDL_CloseAudioDevice,
112
+ ]
113
+ args = {
114
+ :SDL_GetNumAudioDrivers => [],
115
+ :SDL_GetAudioDriver => [:int],
116
+ :SDL_AudioInit => [:pointer],
117
+ :SDL_AudioQuit => [],
118
+ :SDL_GetCurrentAudioDriver => [],
119
+ :SDL_OpenAudio => [:pointer, :pointer],
120
+ :SDL_GetNumAudioDevices => [:int],
121
+ :SDL_GetAudioDeviceName => [:int, :int],
122
+ :SDL_OpenAudioDevice => [:pointer, :int, :pointer, :pointer, :int],
123
+ :SDL_GetAudioStatus => [],
124
+ :SDL_GetAudioDeviceStatus => [:uint],
125
+ :SDL_PauseAudio => [:int],
126
+ :SDL_PauseAudioDevice => [:uint, :int],
127
+ :SDL_LoadWAV_RW => [:pointer, :int, :pointer, :pointer, :pointer],
128
+ :SDL_FreeWAV => [:pointer],
129
+ :SDL_BuildAudioCVT => [:pointer, :ushort, :uchar, :int, :ushort, :uchar, :int],
130
+ :SDL_ConvertAudio => [:pointer],
131
+ :SDL_NewAudioStream => [:ushort, :uchar, :int, :ushort, :uchar, :int],
132
+ :SDL_AudioStreamPut => [:pointer, :pointer, :int],
133
+ :SDL_AudioStreamGet => [:pointer, :pointer, :int],
134
+ :SDL_AudioStreamAvailable => [:pointer],
135
+ :SDL_AudioStreamFlush => [:pointer],
136
+ :SDL_AudioStreamClear => [:pointer],
137
+ :SDL_FreeAudioStream => [:pointer],
138
+ :SDL_MixAudio => [:pointer, :pointer, :uint, :int],
139
+ :SDL_MixAudioFormat => [:pointer, :pointer, :ushort, :uint, :int],
140
+ :SDL_QueueAudio => [:uint, :pointer, :uint],
141
+ :SDL_DequeueAudio => [:uint, :pointer, :uint],
142
+ :SDL_GetQueuedAudioSize => [:uint],
143
+ :SDL_ClearQueuedAudio => [:uint],
144
+ :SDL_LockAudio => [],
145
+ :SDL_LockAudioDevice => [:uint],
146
+ :SDL_UnlockAudio => [],
147
+ :SDL_UnlockAudioDevice => [:uint],
148
+ :SDL_CloseAudio => [],
149
+ :SDL_CloseAudioDevice => [:uint],
150
+ }
151
+ retvals = {
152
+ :SDL_GetNumAudioDrivers => :int,
153
+ :SDL_GetAudioDriver => :pointer,
154
+ :SDL_AudioInit => :int,
155
+ :SDL_AudioQuit => :void,
156
+ :SDL_GetCurrentAudioDriver => :pointer,
157
+ :SDL_OpenAudio => :int,
158
+ :SDL_GetNumAudioDevices => :int,
159
+ :SDL_GetAudioDeviceName => :pointer,
160
+ :SDL_OpenAudioDevice => :uint,
161
+ :SDL_GetAudioStatus => :int,
162
+ :SDL_GetAudioDeviceStatus => :int,
163
+ :SDL_PauseAudio => :void,
164
+ :SDL_PauseAudioDevice => :void,
165
+ :SDL_LoadWAV_RW => :pointer,
166
+ :SDL_FreeWAV => :void,
167
+ :SDL_BuildAudioCVT => :int,
168
+ :SDL_ConvertAudio => :int,
169
+ :SDL_NewAudioStream => :pointer,
170
+ :SDL_AudioStreamPut => :int,
171
+ :SDL_AudioStreamGet => :int,
172
+ :SDL_AudioStreamAvailable => :int,
173
+ :SDL_AudioStreamFlush => :int,
174
+ :SDL_AudioStreamClear => :void,
175
+ :SDL_FreeAudioStream => :void,
176
+ :SDL_MixAudio => :void,
177
+ :SDL_MixAudioFormat => :void,
178
+ :SDL_QueueAudio => :int,
179
+ :SDL_DequeueAudio => :uint,
180
+ :SDL_GetQueuedAudioSize => :uint,
181
+ :SDL_ClearQueuedAudio => :void,
182
+ :SDL_LockAudio => :void,
183
+ :SDL_LockAudioDevice => :void,
184
+ :SDL_UnlockAudio => :void,
185
+ :SDL_UnlockAudioDevice => :void,
186
+ :SDL_CloseAudio => :void,
187
+ :SDL_CloseAudioDevice => :void,
188
+ }
189
+ symbols.each do |sym|
190
+ begin
191
+ attach_function sym, args[sym], retvals[sym]
192
+ rescue FFI::NotFoundError => error
193
+ $stderr.puts("[Warning] Failed to import #{sym} (#{error}).")
194
+ end
195
+ end
196
+ end
197
+
198
+ end
199
+
200
+ # TODO : def SDL_LoadWAV
201
+