summaryrefslogtreecommitdiff
path: root/engine/src/opengl
diff options
context:
space:
mode:
Diffstat (limited to 'engine/src/opengl')
-rw-r--r--engine/src/opengl/buffer.rs13
-rw-r--r--engine/src/opengl/vertex_array.rs11
2 files changed, 24 insertions, 0 deletions
diff --git a/engine/src/opengl/buffer.rs b/engine/src/opengl/buffer.rs
index 68a75fb..2be7f12 100644
--- a/engine/src/opengl/buffer.rs
+++ b/engine/src/opengl/buffer.rs
@@ -39,6 +39,19 @@ impl<Item> Buffer<Item>
{
self.buf
}
+
+ /// Does a weak clone of this buffer. The buffer itself is NOT copied in any way this
+ /// function only copies the internal buffer ID.
+ ///
+ /// # Safety
+ /// The returned `Buffer` must not be dropped if another `Buffer` referencing the
+ /// same buffer ID is used later or if a [`VertexArray`] is used later.
+ ///
+ /// [`VertexArray`]: crate::opengl::vertex_array::VertexArray
+ pub unsafe fn clone_weak(&self) -> Self
+ {
+ Self { buf: self.buf, _pd: PhantomData }
+ }
}
impl<Item> Drop for Buffer<Item>
diff --git a/engine/src/opengl/vertex_array.rs b/engine/src/opengl/vertex_array.rs
index e1e1a15..da5d91e 100644
--- a/engine/src/opengl/vertex_array.rs
+++ b/engine/src/opengl/vertex_array.rs
@@ -125,6 +125,17 @@ impl VertexArray
{
unsafe { gl::BindVertexArray(self.array) }
}
+
+ /// Does a weak clone of this vertex array. The vertex array itself is NOT copied in
+ /// any way this function only copies the internal vertex array ID.
+ ///
+ /// # Safety
+ /// The returned `VertexArray` must not be dropped if another `VertexArray`
+ /// referencing the same vertex array ID is used later.
+ pub unsafe fn clone_unsafe(&self) -> Self
+ {
+ Self { array: self.array }
+ }
}
impl Drop for VertexArray