use super::bitmap::BitmapRef;
use crate::capi_state::CApiState;
pub struct FramebufferStencilBitmap<'a> {
generation: usize,
bitmap: &'a BitmapRef,
}
impl<'a> FramebufferStencilBitmap<'a> {
pub(crate) fn new(bitmap: &'a BitmapRef) -> Self {
let generation = CApiState::get().stencil_generation.get() + 1;
CApiState::get().stencil_generation.set(generation);
FramebufferStencilBitmap { generation, bitmap }
}
pub fn bitmap(&self) -> &'a BitmapRef {
self.bitmap
}
pub(crate) fn fns() -> &'static craydate_sys::playdate_graphics {
CApiState::get().cgraphics
}
}
impl Drop for FramebufferStencilBitmap<'_> {
fn drop(&mut self) {
if self.generation == CApiState::get().stencil_generation.get() {
unsafe { Self::fns().setStencil.unwrap()(core::ptr::null_mut()) }
}
}
}