summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engine/src/opengl/buffer.rs (renamed from engine/src/opengl/vertex_buffer.rs)33
-rw-r--r--engine/src/opengl/mod.rs2
-rw-r--r--engine/src/opengl/vertex_array.rs4
-rw-r--r--engine/src/renderer/mod.rs8
4 files changed, 24 insertions, 23 deletions
diff --git a/engine/src/opengl/vertex_buffer.rs b/engine/src/opengl/buffer.rs
index 0050a9f..34514fd 100644
--- a/engine/src/opengl/vertex_buffer.rs
+++ b/engine/src/opengl/buffer.rs
@@ -1,15 +1,16 @@
+use std::marker::PhantomData;
use std::mem::size_of_val;
use crate::opengl::currently_bound::CurrentlyBound;
-use crate::vertex::Vertex;
#[derive(Debug)]
-pub struct VertexBuffer
+pub struct Buffer<Item>
{
buffer: gl::types::GLuint,
+ _item_pd: PhantomData<Item>,
}
-impl VertexBuffer
+impl<Item> Buffer<Item>
{
pub fn new() -> Self
{
@@ -19,7 +20,10 @@ impl VertexBuffer
gl::GenBuffers(1, &mut buffer);
};
- Self { buffer }
+ Self {
+ buffer,
+ _item_pd: PhantomData,
+ }
}
#[allow(clippy::inline_always)]
@@ -30,32 +34,28 @@ impl VertexBuffer
gl::BindBuffer(gl::ARRAY_BUFFER, self.buffer);
}
- // SAFETY: A vertex array object is currently bound
+ // SAFETY: The buffer object is bound above
let currently_bound = unsafe { CurrentlyBound::new() };
cb(currently_bound);
}
- /// Stores vertices in the currently bound vertex bound.
- pub fn store(
- _currently_bound: &CurrentlyBound<Self>,
- vertices: &[Vertex],
- usage: BufferUsage,
- )
+ /// Stores items in the currently bound buffer.
+ pub fn store(_currently_bound: &CurrentlyBound<Self>, items: &[Item], usage: Usage)
{
unsafe {
#[allow(clippy::cast_possible_wrap)]
gl::BufferData(
gl::ARRAY_BUFFER,
- size_of_val(vertices) as gl::types::GLsizeiptr,
- vertices.as_ptr().cast(),
+ size_of_val(items) as gl::types::GLsizeiptr,
+ items.as_ptr().cast(),
usage.into_gl(),
);
}
}
}
-impl Drop for VertexBuffer
+impl<Item> Drop for Buffer<Item>
{
fn drop(&mut self)
{
@@ -66,9 +66,10 @@ impl Drop for VertexBuffer
}
}
+/// Buffer usage.
#[derive(Debug)]
#[allow(dead_code)]
-pub enum BufferUsage
+pub enum Usage
{
/// The buffer data is set only once and used by the GPU at most a few times.
Stream,
@@ -80,7 +81,7 @@ pub enum BufferUsage
Dynamic,
}
-impl BufferUsage
+impl Usage
{
fn into_gl(self) -> gl::types::GLenum
{
diff --git a/engine/src/opengl/mod.rs b/engine/src/opengl/mod.rs
index ce375f5..6f95a1f 100644
--- a/engine/src/opengl/mod.rs
+++ b/engine/src/opengl/mod.rs
@@ -3,10 +3,10 @@ use glfw::WindowSize;
use crate::vector::Vec2;
+pub mod buffer;
pub mod currently_bound;
pub mod shader;
pub mod vertex_array;
-pub mod vertex_buffer;
mod util;
diff --git a/engine/src/opengl/vertex_array.rs b/engine/src/opengl/vertex_array.rs
index f255b8a..ba2ded2 100644
--- a/engine/src/opengl/vertex_array.rs
+++ b/engine/src/opengl/vertex_array.rs
@@ -1,7 +1,7 @@
use std::mem::size_of;
+use crate::opengl::buffer::Buffer;
use crate::opengl::currently_bound::CurrentlyBound;
-use crate::opengl::vertex_buffer::VertexBuffer;
use crate::vertex::{Attribute, AttributeComponentType, Vertex};
const VERTEX_STRIDE: usize = size_of::<Vertex>();
@@ -45,7 +45,7 @@ impl VertexArray
pub fn configure_attrs(
_currently_bound: &CurrentlyBound<Self>,
- _vert_buf_curr_bound: &CurrentlyBound<VertexBuffer>,
+ _vert_buf_curr_bound: &CurrentlyBound<Buffer<Vertex>>,
)
{
let mut offset = 0;
diff --git a/engine/src/renderer/mod.rs b/engine/src/renderer/mod.rs
index 068b8f0..f31196d 100644
--- a/engine/src/renderer/mod.rs
+++ b/engine/src/renderer/mod.rs
@@ -5,11 +5,11 @@ use cstr::cstr;
use glfw::WindowSize;
use crate::object::Object;
+use crate::opengl::buffer::{Buffer, Usage};
#[cfg(feature = "debug")]
use crate::opengl::debug::{MessageSeverity, MessageSource, MessageType};
use crate::opengl::shader::Program as ShaderProgram;
use crate::opengl::vertex_array::{PrimitiveKind, VertexArray};
-use crate::opengl::vertex_buffer::{BufferUsage, VertexBuffer};
use crate::opengl::{clear_buffers, BufferClearMask};
use crate::vector::Vec2;
use crate::vertex::Vertex;
@@ -123,7 +123,7 @@ pub struct Renderable
vertex_arr: VertexArray,
/// Vertex buffer has to live as long as the vertex array
- _vertex_buffer: VertexBuffer,
+ _vertex_buffer: Buffer<Vertex>,
}
impl Renderable
@@ -131,11 +131,11 @@ impl Renderable
pub fn new(shader_program: ShaderProgram, vertices: &[Vertex]) -> Self
{
let vertex_arr = VertexArray::new();
- let vertex_buffer = VertexBuffer::new();
+ let vertex_buffer = Buffer::new();
vertex_arr.bind(|vert_arr_curr_bound| {
vertex_buffer.bind(|vert_buf_curr_bound| {
- VertexBuffer::store(&vert_buf_curr_bound, vertices, BufferUsage::Static);
+ Buffer::store(&vert_buf_curr_bound, vertices, Usage::Static);
VertexArray::configure_attrs(&vert_arr_curr_bound, &vert_buf_curr_bound);
});