From c4686c2992417545e7a05a6a40ee9f1a8bbf3b96 Mon Sep 17 00:00:00 2001 From: HampusM Date: Fri, 16 Aug 2024 22:10:00 +0200 Subject: perf(engine): create OpenGL objects as needed instead of each frame --- engine/src/util.rs | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) (limited to 'engine/src/util.rs') diff --git a/engine/src/util.rs b/engine/src/util.rs index 532bdee..8e93982 100644 --- a/engine/src/util.rs +++ b/engine/src/util.rs @@ -9,6 +9,9 @@ macro_rules! try_option { }; } +use std::mem::ManuallyDrop; +use std::ops::{Deref, DerefMut}; + pub(crate) use try_option; macro_rules! or { @@ -93,3 +96,37 @@ macro_rules! builder { } pub(crate) use builder; + +/// Wrapper that ensures the contained value will never be dropped. +#[derive(Debug)] +pub struct NeverDrop +{ + value: ManuallyDrop, +} + +impl NeverDrop +{ + #[must_use] + pub fn new(value: Value) -> Self + { + Self { value: ManuallyDrop::new(value) } + } +} + +impl Deref for NeverDrop +{ + type Target = Value; + + fn deref(&self) -> &Self::Target + { + &*self.value + } +} + +impl DerefMut for NeverDrop +{ + fn deref_mut(&mut self) -> &mut Self::Target + { + &mut *self.value + } +} -- cgit v1.2.3-18-g5258