rscenes_raylib_connector/ext/
texture.rs

1use crate::rtextures::RtexturesImpl;
2use raylib_ffi::{enums::*, *};
3use std::fmt::Display;
4
5pub trait TextureExt: Sized {
6    /// Load texture from file into GPU memory (VRAM)
7    fn load(filename: impl Display) -> Result<Self, String>;
8    /// Load texture from image data
9    fn load_from_image(image: Image) -> Result<Self, String>;
10
11    /// Check whether a texture is ready
12    fn is_ready(self) -> bool;
13    /// Unload texture from GPU memory (VRAM)
14    fn unload(self);
15    /// Update GPU texture with new data
16    fn update_gpu(self, pixels: &[u8]) -> Self;
17    /// Update GPU texture rectangle with new data
18    fn update_gpu_rec(self, rec: Rectangle, pixels: &[u8]) -> Self;
19    /// Generate GPU mipmaps for a texture
20    fn gen_mipmaps(&mut self) -> &mut Self;
21    /// Set texture scaling filter mode
22    fn set_filter(self, filter: TextureFilter) -> Self;
23    /// Set texture wrapping mode
24    fn set_wrap(self, wrap: TextureWrap) -> Self;
25}
26
27impl TextureExt for Texture2D {
28    fn load(filename: impl Display) -> Result<Self, String> {
29        RtexturesImpl::__load_texture(filename)
30    }
31
32    fn load_from_image(image: Image) -> Result<Self, String> {
33        RtexturesImpl::__load_texture_from_image(image)
34    }
35
36    fn is_ready(self) -> bool {
37        RtexturesImpl::__is_texture_ready(self)
38    }
39
40    fn unload(self) {
41        RtexturesImpl::__unload_texture(self)
42    }
43
44    fn update_gpu(self, pixels: &[u8]) -> Self {
45        RtexturesImpl::__update_texture(self, pixels);
46        self
47    }
48
49    fn update_gpu_rec(self, rec: Rectangle, pixels: &[u8]) -> Self {
50        RtexturesImpl::__update_texture_rec(self, rec, pixels);
51        self
52    }
53
54    fn gen_mipmaps(&mut self) -> &mut Self {
55        RtexturesImpl::__gen_texture_mipmaps(self);
56        self
57    }
58
59    fn set_filter(self, filter: TextureFilter) -> Self {
60        RtexturesImpl::__set_texture_filter(self, filter as usize);
61        self
62    }
63
64    fn set_wrap(self, wrap: TextureWrap) -> Self {
65        RtexturesImpl::__set_texture_wrap(self, wrap as usize);
66        self
67    }
68}
69
70pub trait TextureCubemapExt: Sized {
71    fn load(image: Image, layout: CubemapLayout) -> Result<Self, String>;
72}
73
74impl TextureCubemapExt for TextureCubemap {
75    fn load(image: Image, layout: CubemapLayout) -> Result<Self, String> {
76        RtexturesImpl::__load_texture_cubemap(image, layout as usize)
77    }
78}
79
80pub trait RenderTextureExt {
81    fn load(width: i32, height: i32) -> Self;
82
83    fn is_ready(self) -> bool;
84    fn unload(self);
85}
86
87impl RenderTextureExt for RenderTexture2D {
88    fn load(width: i32, height: i32) -> Self {
89        RtexturesImpl::__load_render_texture(width, height)
90    }
91
92    fn is_ready(self) -> bool {
93        RtexturesImpl::__is_render_texture_ready(self)
94    }
95
96    fn unload(self) {
97        RtexturesImpl::__unload_render_texture(self)
98    }
99}