sdl2_ffi 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +20 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +4 -0
- data/Guardfile +33 -0
- data/LICENSE.txt +22 -0
- data/README.md +83 -0
- data/Rakefile +7 -0
- data/bin/coderay +16 -0
- data/bin/guard +16 -0
- data/bin/pry +16 -0
- data/bin/rake +16 -0
- data/bin/thor +16 -0
- data/lib/sdl2/assert.rb +7 -0
- data/lib/sdl2/audio.rb +139 -0
- data/lib/sdl2/clipboard.rb +27 -0
- data/lib/sdl2/color.rb +12 -0
- data/lib/sdl2/cpuinfo.rb +18 -0
- data/lib/sdl2/display/mode.rb +53 -0
- data/lib/sdl2/display/modes.rb +36 -0
- data/lib/sdl2/display.rb +74 -0
- data/lib/sdl2/error.rb +9 -0
- data/lib/sdl2/events.rb +358 -0
- data/lib/sdl2/gamecontroller.rb +62 -0
- data/lib/sdl2/gem_version.rb +4 -0
- data/lib/sdl2/gesture.rb +15 -0
- data/lib/sdl2/haptic.rb +159 -0
- data/lib/sdl2/hints.rb +47 -0
- data/lib/sdl2/init.rb +54 -0
- data/lib/sdl2/joystick.rb +58 -0
- data/lib/sdl2/keyboard.rb +34 -0
- data/lib/sdl2/keycode.rb +294 -0
- data/lib/sdl2/log.rb +70 -0
- data/lib/sdl2/mouse.rb +54 -0
- data/lib/sdl2/palette.rb +15 -0
- data/lib/sdl2/pixel_format.rb +28 -0
- data/lib/sdl2/pixels.rb +35 -0
- data/lib/sdl2/point.rb +7 -0
- data/lib/sdl2/power.rb +9 -0
- data/lib/sdl2/rect.rb +38 -0
- data/lib/sdl2/render.rb +77 -0
- data/lib/sdl2/renderer.rb +34 -0
- data/lib/sdl2/renderer_info.rb +13 -0
- data/lib/sdl2/rwops.rb +127 -0
- data/lib/sdl2/scancode.rb +275 -0
- data/lib/sdl2/sdl_module.rb +8 -0
- data/lib/sdl2/surface.rb +83 -0
- data/lib/sdl2/syswm/info.rb +49 -0
- data/lib/sdl2/syswm/msg.rb +46 -0
- data/lib/sdl2/syswm.rb +20 -0
- data/lib/sdl2/texture.rb +9 -0
- data/lib/sdl2/timer.rb +17 -0
- data/lib/sdl2/touch.rb +24 -0
- data/lib/sdl2/version.rb +30 -0
- data/lib/sdl2/video.rb +154 -0
- data/lib/sdl2/window.rb +259 -0
- data/lib/sdl2.rb +99 -0
- data/lib/sdl2_ffi.rb +6 -0
- data/sdl2_ffi.gemspec +31 -0
- data/test/test_helper.rb +2 -0
- data/test/unit/sdl2/test_assert.rb +10 -0
- data/test/unit/sdl2/test_audio.rb +9 -0
- data/test/unit/sdl2/test_clipboard.rb +13 -0
- data/test/unit/sdl2/test_cpuinfo.rb +11 -0
- data/test/unit/sdl2/test_error.rb +20 -0
- data/test/unit/sdl2/test_events.rb +31 -0
- data/test/unit/sdl2/test_haptic.rb +10 -0
- data/test/unit/sdl2/test_hints.rb +50 -0
- data/test/unit/sdl2/test_init.rb +29 -0
- data/test/unit/sdl2/test_keyboard.rb +9 -0
- data/test/unit/sdl2/test_log.rb +80 -0
- data/test/unit/sdl2/test_pixels.rb +24 -0
- data/test/unit/sdl2/test_power.rb +11 -0
- data/test/unit/sdl2/test_rect.rb +19 -0
- data/test/unit/sdl2/test_render.rb +58 -0
- data/test/unit/sdl2/test_surface.rb +45 -0
- data/test/unit/sdl2/test_syswm.rb +11 -0
- data/test/unit/sdl2/test_timer.rb +9 -0
- data/test/unit/sdl2/test_version.rb +16 -0
- data/test/unit/sdl2/test_video.rb +170 -0
- data/test/unit/sdl2/test_window.rb +158 -0
- data/test/unit/test_sdl2.rb +16 -0
- metadata +280 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 1fbda9790c93fa1061e680eb19b56d27ef5e9b2e
|
4
|
+
data.tar.gz: 8947768e9c0f8d504f6cb154624cec7a2f220c37
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8b8f386629bc6ff085e64450ad026b4669ee4251dfe924f6eae89772905b3474f4c0a0bf647f9a22f5ca6024651b655a785aed12e48e647ed0d5b01ddc50e015
|
7
|
+
data.tar.gz: e1afed2d1d6dc466bdaeb9b3a3aac67d93e597972bccdebe0dc692415f4989290638c61594eb0fcfcfe01df4ae045352a9537970df290733f6d12e1abc9ae1c3
|
data/.gitignore
ADDED
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
sdl2_ffi
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby-2.0.0-p247
|
data/Gemfile
ADDED
data/Guardfile
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
|
4
|
+
guard :minitest do
|
5
|
+
# with Minitest::Unit
|
6
|
+
watch(%r{^test/(.*)\/?test_(.*)\.rb})
|
7
|
+
watch(%r{^lib/(.*/)?([^/]+)\.rb}) { |m| "test/#{m[1]}test_#{m[2]}.rb" }
|
8
|
+
watch(%r{^test/test_helper\.rb}) { 'test' }
|
9
|
+
|
10
|
+
# with Minitest::Spec
|
11
|
+
watch(%r{^spec/(.*)_spec\.rb})
|
12
|
+
watch(%r{^lib/(.+)\.rb}) { |m| "spec/#{m[1]}_spec.rb" }
|
13
|
+
watch(%r{^spec/spec_helper\.rb}) { 'spec' }
|
14
|
+
|
15
|
+
# Rails 4
|
16
|
+
# watch(%r{^test/test_helper\.rb}) { 'test' }
|
17
|
+
# watch(%r{^test/.+_test\.rb})
|
18
|
+
# watch(%r{^app/(.+)\.rb}) { |m| "test/#{m[1]}_test.rb" }
|
19
|
+
# watch(%r{^app/controllers/application_controller\.rb}) { 'test/controllers' }
|
20
|
+
# watch(%r{^app/controllers/(.+)_controller\.rb}) { |m| "test/integration/#{m[1]}_test.rb" }
|
21
|
+
# watch(%r{^app/views/(.+)_mailer/.+}) { |m| "test/mailers/#{m[1]}_mailer_test.rb" }
|
22
|
+
# watch(%r{^lib/(.+)\.rb}) { |m| "test/lib/#{m[1]}_test.rb" }
|
23
|
+
|
24
|
+
# Rails 3.2
|
25
|
+
# watch(%r{^app/controllers/(.*)\.rb}) { |m| "test/controllers/#{m[1]}_test.rb" }
|
26
|
+
# watch(%r{^app/helpers/(.*)\.rb}) { |m| "test/helpers/#{m[1]}_test.rb" }
|
27
|
+
# watch(%r{^app/models/(.*)\.rb}) { |m| "test/unit/#{m[1]}_test.rb" }
|
28
|
+
|
29
|
+
# Rails
|
30
|
+
# watch(%r{^app/controllers/(.*)\.rb}) { |m| "test/functional/#{m[1]}_test.rb" }
|
31
|
+
# watch(%r{^app/helpers/(.*)\.rb}) { |m| "test/helpers/#{m[1]}_test.rb" }
|
32
|
+
# watch(%r{^app/models/(.*)\.rb}) { |m| "test/unit/#{m[1]}_test.rb" }
|
33
|
+
end
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 BadQuanta
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
# sdl2_ffi
|
2
|
+
|
3
|
+
This is a simple interface to SDL2 for Ruby using FFI. This effort has barely started.
|
4
|
+
|
5
|
+
# How to start:
|
6
|
+
|
7
|
+
The GEM is organized to the same structure as the SDL header files. Where in C/C++ you would need to:
|
8
|
+
|
9
|
+
include 'SDL.h'
|
10
|
+
include 'SDL_video.h'
|
11
|
+
|
12
|
+
with this rubygem, you would instead:
|
13
|
+
|
14
|
+
require 'sdl2'
|
15
|
+
require 'sdl2/video'
|
16
|
+
|
17
|
+
The SDL2 module is defined and it is where the raw SDL API is loaded and linked. The Raw API can be called like so:
|
18
|
+
|
19
|
+
SDL2.init(SDL2::INIT_EVERYTHING)
|
20
|
+
|
21
|
+
### Gotchas:
|
22
|
+
|
23
|
+
* Remember that SDL uses the 'SDL_Bool' enum instead of actual ruby Boolean, so instead of 'true' and 'false', you get ':true' and ':false'
|
24
|
+
* Whenever SDL returns an SDL_Bool in the RAW API, I will always endevour to ensure there is a xxx? equivalent helper that converts the response to Ruby Booleans.
|
25
|
+
|
26
|
+
## Updates
|
27
|
+
|
28
|
+
### Imported APIs
|
29
|
+
|
30
|
+
I'm working my way through the SDL API header files. I am attempting to make this GEM as modular as the SDL header files themselves so that the developer can load only the enum, typedefs and link to only the functionality needed.
|
31
|
+
|
32
|
+
## Dependencies
|
33
|
+
|
34
|
+
* Obviously, ruby
|
35
|
+
* SDL2 Runtime (Development files are not needed.)
|
36
|
+
|
37
|
+
## Installation
|
38
|
+
|
39
|
+
Add this line to your application's Gemfile:
|
40
|
+
|
41
|
+
gem 'sdl2_ffi'
|
42
|
+
|
43
|
+
And then execute:
|
44
|
+
|
45
|
+
$ bundle
|
46
|
+
|
47
|
+
Or install it yourself as:
|
48
|
+
|
49
|
+
$ gem install sdl2_ffi
|
50
|
+
|
51
|
+
## Testing
|
52
|
+
|
53
|
+
Minitests are being written to validate functionality. Not SDL's functionality, but that the GEM has been linked properly and that the Object Oriented wrapper functions as intended.
|
54
|
+
|
55
|
+
Run the tests with rake:
|
56
|
+
|
57
|
+
$ rake test
|
58
|
+
|
59
|
+
Verbose options are nice:
|
60
|
+
|
61
|
+
$ rake test TESTOPTS="--verbose"
|
62
|
+
|
63
|
+
### I need your help!
|
64
|
+
|
65
|
+
I'm just starting to implement the Object Oriented Wrapper. I'll need help identifying mistakes, especially in memory management. Bug-reports submitted with tests will be looked at before bug-reports without tests, as a way to encourage tests being written.
|
66
|
+
|
67
|
+
Thanks for reading this!
|
68
|
+
|
69
|
+
## Usage
|
70
|
+
|
71
|
+
The interface is intended to be modular and follows (roughly) SDL's header files.
|
72
|
+
|
73
|
+
## Contributing
|
74
|
+
|
75
|
+
libSDL 2.0 is licensed under the 'zlib license', listed as compatible with the GNU GPL by [the gnu foundation](http://www.gnu.org/licenses/license-list.html). The 'sdl_ffi' GEM is licensed under the MIT License. Both encourage distribution and modification. Please let me know about your work and I'll link it where appropriate.
|
76
|
+
|
77
|
+
1. Fork it
|
78
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
79
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
80
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
81
|
+
5. Create new Pull Request
|
82
|
+
|
83
|
+
I specifically need help writing the minitest code.
|
data/Rakefile
ADDED
data/bin/coderay
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# This file was generated by Bundler.
|
4
|
+
#
|
5
|
+
# The application 'coderay' is installed as part of a gem, and
|
6
|
+
# this file is here to facilitate running it.
|
7
|
+
#
|
8
|
+
|
9
|
+
require 'pathname'
|
10
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
|
11
|
+
Pathname.new(__FILE__).realpath)
|
12
|
+
|
13
|
+
require 'rubygems'
|
14
|
+
require 'bundler/setup'
|
15
|
+
|
16
|
+
load Gem.bin_path('sdl2_ffi', 'coderay')
|
data/bin/guard
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# This file was generated by Bundler.
|
4
|
+
#
|
5
|
+
# The application 'guard' is installed as part of a gem, and
|
6
|
+
# this file is here to facilitate running it.
|
7
|
+
#
|
8
|
+
|
9
|
+
require 'pathname'
|
10
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
|
11
|
+
Pathname.new(__FILE__).realpath)
|
12
|
+
|
13
|
+
require 'rubygems'
|
14
|
+
require 'bundler/setup'
|
15
|
+
|
16
|
+
load Gem.bin_path('sdl2_ffi', 'guard')
|
data/bin/pry
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# This file was generated by Bundler.
|
4
|
+
#
|
5
|
+
# The application 'pry' is installed as part of a gem, and
|
6
|
+
# this file is here to facilitate running it.
|
7
|
+
#
|
8
|
+
|
9
|
+
require 'pathname'
|
10
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
|
11
|
+
Pathname.new(__FILE__).realpath)
|
12
|
+
|
13
|
+
require 'rubygems'
|
14
|
+
require 'bundler/setup'
|
15
|
+
|
16
|
+
load Gem.bin_path('sdl2_ffi', 'pry')
|
data/bin/rake
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# This file was generated by Bundler.
|
4
|
+
#
|
5
|
+
# The application 'rake' is installed as part of a gem, and
|
6
|
+
# this file is here to facilitate running it.
|
7
|
+
#
|
8
|
+
|
9
|
+
require 'pathname'
|
10
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
|
11
|
+
Pathname.new(__FILE__).realpath)
|
12
|
+
|
13
|
+
require 'rubygems'
|
14
|
+
require 'bundler/setup'
|
15
|
+
|
16
|
+
load Gem.bin_path('sdl2_ffi', 'rake')
|
data/bin/thor
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# This file was generated by Bundler.
|
4
|
+
#
|
5
|
+
# The application 'thor' is installed as part of a gem, and
|
6
|
+
# this file is here to facilitate running it.
|
7
|
+
#
|
8
|
+
|
9
|
+
require 'pathname'
|
10
|
+
ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
|
11
|
+
Pathname.new(__FILE__).realpath)
|
12
|
+
|
13
|
+
require 'rubygems'
|
14
|
+
require 'bundler/setup'
|
15
|
+
|
16
|
+
load Gem.bin_path('sdl2_ffi', 'thor')
|
data/lib/sdl2/assert.rb
ADDED
data/lib/sdl2/audio.rb
ADDED
@@ -0,0 +1,139 @@
|
|
1
|
+
require 'sdl2'
|
2
|
+
require 'yinum'
|
3
|
+
|
4
|
+
module SDL2
|
5
|
+
|
6
|
+
typedef :uint16, :audio_format
|
7
|
+
|
8
|
+
module Audio
|
9
|
+
Mask = Enum.new(:AudioMask, {
|
10
|
+
BITSIZE: (0xFF),
|
11
|
+
DATATYPE: (1<<8),
|
12
|
+
ENDIAN: (1<<12),
|
13
|
+
SIGNED: (1<<15)
|
14
|
+
})
|
15
|
+
|
16
|
+
def self.bitsize(x)
|
17
|
+
x & Mask.BITSIZE
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.is_float?(x)
|
21
|
+
(x & Mask.DATATYPE) != 0
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.is_big_endian?(x)
|
25
|
+
x & mask.ENDIAN
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.is_signed?(x)
|
29
|
+
x & mask.SIGNED
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.is_int?(x)
|
33
|
+
!is_float?(x)
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.is_little_endian?(x)
|
37
|
+
!is_big_endian?(x)
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.is_unsigned?(x)
|
41
|
+
!is_signed?(x)
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
U8 = 0x0008
|
46
|
+
S8 = 0x8008
|
47
|
+
U16LSB = 0x0010
|
48
|
+
S16LSB = 0x8010
|
49
|
+
U16MSB = 0x1010
|
50
|
+
S16MSB = 0x9010
|
51
|
+
U16 = U16LSB
|
52
|
+
S16 = S16LSB
|
53
|
+
S32LSB = 0x8020
|
54
|
+
S32MSB = 0x9020
|
55
|
+
S32 = S32LSB
|
56
|
+
F32LSB = 0x8120
|
57
|
+
F32MSB = 0x9120
|
58
|
+
F32= F32LSB
|
59
|
+
|
60
|
+
ALLOW_FREQUENCY_CHANGE =0x00000001
|
61
|
+
ALLOW_FORMAT_CHANGE =0x00000002
|
62
|
+
ALLOW_CHANNELS_CHANGE =0x00000004
|
63
|
+
ALLOW_ANY_CHANGE =(ALLOW_FREQUENCY_CHANGE|ALLOW_FORMAT_CHANGE|ALLOW_CHANNELS_CHANGE)
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
class Spec < Struct
|
68
|
+
layout :freq, :int,
|
69
|
+
:format, :uint16,
|
70
|
+
:channels, :uint8,
|
71
|
+
:silence, :uint8,
|
72
|
+
:samples, :uint16,
|
73
|
+
:padding, :uint16,
|
74
|
+
:size, :uint32,
|
75
|
+
:callback, :pointer, #:audio_callback,
|
76
|
+
:userdata, :pointer
|
77
|
+
end
|
78
|
+
|
79
|
+
class CVT < Struct
|
80
|
+
layout :needed, :int,
|
81
|
+
:src_format, :uint16,
|
82
|
+
:dst_format, :uint16,
|
83
|
+
:rate_incr, :double,
|
84
|
+
:buf, :pointer,
|
85
|
+
:len, :int,
|
86
|
+
:len_cvt, :int,
|
87
|
+
:len_mult, :int,
|
88
|
+
:len_ratio, :double,
|
89
|
+
:filters, [:pointer, 10], # :audio_filter callback
|
90
|
+
:filter_index, :int
|
91
|
+
end
|
92
|
+
|
93
|
+
end#module Audio
|
94
|
+
|
95
|
+
callback :audio_callback, [:pointer, :pointer, :int], :void
|
96
|
+
callback :audio_filter, [Audio::CVT.by_ref, :audio_format], :void
|
97
|
+
|
98
|
+
api :SDL_GetNumAudioDrivers, [], :int
|
99
|
+
api :SDL_GetAudioDriver, [:int], :string
|
100
|
+
api :SDL_AudioInit, [:string], :int
|
101
|
+
api :SDL_AudioQuit, [], :void
|
102
|
+
api :SDL_GetCurrentAudioDriver, [], :string
|
103
|
+
api :SDL_OpenAudio, [Audio::Spec.by_ref, Audio::Spec.by_ref], :int
|
104
|
+
|
105
|
+
typedef :uint32, :audio_device_id
|
106
|
+
|
107
|
+
api :SDL_GetNumAudioDevices, [:int], :int
|
108
|
+
api :SDL_GetAudioDeviceName, [:int, :int], :string
|
109
|
+
api :SDL_OpenAudioDevice, [:string, :int, Audio::Spec.by_ref, Audio::Spec.by_ref, :int], :audio_device_id
|
110
|
+
|
111
|
+
enum :audio_status, [:STOPPED, 0, :PLAYING, :PAUSED]
|
112
|
+
|
113
|
+
api :SDL_GetAudioStatus, [], :audio_status
|
114
|
+
api :SDL_PauseAudio, [:int], :void
|
115
|
+
api :SDL_PauseAudioDevice, [:audio_device_id, :int], :void
|
116
|
+
api :SDL_LoadWAV_RW, [RWops.by_ref, :int, Audio::Spec.by_ref, :pointer, :pointer], Audio::Spec.by_ref
|
117
|
+
|
118
|
+
def self.load_wav(file, spec, audio_buf, audio_len)
|
119
|
+
load_wav_rw(rw_from_file)
|
120
|
+
end
|
121
|
+
|
122
|
+
api :SDL_FreeWAV, [:pointer], :void
|
123
|
+
api :SDL_BuildAudioCVT, [Audio::CVT.by_ref, :audio_format, :uint8, :int, :audio_format, :uint8, :int], :int
|
124
|
+
api :SDL_ConvertAudio, [Audio::CVT.by_ref], :int
|
125
|
+
|
126
|
+
MIX_MAXVOLUME = 128
|
127
|
+
|
128
|
+
api :SDL_MixAudio, [:pointer, :pointer, :uint32, :int], :void
|
129
|
+
api :SDL_MixAudioFormat, [:pointer, :pointer, :audio_format, :uint32, :int], :void
|
130
|
+
api :SDL_LockAudio, [], :void
|
131
|
+
api :SDL_LockAudioDevice, [:audio_device_id], :void
|
132
|
+
api :SDL_UnlockAudio, [], :void
|
133
|
+
api :SDL_UnlockAudioDevice, [:audio_device_id], :void
|
134
|
+
|
135
|
+
api :SDL_CloseAudio, [], :void
|
136
|
+
api :SDL_CloseAudioDevice, [:audio_device_id], :void
|
137
|
+
|
138
|
+
|
139
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'sdl2'
|
2
|
+
|
3
|
+
module SDL2
|
4
|
+
|
5
|
+
module Clipboard
|
6
|
+
|
7
|
+
def self.has
|
8
|
+
SDL2.has_clipboard_text()
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.has?
|
12
|
+
SDL2.has_clipboard_text == :true
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.get
|
16
|
+
SDL2.get_clipboard_text()
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.set(text)
|
20
|
+
SDL2.set_clipboard_text(text.to_s)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
api :SDL_SetClipboardText, [:string], :int
|
25
|
+
api :SDL_GetClipboardText, [], :string
|
26
|
+
api :SDL_HasClipboardText, [], :bool
|
27
|
+
end
|
data/lib/sdl2/color.rb
ADDED
data/lib/sdl2/cpuinfo.rb
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'sdl2'
|
2
|
+
|
3
|
+
module SDL2
|
4
|
+
|
5
|
+
CACHELINE_SIZE = 128
|
6
|
+
|
7
|
+
api :SDL_GetCPUCount, [], :int
|
8
|
+
api :SDL_GetCPUCacheLineSize, [], :int
|
9
|
+
api :SDL_HasRDTSC, [], :bool
|
10
|
+
api :SDL_HasAltiVec, [], :bool
|
11
|
+
api :SDL_Has3DNow, [], :bool
|
12
|
+
api :SDL_HasSSE, [], :bool
|
13
|
+
api :SDL_HasSSE2, [], :bool
|
14
|
+
api :SDL_HasSSE3, [], :bool
|
15
|
+
api :SDL_HasSSE41, [], :bool
|
16
|
+
api :SDL_HasSSE42, [], :bool
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'sdl2'
|
2
|
+
|
3
|
+
module SDL2
|
4
|
+
|
5
|
+
class Display
|
6
|
+
# Converted from 'SDL_video.h':53
|
7
|
+
class Mode < Struct
|
8
|
+
layout :format, :uint32,
|
9
|
+
:w, :int,
|
10
|
+
:h, :int,
|
11
|
+
:refresh_rate, :int,
|
12
|
+
:driverdata, :pointer
|
13
|
+
|
14
|
+
def self.release(pointer)
|
15
|
+
pointer.free # TODO: Is there a better way of doing this?
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.current(display_index)
|
19
|
+
dm = DisplayMode.new
|
20
|
+
get_current_display_mode(display_index, dm)
|
21
|
+
return dm
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.current!(display_index)
|
25
|
+
get_current_display_mode!(display_index)
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
def format=(value)
|
30
|
+
self[:format] = value
|
31
|
+
end
|
32
|
+
|
33
|
+
def w=(value)
|
34
|
+
self[:w] = value
|
35
|
+
end
|
36
|
+
|
37
|
+
def h=(value)
|
38
|
+
self[:h] = value
|
39
|
+
end
|
40
|
+
|
41
|
+
def refresh_rate=(value)
|
42
|
+
self[:refresh_rate] = value
|
43
|
+
end
|
44
|
+
|
45
|
+
def driverdata=(value)
|
46
|
+
self[:driverdata] = value
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'sdl2'
|
2
|
+
|
3
|
+
module SDL2
|
4
|
+
|
5
|
+
class Display
|
6
|
+
|
7
|
+
class Modes
|
8
|
+
# TODO: Consider converting this into some kind of enumerator?
|
9
|
+
def initialize(for_display)
|
10
|
+
@for_display = for_display
|
11
|
+
end
|
12
|
+
|
13
|
+
def count
|
14
|
+
SDL2.get_num_display_modes(@for_display.id)
|
15
|
+
end
|
16
|
+
|
17
|
+
# TODO: Probably leaks memory.. WeakRef cache?
|
18
|
+
def [](index)
|
19
|
+
if (idx = index.to_i) < count
|
20
|
+
dm_buffer = SDL2::Display::Mode.new
|
21
|
+
if SDL2.get_display_mode(@for_display.id, idx, dm_buffer) == 0
|
22
|
+
return dm_buffer
|
23
|
+
else
|
24
|
+
dm_buffer.pointer.free
|
25
|
+
end
|
26
|
+
else
|
27
|
+
return nil
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def first
|
32
|
+
self[0]
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/sdl2/display.rb
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'sdl2'
|
2
|
+
require 'sdl2/display/modes'
|
3
|
+
require 'sdl2/display/mode'
|
4
|
+
|
5
|
+
module SDL2
|
6
|
+
|
7
|
+
# Abstract representation of what SDL calls a "Display"
|
8
|
+
class Display
|
9
|
+
|
10
|
+
attr_reader :id
|
11
|
+
|
12
|
+
def initialize(display_id)
|
13
|
+
@id = display_id.to_i # It should be an integer.
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
def modes
|
19
|
+
@modes ||= Modes.new(self)
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.[](display_id)
|
23
|
+
if (idx = display_id.to_i) < count
|
24
|
+
return Display.new(display_id)
|
25
|
+
else
|
26
|
+
return nil
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.count
|
31
|
+
SDL2.get_num_video_displays()
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.count!
|
35
|
+
total = count
|
36
|
+
SDL2.throw_error_if total < 0
|
37
|
+
return total
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.first
|
41
|
+
self[0]
|
42
|
+
end
|
43
|
+
|
44
|
+
def closest_display_mode(wanted)
|
45
|
+
closest = SDL2::Display::Mode.new # Make a new structure.
|
46
|
+
return SDL2.get_closest_display_mode(@id, wanted, closest)
|
47
|
+
end
|
48
|
+
|
49
|
+
def closest_display_mode!(wanted)
|
50
|
+
found = closest_display_mode(wanted)
|
51
|
+
SDL2.throw_error_if(found.nil?)
|
52
|
+
return found
|
53
|
+
end
|
54
|
+
|
55
|
+
def bounds
|
56
|
+
rect = SDL2::Rect.new
|
57
|
+
if SDL2.get_display_bounds(@id, rect) == 0
|
58
|
+
return rect
|
59
|
+
else
|
60
|
+
rect.pointer.free
|
61
|
+
return nil
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def bounds!
|
66
|
+
rect = bounds()
|
67
|
+
SDL2.throw_error_if rect.nil?
|
68
|
+
return rect
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|