gpu/data/textures/
texture.rs1use crate::prelude::*;
2use crate::{Context, GLContext};
3use crate::TextureFormat;
4
5type TextureResource = <glow::Context as HasContext>::Texture;
6
7pub struct Texture {
9 pub(crate) gl : GLContext,
10 resource : TextureResource,
11 pub(crate) format : TextureFormat,
12 typ : u32
13}
14
15impl Texture {
16 pub fn new(context:&Context, format:TextureFormat, typ:u32) -> Self {
18 let gl = context.gl_context();
19 let resource = unsafe {
20 gl.create_texture().expect("Couldn't create texture")
21 };
22 Self { gl, resource, format, typ }
23 }
24
25 pub fn typ(&self) -> u32 {
27 self.typ
28 }
29
30 pub fn format(&self) -> &TextureFormat {
32 &self.format
33 }
34
35 pub(crate) fn bind(&self) {
36 unsafe {
37 self.gl.bind_texture(self.typ(), Some(self.resource()));
38 }
39 }
40
41 pub fn resource(&self) -> TextureResource {
43 self.resource
44 }
45}
46
47impl Drop for Texture {
48 fn drop(&mut self) {
49 unsafe {
50 self.gl.delete_texture(self.resource());
51 }
52 }
53}