@@ -16,12 +16,14 @@ module Graphics.Rendering.OpenGL.GL.Texturing.Queries (
16
16
TextureQuery , textureInternalFormat , textureSize1D , textureSize2D ,
17
17
textureSize3D , textureBorder , textureRGBASizes , textureSharedSize ,
18
18
textureIntensitySize , textureLuminanceSize , textureIndexSize ,
19
- textureDepthBits , textureCompressedImageSize , textureProxyOK
19
+ textureDepthBits , textureCompressedImageSize , textureProxyOK ,
20
+ textureRGBATypes , textureIntensityType , textureLuminanceType , textureDepthType
20
21
) where
21
22
22
23
import Control.Monad
23
24
import Data.StateVar
24
25
import Foreign.Marshal.Utils
26
+ import Graphics.Rendering.OpenGL.GL.DataType
25
27
import Graphics.Rendering.OpenGL.GL.GLboolean
26
28
import Graphics.Rendering.OpenGL.GL.PeekPoke
27
29
import Graphics.Rendering.OpenGL.GL.PixelRectangles
@@ -50,6 +52,13 @@ data TexLevelParameter =
50
52
| TextureCompressedImageSize
51
53
| TextureCompressed
52
54
| TextureSharedSize
55
+ | TextureRedType
56
+ | TextureGreenType
57
+ | TextureBlueType
58
+ | TextureAlphaType
59
+ | TextureLuminanceType
60
+ | TextureIntensityType
61
+ | TextureDepthType
53
62
54
63
marshalTexLevelParameter :: TexLevelParameter -> GLenum
55
64
marshalTexLevelParameter x = case x of
@@ -69,6 +78,13 @@ marshalTexLevelParameter x = case x of
69
78
TextureCompressedImageSize -> GL_TEXTURE_COMPRESSED_IMAGE_SIZE
70
79
TextureCompressed -> GL_TEXTURE_COMPRESSED
71
80
TextureSharedSize -> GL_TEXTURE_SHARED_SIZE
81
+ TextureRedType -> GL_TEXTURE_RED_TYPE_ARB
82
+ TextureGreenType -> GL_TEXTURE_GREEN_TYPE_ARB
83
+ TextureBlueType -> GL_TEXTURE_BLUE_TYPE_ARB
84
+ TextureAlphaType -> GL_TEXTURE_ALPHA_TYPE_ARB
85
+ TextureLuminanceType -> GL_TEXTURE_LUMINANCE_TYPE_ARB
86
+ TextureIntensityType -> GL_TEXTURE_INTENSITY_TYPE_ARB
87
+ TextureDepthType -> GL_TEXTURE_DEPTH_TYPE_ARB
72
88
73
89
--------------------------------------------------------------------------------
74
90
@@ -152,6 +168,27 @@ textureProxyOK t level =
152
168
makeGettableStateVar $
153
169
getTexLevelParameteri unmarshalGLboolean (marshalParameterizedTextureTargetProxy t) level TextureWidth
154
170
171
+ textureRGBATypes :: QueryableTextureTarget t => TextureQuery t (Color4 (Maybe DataRepresentation ))
172
+ textureRGBATypes t level =
173
+ makeGettableStateVar $
174
+ liftM4 Color4
175
+ (getDataRepr t level TextureRedType )
176
+ (getDataRepr t level TextureGreenType )
177
+ (getDataRepr t level TextureBlueType )
178
+ (getDataRepr t level TextureAlphaType )
179
+
180
+ getDataRepr :: QueryableTextureTarget t => t -> Level -> TexLevelParameter -> IO (Maybe DataRepresentation )
181
+ getDataRepr = getTexLevelParameteriNoProxy (unmarshalDataRepresentation . fromIntegral )
182
+
183
+ textureIntensityType :: QueryableTextureTarget t => TextureQuery t (Maybe DataRepresentation )
184
+ textureIntensityType t level = makeGettableStateVar $ getDataRepr t level TextureIntensityType
185
+
186
+ textureLuminanceType :: QueryableTextureTarget t => TextureQuery t (Maybe DataRepresentation )
187
+ textureLuminanceType t level = makeGettableStateVar $ getDataRepr t level TextureLuminanceType
188
+
189
+ textureDepthType :: QueryableTextureTarget t => TextureQuery t (Maybe DataRepresentation )
190
+ textureDepthType t level = makeGettableStateVar $ getDataRepr t level TextureDepthType
191
+
155
192
getTexLevelParameteriNoProxy :: QueryableTextureTarget t => (GLint -> a ) -> t -> Level -> TexLevelParameter -> IO a
156
193
getTexLevelParameteriNoProxy f = getTexLevelParameteri f . marshalQueryableTextureTarget
157
194
0 commit comments