core_video/
opengl_texture.rs1use core_foundation::base::{Boolean, CFTypeID, TCFType};
2
3use crate::{
4 buffer::TCVBuffer,
5 image_buffer::{CVImageBufferRef, TCVImageBuffer},
6 GLenum, GLuint,
7};
8
9pub type CVOpenGLTextureRef = CVImageBufferRef;
10
11extern "C" {
12 pub fn CVOpenGLTextureGetTypeID() -> CFTypeID;
13 pub fn CVOpenGLTextureRetain(texture: CVOpenGLTextureRef) -> CVOpenGLTextureRef;
14 pub fn CVOpenGLTextureRelease(texture: CVOpenGLTextureRef);
15 pub fn CVOpenGLTextureGetTarget(image: CVOpenGLTextureRef) -> GLenum;
16 pub fn CVOpenGLTextureGetName(image: CVOpenGLTextureRef) -> GLuint;
17 pub fn CVOpenGLTextureIsFlipped(image: CVOpenGLTextureRef) -> Boolean;
18 pub fn CVOpenGLTextureGetCleanTexCoords(
19 image: CVOpenGLTextureRef,
20 lowerLeft: *mut f32,
21 lowerRight: *mut f32,
22 upperRight: *mut f32,
23 upperLeft: *mut f32,
24 );
25}
26
27impl TCVBuffer for CVOpenGLTexture {}
28impl TCVImageBuffer for CVOpenGLTexture {}
29
30pub struct CVOpenGLTexture(CVOpenGLTextureRef);
31
32impl Drop for CVOpenGLTexture {
33 fn drop(&mut self) {
34 unsafe { CVOpenGLTextureRelease(self.0) }
35 }
36}
37
38impl_TCFType!(CVOpenGLTexture, CVOpenGLTextureRef, CVOpenGLTextureGetTypeID);
39impl_CFTypeDescription!(CVOpenGLTexture);
40
41impl CVOpenGLTexture {
42 #[inline]
43 pub fn get_target(&self) -> GLenum {
44 unsafe { CVOpenGLTextureGetTarget(self.as_concrete_TypeRef()) }
45 }
46
47 #[inline]
48 pub fn get_name(&self) -> GLuint {
49 unsafe { CVOpenGLTextureGetName(self.as_concrete_TypeRef()) }
50 }
51
52 #[inline]
53 pub fn is_flipped(&self) -> bool {
54 unsafe { CVOpenGLTextureIsFlipped(self.as_concrete_TypeRef()) != 0 }
55 }
56
57 #[inline]
58 pub fn get_clean_tex_coords(&self) -> (f32, f32, f32, f32) {
59 let mut lower_left = 0.0;
60 let mut lower_right = 0.0;
61 let mut upper_right = 0.0;
62 let mut upper_left = 0.0;
63 unsafe {
64 CVOpenGLTextureGetCleanTexCoords(self.as_concrete_TypeRef(), &mut lower_left, &mut lower_right, &mut upper_right, &mut upper_left);
65 }
66 (lower_left, lower_right, upper_right, upper_left)
67 }
68}