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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 101f794f351d219f8cc70180a9f02cd57c11c507e8542fad5d83c2e4635ea7cd
4
- data.tar.gz: fc7e00d5985c46af575e81cdbd2bfd177464f14eeb111e2dfae41cdaffb75e51
3
+ metadata.gz: 6e1202e5d4354c491782ad3d005ff73685498fe74db86b27fb5dd89e96bbd6e0
4
+ data.tar.gz: d3544770d711514d14ea918eaacf135569e8ccb0329ec52f956ea0fdfddde46a
5
5
  SHA512:
6
- metadata.gz: 0dd39b4cb9da230fd7d63556a3db53be3d28eeee972a5a54aa945cffa246501d3684112d72b8f8b5f3f76cee58d47e21a226998ae791390c4f98d53222aa4cda
7
- data.tar.gz: dca9330ed249b66a6b21ad6bc42a42a14cd014f95757529d3f9e14f927f0ca89c9989960e3403511ecb58d315ed28829ca8fa9a61e30a934250ee3cefc22d207
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
@@ -57,6 +57,10 @@ module RbSDL2
57
57
 
58
58
  def each = length.times { |nth| yield(self[nth]) }
59
59
 
60
+ def inspect
61
+ "#<#{self.class.name} ptr=#{to_ptr.inspect} colors=#{length} version=#{version}>"
62
+ end
63
+
60
64
  def length = @st[:ncolors]
61
65
 
62
66
  alias size length
@@ -1,6 +1,8 @@
1
1
  module RbSDL2
2
2
  module Platform
3
3
  class << self
4
+ # プラットフォーム名(動作環境)を文字列で返します。
5
+ # ここでの動作環境は SDL ライブラリが認識しているものです。
4
6
  def platform = ::SDL2.SDL_GetPlatform.read_string
5
7
  end
6
8
  end
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
@@ -30,8 +30,13 @@ module RbSDL2
30
30
  require_relative 'pixel_format_enum'
31
31
 
32
32
  class << self
33
- # 変換ができない場合はエラーを発生させる。
34
- # 変換先がインデックスカラー(INDEX8)の時は期待する変換は行われない。
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
- # load_rw は与えられたオブジェクトをオートクローズしません。
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
@@ -1,8 +1,10 @@
1
1
  module RbSDL2
2
2
  module Version
3
3
  class << self
4
+ # SDL ライブラリのリビジョンを文字列で返します。
4
5
  def revision = ::SDL2.SDL_GetRevision.read_string
5
6
 
7
+ # SDL ライブラリのバージョン番号を文字列で返します。形式はセマンティックバージョニングです。
6
8
  def version
7
9
  st = ::SDL2::SDL_version.new
8
10
  ::SDL2.SDL_GetVersion(st)
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.0"
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.0
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-10 00:00:00.000000000 Z
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: