Module: RbSDL2::SDL

Defined in:
lib/rb_sdl2/sdl.rb

Constant Summary collapse

SDL_INIT_TIMER =
0x00000001
SDL_INIT_AUDIO =
0x00000010
SDL_INIT_VIDEO =
0x00000020
SDL_INIT_JOYSTICK =
0x00000200
SDL_INIT_HAPTIC =
0x00001000
SDL_INIT_GAMECONTROLLER =
0x00002000
SDL_INIT_EVENTS =
0x00004000
SDL_INIT_SENSOR =
0x00008000
SDL_INIT_EVERYTHING =
SDL_INIT_TIMER | SDL_INIT_AUDIO | SDL_INIT_VIDEO | SDL_INIT_EVENTS |
SDL_INIT_JOYSTICK | SDL_INIT_HAPTIC | SDL_INIT_GAMECONTROLLER | SDL_INIT_SENSOR
NUL =

厳密な定義のためエンコーディングは ASCII-8BIT とする。

"\x00".encode!(Encoding::ASCII_8BIT).freeze

Class Method Summary collapse

Class Method Details

.init(*flags) ⇒ Object

SDL を初期化します。 flags に起動したい SDL サブシステムのシンボルで指定します。 flags を指定指定しない場合は全ての SDL サブシステムが起動します。 SDL サブシステムのシンボルは :audio, :events, :game_controller, :haptic, :joystick, :sensor, :timer, :video です。

Raises:



22
23
24
25
# File 'lib/rb_sdl2/sdl.rb', line 22

def init(*flags)
  err = ::SDL.Init(to_num(*flags))
  raise RbSDL2Error if err < 0
end

.init?(*flags) ⇒ Boolean

SDL サブシステムが初期化されているか確認します。 flags に与えたシンボルの SDL サブシステムが全て起動している時に true を戻します。

Returns:

  • (Boolean)


29
# File 'lib/rb_sdl2/sdl.rb', line 29

def init?(*flags) = ::SDL.WasInit(mask = to_num(*flags)) == mask

.ptr_to_str(ptr) ⇒ Object

SDL String(C String, UTF-8) を Ruby String へ変換します。 戻り値の文字列エンコードは UTF-8 です。ptr へ与えたポインター先のメモリーは開放しません。 ptr へ NULL ポインターを与えても安全です。その場合は空文字を戻します。 戻り値の文字列は Ruby 側へコピーされたものです。これを変更しても SDL のメモリー領域に影響を与えません。



57
58
59
60
61
62
63
# File 'lib/rb_sdl2/sdl.rb', line 57

def ptr_to_str(ptr)
  if ptr.null?
    ""
  else
    ptr.read_string.force_encoding(Encoding::UTF_8)
  end
end

.quitObject

SDL を終了します。RbSDL2 ではアプリケーションの終了時にこのメソッドを呼ぶ必要はありません。 終了後に再び SDL サブシステムを起動する必要がある場合は再度 init メソッドを呼ぶことができます。 このメソッドは何度でも呼び出すことができます。



34
# File 'lib/rb_sdl2/sdl.rb', line 34

def quit = ::SDL.Quit

.str_to_sdl(s) ⇒ Object

Ruby String を SDL で取り扱う String へ変換します。 戻り値は UTF-8 エンコードされた変更不可能な文字列です。 内部では s へ与えた文字列をコピーし UTF-8 エンコードへ変換します。(元の文字列への影響はありません) 文字列に NUL 文字が含まれる場合は ArgumentError が発生します。

Raises:

  • (ArgumentError)


72
73
74
75
76
77
78
79
80
# File 'lib/rb_sdl2/sdl.rb', line 72

def str_to_sdl(s)
  # dup -> UTF-8 -> ASCII-8BIT
  # ASCII-8BIT にするのは size メソッドで正確なバイト数を得るため。(bytesize は忘れることがある)
  # frozen にして SDL 用文字列を変更(例えばエンコーディング)させない。
  sdl = String.new(s).encode!(Encoding::UTF_8).force_encoding(Encoding::ASCII_8BIT).freeze
  # NUL 文字の混入チェック
  raise ArgumentError if sdl.include?(NUL)
  sdl
end