昨日はポイントスプライトの描画を行いました。
今日は60FPSを保つためのちょっとした調整を行いました。
具体的なコードは以下の通りで、イベント処理や描画処理を除いて、1フレームが1/60秒で完了するように調整してウェイトを入れています。
let mut event_pump = sdl_context.event_pump().unwrap();
let time_for_wait = 1_000_000_000u32 / 63; // 60 で割ると60FPS出ないので3の余裕を持たせておく
'running: loop {
let start = Instant::now();
for event in event_pump.poll_iter() {
~イベント処理~
}
unsafe {
gl::Clear(gl::COLOR_BUFFER_BIT);
}
// draw
shader_program.set_used();
unsafe {
gl::BindVertexArray(vao);
gl::DrawArrays(
gl::POINTS, // mode
0, // starting index in the enabled arrays
3, // number of indices to be rendered
);
}
let end = start.elapsed();
let time_nanos: u32 = end.as_nanos() as u32;
//println!("{}ナノ秒経過しました。", time_nanos);
if time_nanos < time_for_wait {
//println!("{}ナノ秒待機しました。", time_for_wait - time_nanos);
::std::thread::sleep(::std::time::Duration::new(0, time_for_wait - time_nanos));
}
// swap window
window.gl_swap_window();
}
}