use crate::{
pixel::Pixel,
texture::{Dimensionable, Sampler, TexelUpload, TextureError},
};
pub unsafe trait TextureBase {
type TextureRepr;
}
pub unsafe trait Texture<D, P>: TextureBase
where
D: Dimensionable,
P: Pixel,
{
unsafe fn new_texture(
&mut self,
size: D::Size,
sampler: Sampler,
texels: TexelUpload<[P::Encoding]>,
) -> Result<Self::TextureRepr, TextureError>;
unsafe fn new_texture_raw(
&mut self,
size: D::Size,
sampler: Sampler,
texels: TexelUpload<[P::RawEncoding]>,
) -> Result<Self::TextureRepr, TextureError>;
unsafe fn mipmaps(texture: &Self::TextureRepr) -> usize;
unsafe fn upload_part(
texture: &mut Self::TextureRepr,
offset: D::Offset,
size: D::Size,
texels: TexelUpload<[P::Encoding]>,
) -> Result<(), TextureError>;
unsafe fn upload(
texture: &mut Self::TextureRepr,
size: D::Size,
texels: TexelUpload<[P::Encoding]>,
) -> Result<(), TextureError>;
unsafe fn upload_part_raw(
texture: &mut Self::TextureRepr,
offset: D::Offset,
size: D::Size,
texels: TexelUpload<[P::RawEncoding]>,
) -> Result<(), TextureError>;
unsafe fn upload_raw(
texture: &mut Self::TextureRepr,
size: D::Size,
texels: TexelUpload<[P::RawEncoding]>,
) -> Result<(), TextureError>;
unsafe fn get_raw_texels(
texture: &Self::TextureRepr,
size: D::Size,
) -> Result<Vec<P::RawEncoding>, TextureError>
where
P::RawEncoding: Copy + Default;
unsafe fn resize(
texture: &mut Self::TextureRepr,
size: D::Size,
texel: TexelUpload<[P::Encoding]>,
) -> Result<(), TextureError>;
unsafe fn resize_raw(
texture: &mut Self::TextureRepr,
size: D::Size,
texel: TexelUpload<[P::RawEncoding]>,
) -> Result<(), TextureError>;
}