From edee182bf9074bc171ff19524e2eab37d8ad8473 Mon Sep 17 00:00:00 2001 From: Thinkofname Date: Sat, 19 Mar 2016 20:35:31 +0000 Subject: [PATCH] Use BufferSubData instead of MapBuffer --- src/gl/mod.rs | 6 ++++++ src/main.rs | 3 +++ src/render/mod.rs | 3 +-- src/render/ui.rs | 3 +-- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/gl/mod.rs b/src/gl/mod.rs index fac13a0..ed3ae32 100644 --- a/src/gl/mod.rs +++ b/src/gl/mod.rs @@ -668,6 +668,12 @@ impl Buffer { } } + pub fn re_set_data(&self, target: BufferTarget, data: &[u8]) { + unsafe { + gl::BufferSubData(target, 0, data.len() as isize, data.as_ptr() as *const _); + } + } + /// Maps the memory in the buffer on the gpu to memory which the program /// can access. The access flag will specify how the program plans to use the /// returned data. It'll unmap itself once the returned value is dropped. diff --git a/src/main.rs b/src/main.rs index b850b4e..98214cf 100644 --- a/src/main.rs +++ b/src/main.rs @@ -211,6 +211,9 @@ fn handle_window_event(window: &glutin::Window, } Event::KeyboardInput(glutin::ElementState::Pressed, key, virt) => { println!("Key: {:?} {:?}", key, virt); + if virt == Some(VirtualKeyCode::H) { + game.server.world.flag_dirty_all(); + } } _ => (), diff --git a/src/render/mod.rs b/src/render/mod.rs index 249b239..364a3b0 100644 --- a/src/render/mod.rs +++ b/src/render/mod.rs @@ -365,8 +365,7 @@ impl Renderer { info.buffer_size = data.len(); info.buffer.set_data(gl::ARRAY_BUFFER, data, gl::DYNAMIC_DRAW); } else { - let mut target = info.buffer.map(gl::ARRAY_BUFFER, gl::WRITE_ONLY, data.len()); - target.write_all(data).unwrap(); + info.buffer.re_set_data(gl::ARRAY_BUFFER, data); } self.chunk_shader.position.vertex_pointer(3, gl::FLOAT, false, 40, 0); diff --git a/src/render/ui.rs b/src/render/ui.rs index b332b55..9782fde 100644 --- a/src/render/ui.rs +++ b/src/render/ui.rs @@ -169,8 +169,7 @@ impl UIState { self.prev_size = self.data.len(); self.buffer.set_data(gl::ARRAY_BUFFER, &self.data, gl::STREAM_DRAW); } else { - let mut target = self.buffer.map(gl::ARRAY_BUFFER, gl::WRITE_ONLY, self.data.len()); - target.write_all(&self.data[..]).unwrap(); + self.buffer.re_set_data(gl::ARRAY_BUFFER, &self.data); } gl::draw_elements(gl::TRIANGLES, self.count, self.index_type, 0); }