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 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: