rb_sdl2 0.1.0 → 0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +22 -0
- data/README.md +14 -0
- data/lib/rb_sdl2/error.rb +4 -0
- data/lib/rb_sdl2/palette.rb +4 -0
- data/lib/rb_sdl2/platform.rb +2 -0
- data/lib/rb_sdl2/sdl.rb +12 -0
- data/lib/rb_sdl2/surface.rb +24 -3
- data/lib/rb_sdl2/timer.rb +9 -0
- data/lib/rb_sdl2/version.rb +2 -0
- data/rb_sdl2.gemspec +9 -1
- metadata +9 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6e1202e5d4354c491782ad3d005ff73685498fe74db86b27fb5dd89e96bbd6e0
|
4
|
+
data.tar.gz: d3544770d711514d14ea918eaacf135569e8ccb0329ec52f956ea0fdfddde46a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f7675ac774fd74152857edbad3a319f5700336dbe7cc375f80b2775ddf9f4695a3a07ecfd5c667252252cb7907539efd28662cae29d9ae7424fa2776edf7cc8e
|
7
|
+
data.tar.gz: 8ec901e68e62c38d850c4ddeac7526e23bd433f3ad238327f60f4ab8529ad4c3a779301b231a82ad0bc20a39341c8c079b853fd1955be34eb397ef5f8114a137
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,27 @@
|
|
1
1
|
## [Unreleased]
|
2
2
|
|
3
|
+
### Added
|
4
|
+
|
5
|
+
### Changed
|
6
|
+
|
7
|
+
### Deprecated
|
8
|
+
|
9
|
+
### Fixed
|
10
|
+
|
11
|
+
### Removed
|
12
|
+
|
13
|
+
### Security
|
14
|
+
|
15
|
+
## [0.1.1] - 2021-10-11
|
16
|
+
|
17
|
+
### Added
|
18
|
+
- Added metadata to gemspec.
|
19
|
+
- Added document to Error, Platform, SDL, Surface, Timer, and Version.
|
20
|
+
- Added description to README.md.
|
21
|
+
|
22
|
+
### Changed
|
23
|
+
- Changed the contents of Palette#inspect to something meaningful.
|
24
|
+
|
3
25
|
## [0.1.0] - 2021-10-10
|
4
26
|
|
5
27
|
- Initial release
|
data/README.md
CHANGED
@@ -6,6 +6,20 @@ Ruby オブジェクトとして提供します。
|
|
6
6
|
SDL 2.0.16 移行を対象としています。この Gem には SDL は含まれていません。
|
7
7
|
利用する際は環境に合わせて SDL を用意してください。
|
8
8
|
|
9
|
+
## Description
|
10
|
+
|
11
|
+
RbSDL2 は SDL の機能やポインターを Ruby オブジェクトとして扱います。
|
12
|
+
ポインター管理を RbSDL2 が行っているのでメモリー管理を気にせずに SDL の機能を使うことができます。
|
13
|
+
最低限のマネージ機能も用意しています。例えばコールバック関数を設定した場合はそのオブジェクトを保持します。
|
14
|
+
スコープを外れてもコアダンプすることはありません。
|
15
|
+
|
16
|
+
[sdl2-bindings](https://rubygems.org/gems/sdl2-bindings) を基に構築していますので、
|
17
|
+
オブジェクトの仕様や性能が気に入らない場合は直接(そして全ての) SDL 関数を呼び出すこともできます。
|
18
|
+
各オブジェクトは外部からのポインターから作成することができます。
|
19
|
+
C で書いたライブラリとの部分的な連携に利用することもできます。
|
20
|
+
|
21
|
+
SDL の仕様や機能について知っている必要はありますが Ruby のコードを読めれば使えるようになっています。
|
22
|
+
|
9
23
|
## Installation
|
10
24
|
|
11
25
|
$ gem install rb_sdl2
|
data/lib/rb_sdl2/error.rb
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
module RbSDL2
|
2
2
|
module Error
|
3
3
|
class << self
|
4
|
+
# SDL が設定したエラーメッセージをクリアします。
|
4
5
|
def clear = ::SDL2.SDL_ClearError
|
5
6
|
|
7
|
+
# SDL からのエラーメッセージを文字列で返します。
|
8
|
+
# SDL からエラーが通知されてもえらメッセージがあるとは限りません。
|
9
|
+
# SDL の関数はエラーの状態を示してもエラーメッセージをセットしない場合があります。
|
6
10
|
def message = ::SDL2.SDL_GetError.read_string
|
7
11
|
end
|
8
12
|
end
|
data/lib/rb_sdl2/palette.rb
CHANGED
data/lib/rb_sdl2/platform.rb
CHANGED
data/lib/rb_sdl2/sdl.rb
CHANGED
@@ -19,13 +19,25 @@ module RbSDL2
|
|
19
19
|
end
|
20
20
|
|
21
21
|
class << self
|
22
|
+
# SDL を初期化します。
|
23
|
+
# flags に起動したい SDL サブシステムをキーにオプション引数(値は true で起動)で与えます。
|
24
|
+
# flags を指定指定しない場合は全ての SDL コンポーネントが起動します。
|
25
|
+
# オプション引数のキーは audio, events, game_controller, haptic, joystick, sensor, timer, video
|
26
|
+
# があります。
|
22
27
|
def init(**flags)
|
23
28
|
err = ::SDL2.SDL_Init(InitFlags.to_num(**flags))
|
24
29
|
raise RbSDL2Error if err < 0
|
25
30
|
end
|
26
31
|
|
32
|
+
# SDL サブシステムが初期化されているか確認します。
|
33
|
+
# アプリケーション作成者が必要とする SDL サブシステム初期化されているか確認できます。
|
34
|
+
# flags に与えたオプションの状態と一致した時のみ true を返します。
|
35
|
+
# 部分的な一致の場合は false を返します。
|
27
36
|
def init?(**flags) = ::SDL2.SDL_WasInit(mask = InitFlags.to_num(**flags)) == mask
|
28
37
|
|
38
|
+
# SDL を終了します。RbSDL2 ではアプリケーションの終了時にこのメソッドを呼ぶ必要はありません。
|
39
|
+
# 終了後に再び SDL サブシステムを起動する必要がある場合は再度 init メソッドを呼ぶことができます。
|
40
|
+
# このメソッドは何度でも呼び出すことができます。
|
29
41
|
def quit = ::SDL2.SDL_Quit
|
30
42
|
end
|
31
43
|
end
|
data/lib/rb_sdl2/surface.rb
CHANGED
@@ -30,8 +30,13 @@ module RbSDL2
|
|
30
30
|
require_relative 'pixel_format_enum'
|
31
31
|
|
32
32
|
class << self
|
33
|
-
#
|
34
|
-
#
|
33
|
+
# 指定した Surface オブジェクトを基に指定した画像フォーマットの新しい Surface オブジェクトを柵瀬します。
|
34
|
+
# surface へ変換元の Surface オブジェクトを与えます。
|
35
|
+
# new_format へ変換先の画像フォーマット(PixelFormatEnumの名前か番号)を与えます。
|
36
|
+
# 変換ができない場合は例外(RbSDL2::RbSDL2Error)を発生させます。
|
37
|
+
# INDEX1*, INDEX4*, ARGB2101010、FOURCC系への変換はできません。
|
38
|
+
# 変換先がインデックスカラー(INDEX8)の時は例外は発生しませんが期待する変換は行われません。
|
39
|
+
# その時はサーフェィス全面がインデックス番号0で埋められています。
|
35
40
|
def convert(surface, new_format)
|
36
41
|
ptr = SurfacePointer.new(
|
37
42
|
::SDL2.SDL_ConvertSurfaceFormat(surface, PixelFormatEnum.to_num(new_format), 0))
|
@@ -43,9 +48,17 @@ module RbSDL2
|
|
43
48
|
|
44
49
|
require_relative 'rw_ops'
|
45
50
|
|
51
|
+
# ファイルから画像を読み込み新たな Surface オブジェクトを生成します。
|
52
|
+
# file へ読み込む画像ファイルのパスを与えます。
|
53
|
+
# 対応する画像は BMP 形式のみです。
|
54
|
+
# 読み込みができない場合は例外(RbSDL2::RbSDL2Error)を発生させます。
|
55
|
+
# インデックスカラー(2色、16色)は INDEX8 フォーマットとして読み込まれます。
|
46
56
|
def load(file) = RWOps.new(file, "rb") { |rw| load_rw(rw) }
|
47
57
|
|
48
|
-
#
|
58
|
+
# RWOps から画像を読み込み新たな Surface オブジェクトを生成します。
|
59
|
+
# rw へ RbSDL2::RWOps オブジェクトか SDL_RWOps ポインターを与えます。
|
60
|
+
# 読み込みができない場合は例外(RbSDL2::RbSDL2Error)を発生させます。
|
61
|
+
# このメソッドは与えられたオブジェクトをクローズしません。
|
49
62
|
def load_rw(rw)
|
50
63
|
ptr = SurfacePointer.new(::SDL2.SDL_LoadBMP_RW(rw, 0))
|
51
64
|
raise RbSDL2Error if ptr.null?
|
@@ -54,6 +67,10 @@ module RbSDL2
|
|
54
67
|
obj
|
55
68
|
end
|
56
69
|
|
70
|
+
# 新しい Surface オブジェクトを生成します。
|
71
|
+
# w へ画像の幅ピクセル数
|
72
|
+
# h へ画像の縦ピクセル数
|
73
|
+
# format へ画像フォーマット(PixelFormatEnumの名前か番号)を与えます。
|
57
74
|
def new(w, h, format)
|
58
75
|
ptr = SurfacePointer.new(
|
59
76
|
::SDL2.SDL_CreateRGBSurfaceWithFormat(0, w, h, 0, PixelFormatEnum.to_num(format)))
|
@@ -61,6 +78,10 @@ module RbSDL2
|
|
61
78
|
super(ptr)
|
62
79
|
end
|
63
80
|
|
81
|
+
# ポインターから Surface オブジェクトを生成します。
|
82
|
+
# ptr へ対象となるポインターを与えます。
|
83
|
+
# このメソッドは SDL_Surface 構造体の参照カウンターをサポートしています。
|
84
|
+
# 生成した Surface オブジェクトは SDL 側で破棄しても Ruby 側のスコープに存在していれば安全に使用できます。
|
64
85
|
def to_ptr(ptr)
|
65
86
|
obj = allocate
|
66
87
|
obj.__send__(:initialize, SurfacePointer.to_ptr(ptr))
|
data/lib/rb_sdl2/timer.rb
CHANGED
@@ -1,21 +1,30 @@
|
|
1
1
|
module RbSDL2
|
2
2
|
module Timer
|
3
3
|
class << self
|
4
|
+
# ms へ与えたミリ秒だけスレッドを停止します。SDL のタイマーを使用しています。
|
5
|
+
# ms が負の数だった場合 ArgumentError が発生します。
|
4
6
|
def delay(ms)
|
5
7
|
raise ArgumentError if ms < 0
|
6
8
|
::SDL2.SDL_Delay(ms)
|
7
9
|
end
|
8
10
|
|
11
|
+
# performance_count の 1 秒あたりの増加量を返します。
|
9
12
|
def performance_frequency = ::SDL2.SDL_GetPerformanceFrequency
|
10
13
|
|
14
|
+
# SDL が提供する高精度カウンターの値を返します。
|
15
|
+
# 返ってくる値には意味がありません。精度も SDL の実装や動作環境ごとに違います。
|
11
16
|
def performance_count = ::SDL2.SDL_GetPerformanceCounter
|
12
17
|
|
18
|
+
# 与えられたブロックの実行時間を返します。単位は秒です。
|
19
|
+
# 実行時間の計測に SDL の高精度カウンターを使用しています。
|
13
20
|
def realtime
|
14
21
|
t = performance_count
|
15
22
|
yield
|
16
23
|
(performance_count - t).fdiv(performance_frequency)
|
17
24
|
end
|
18
25
|
|
26
|
+
# SDL が起動してからの経過時間をミリ秒で返します。
|
27
|
+
# SDL のタイマーを使用しており、49日ほどで 0 に戻ります。
|
19
28
|
def ticks = ::SDL2.SDL_GetTicks
|
20
29
|
end
|
21
30
|
end
|
data/lib/rb_sdl2/version.rb
CHANGED
data/rb_sdl2.gemspec
CHANGED
@@ -2,14 +2,22 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = "rb_sdl2"
|
5
|
-
spec.version = "0.1.
|
5
|
+
spec.version = "0.1.1"
|
6
6
|
spec.author = "shinokaro"
|
7
7
|
spec.email = "shinokaro@hotmail.co.jp"
|
8
|
+
|
8
9
|
spec.summary = "Multimedia library with SDL."
|
9
10
|
spec.description = "RbSDL2 treats the functions and pointers provided by SDL as Ruby objects."
|
11
|
+
spec.homepage = "https://github.com/shinokaro/rb_sdl2/blob/main/README.md"
|
10
12
|
spec.license = "Zlib"
|
11
13
|
spec.required_ruby_version = Gem::Requirement.new(">= 3.0.0")
|
12
14
|
|
15
|
+
spec.metadata['bug_tracker_uri'] = 'https://github.com/shinokaro/rb_sdl2/issues'
|
16
|
+
spec.metadata["changelog_uri"] = "https://github.com/shinokaro/rb_sdl2/blob/main/CHANGELOG.md"
|
17
|
+
spec.metadata["documentation_uri"] = "https://www.rubydoc.info/gems/rb_sdl2"
|
18
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
19
|
+
spec.metadata["source_code_uri"] = "https://github.com/shinokaro/rb_sdl2"
|
20
|
+
|
13
21
|
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
14
22
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
|
15
23
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rb_sdl2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- shinokaro
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-10-
|
11
|
+
date: 2021-10-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|
@@ -109,10 +109,15 @@ files:
|
|
109
109
|
- lib/rb_sdl2/window/size.rb
|
110
110
|
- lib/rb_sdl2/window/window_flags.rb
|
111
111
|
- rb_sdl2.gemspec
|
112
|
-
homepage:
|
112
|
+
homepage: https://github.com/shinokaro/rb_sdl2/blob/main/README.md
|
113
113
|
licenses:
|
114
114
|
- Zlib
|
115
|
-
metadata:
|
115
|
+
metadata:
|
116
|
+
bug_tracker_uri: https://github.com/shinokaro/rb_sdl2/issues
|
117
|
+
changelog_uri: https://github.com/shinokaro/rb_sdl2/blob/main/CHANGELOG.md
|
118
|
+
documentation_uri: https://www.rubydoc.info/gems/rb_sdl2
|
119
|
+
homepage_uri: https://github.com/shinokaro/rb_sdl2/blob/main/README.md
|
120
|
+
source_code_uri: https://github.com/shinokaro/rb_sdl2
|
116
121
|
post_install_message:
|
117
122
|
rdoc_options: []
|
118
123
|
require_paths:
|