use super::{TextureData, TextureId};
use crate::sys;
use std::marker::PhantomData;
#[derive(Copy, Clone, Debug)]
#[repr(transparent)]
pub struct TextureRef<'tex> {
raw: sys::ImTextureRef,
_marker: PhantomData<&'tex mut TextureData>,
}
const _: [(); std::mem::size_of::<sys::ImTextureRef>()] =
[(); std::mem::size_of::<TextureRef<'static>>()];
const _: [(); std::mem::align_of::<sys::ImTextureRef>()] =
[(); std::mem::align_of::<TextureRef<'static>>()];
impl<'tex> TextureRef<'tex> {
#[inline]
pub unsafe fn from_raw(raw: sys::ImTextureRef) -> Self {
Self {
raw,
_marker: PhantomData,
}
}
#[inline]
pub fn raw(self) -> sys::ImTextureRef {
self.raw
}
}
impl<'tex> From<TextureId> for TextureRef<'tex> {
#[inline]
fn from(id: TextureId) -> Self {
TextureRef {
raw: sys::ImTextureRef {
_TexData: std::ptr::null_mut(),
_TexID: id.id() as sys::ImTextureID,
},
_marker: PhantomData,
}
}
}
impl<'tex> From<&TextureData> for TextureRef<'tex> {
#[inline]
fn from(td: &TextureData) -> Self {
TextureRef {
raw: sys::ImTextureRef {
_TexData: std::ptr::null_mut(),
_TexID: td.tex_id().id() as sys::ImTextureID,
},
_marker: PhantomData,
}
}
}
impl<'tex> From<&'tex mut TextureData> for TextureRef<'tex> {
#[inline]
fn from(td: &'tex mut TextureData) -> Self {
TextureRef {
raw: sys::ImTextureRef {
_TexData: td.as_raw_mut(),
_TexID: 0,
},
_marker: PhantomData,
}
}
}
pub fn create_texture_ref(texture_id: TextureId) -> sys::ImTextureRef {
sys::ImTextureRef {
_TexData: std::ptr::null_mut(),
_TexID: texture_id.id() as sys::ImTextureID,
}
}