main
parent
0a484ffa8d
commit
84207f9eb9
|
@ -23,6 +23,39 @@ use opengl_rust::{
|
||||||
timestep::TimeStep,
|
timestep::TimeStep,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct GraphicsContext {
|
||||||
|
window: sdl2::video::Window,
|
||||||
|
gl_ctx: sdl2::video::GLContext,
|
||||||
|
|
||||||
|
vertex_buffer: gpu_buffers::VertexBuffer,
|
||||||
|
index_buffer: gpu_buffers::IndexBuffer,
|
||||||
|
|
||||||
|
shader_program: shader::ShaderProgram,
|
||||||
|
attr_pos: u32,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn draw_graphics (ctx: &GraphicsContext) {
|
||||||
|
let attr_pos = ctx.attr_pos;
|
||||||
|
|
||||||
|
ctx.window.gl_make_current (&ctx.gl_ctx).unwrap ();
|
||||||
|
glezz::clear_color (0.392f32, 0.710f32, 0.965f32, 1.0f32);
|
||||||
|
glezz::clear (gl::COLOR_BUFFER_BIT | gl::DEPTH_BUFFER_BIT | gl::STENCIL_BUFFER_BIT);
|
||||||
|
|
||||||
|
ctx.shader_program.use_program ();
|
||||||
|
glezz::enable_vertex_attrib_array (Some (attr_pos));
|
||||||
|
|
||||||
|
ctx.vertex_buffer.bind ();
|
||||||
|
ctx.index_buffer.bind ();
|
||||||
|
|
||||||
|
unsafe {
|
||||||
|
gl::VertexAttribPointer (attr_pos, 2, gl::FLOAT, 0, 4 * 2, 0 as *const u8 as *const c_void);
|
||||||
|
|
||||||
|
gl::DrawRangeElements (gl::TRIANGLES, 0, 6, 6, gl::UNSIGNED_INT, 0 as *const u8 as *const c_void);
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.window.gl_swap_window ();
|
||||||
|
}
|
||||||
|
|
||||||
fn main () -> anyhow::Result <()> {
|
fn main () -> anyhow::Result <()> {
|
||||||
let sdl_context = sdl2::init ().map_err (|e| anyhow! ("Can't init SDL: {}", e))?;
|
let sdl_context = sdl2::init ().map_err (|e| anyhow! ("Can't init SDL: {}", e))?;
|
||||||
|
|
||||||
|
@ -76,7 +109,7 @@ void main (void) {
|
||||||
|
|
||||||
let shader_program = shader::ShaderProgram::new (&vertex_shader, &fragment_shader).map_err (|e| anyhow! ("Can't link shader program: {}", e))?;
|
let shader_program = shader::ShaderProgram::new (&vertex_shader, &fragment_shader).map_err (|e| anyhow! ("Can't link shader program: {}", e))?;
|
||||||
|
|
||||||
let attr_pos = shader_program.get_attribute_location (&CString::new ("attr_pos".as_bytes ())?);
|
let attr_pos = shader_program.get_attribute_location (&CString::new ("attr_pos".as_bytes ())?).try_into ()?;
|
||||||
|
|
||||||
let vertex_buffer = gpu_buffers::VertexBuffer::from_slice (&[
|
let vertex_buffer = gpu_buffers::VertexBuffer::from_slice (&[
|
||||||
0.0, 0.0,
|
0.0, 0.0,
|
||||||
|
@ -90,6 +123,17 @@ void main (void) {
|
||||||
0, 2, 3
|
0, 2, 3
|
||||||
]);
|
]);
|
||||||
|
|
||||||
|
let graphics_ctx = GraphicsContext {
|
||||||
|
window,
|
||||||
|
gl_ctx,
|
||||||
|
|
||||||
|
vertex_buffer,
|
||||||
|
index_buffer,
|
||||||
|
|
||||||
|
shader_program,
|
||||||
|
attr_pos,
|
||||||
|
};
|
||||||
|
|
||||||
'running: loop {
|
'running: loop {
|
||||||
let frames_to_do = time_step.step ();
|
let frames_to_do = time_step.step ();
|
||||||
|
|
||||||
|
@ -109,23 +153,7 @@ void main (void) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
window.gl_make_current (&gl_ctx).unwrap ();
|
draw_graphics (&graphics_ctx);
|
||||||
glezz::clear_color (0.392f32, 0.710f32, 0.965f32, 1.0f32);
|
|
||||||
glezz::clear (gl::COLOR_BUFFER_BIT | gl::DEPTH_BUFFER_BIT | gl::STENCIL_BUFFER_BIT);
|
|
||||||
|
|
||||||
shader_program.use_program ();
|
|
||||||
glezz::enable_vertex_attrib_array (Some (attr_pos.try_into ()?));
|
|
||||||
|
|
||||||
vertex_buffer.bind ();
|
|
||||||
index_buffer.bind ();
|
|
||||||
|
|
||||||
unsafe {
|
|
||||||
gl::VertexAttribPointer (attr_pos.try_into ()?, 2, gl::FLOAT, 0, 4 * 2, 0 as *const u8 as *const c_void);
|
|
||||||
|
|
||||||
gl::DrawRangeElements (gl::TRIANGLES, 0, 6, 6, gl::UNSIGNED_INT, 0 as *const u8 as *const c_void);
|
|
||||||
}
|
|
||||||
|
|
||||||
window.gl_swap_window ();
|
|
||||||
graphics_frames += 1;
|
graphics_frames += 1;
|
||||||
|
|
||||||
std::thread::sleep (Duration::from_millis (15));
|
std::thread::sleep (Duration::from_millis (15));
|
||||||
|
|
Loading…
Reference in New Issue