昨日はRustで利用するライブラリを決定しました。本日は決定したライブラリrust-sdl2を導入してウィンドウを表示します。
まずRust-SDL2のページからライブラリをダウンロードします。Windows環境の場合、SDL2-devel-2.26.2-VC.zipをダウンロード(2023年1月5日時点)します。
解凍後に生成された3つのlibファイルをRustのlibフォルダ内にコピーします。
コピー元:SDL2-2.26.2\lib\x64\*.lib (解凍ファイル)
コピー先:C:\Program Files\Rust\lib\rustlib\x86_64-pc-windows-msvc\lib (デフォルトインストールの場合)
次に、Cargo.tomlファイルの[dependencies]に、SDL2のcrate(一般的な言い方はライブラリ)を使うための記述を追加します。
[dependencies]
sdl2 = “0.35”
gl = “0.14.0”
glは、OpenGLのために必要です。
これで準備が整いました。ウィンドウを表示するようにmain.rsを書き換えます。(Rust-SDL2のページのサンプルコード)
extern crate sdl2; extern crate gl; use sdl2::event::Event; use sdl2::keyboard::Keycode; use sdl2::video::GLProfile; fn main() { let sdl_context = sdl2::init().unwrap(); let video_subsystem = sdl_context.video().unwrap(); let gl_attr = video_subsystem.gl_attr(); gl_attr.set_context_profile(GLProfile::Core); gl_attr.set_context_version(3, 3); let window = video_subsystem.window("Window", 800, 600) .opengl() .build() .unwrap(); // Unlike the other example above, nobody created a context for your window, so you need to create one. let ctx = window.gl_create_context().unwrap(); gl::load_with(|name| video_subsystem.gl_get_proc_address(name) as *const _); debug_assert_eq!(gl_attr.context_profile(), GLProfile::Core); debug_assert_eq!(gl_attr.context_version(), (3, 3)); let mut event_pump = sdl_context.event_pump().unwrap(); 'running: loop { unsafe { gl::ClearColor(0.6, 0.0, 0.8, 1.0); gl::Clear(gl::COLOR_BUFFER_BIT); } window.gl_swap_window(); for event in event_pump.poll_iter() { match event { Event::Quit {..} | Event::KeyDown { keycode: Some(Keycode::Escape), .. } => { break 'running }, _ => {} } } ::std::thread::sleep(::std::time::Duration::new(0, 1_000_000_000u32 / 60)); } }
cargo buildコマンドでビルドします。
ワーニングが出ました。使っていない変数の指摘ですね。気になるようなら指示通り変数名を ctx から _ctx に変更しましょう。
最後にcargo runで実行します。すると
error: process didn’t exit successfully: target\debug\env_pri_cat.exe
(exit code: 0xc0000135, STATUS_DLL_NOT_FOUND)
というようなエラーが出ると思います。exeがあるtarget\debugフォルダに必要なdllをコピーします。
コピー元:SDL2-2.26.2\lib\x64\SDL2.dll (解凍ファイル)
コピー先:target\debug\SDL2.dll
もう一度、cargo runで実行します。
どうでしょうか?ウィンドウが表示されたでしょうか?
私のWindows環境ではオーバーレイでFPS情報等を表示するツール(RivaTuner Statistics Server)を入れているので色々文字が表示されていますが、紫色のウィンドウが表示されたかと思います。
おめでとうございます!
これであとは中身を作るだけです!完成した際は、Steam向けにexeとSDL2.dll の最低2ファイルを提供すれば良さそうですね。
最後に、生成されたexe をエクスローラから直接実行すると、余分なウィンドウが表示されてしまうと思います。 main.rsの先頭に以下の1行を追加することで防げます。
#![windows_subsystem = "windows"]
今回は以上です!
(੭ ˃̣̣̥ ω˂̣̣̥)੭ु⁾⁾