rb_sdl2 0.1.0 → 0.1.1
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 +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:
|