Skip to content

Commit 35c5192

Browse files
committed
Added support for ARB_texture_float extension.
1 parent 17b0d5c commit 35c5192

File tree

4 files changed

+80
-28
lines changed

4 files changed

+80
-28
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
3.0.2.0
22
-------
3-
* Added `PixelInternalFormat` constructors for S3_s3tc and EXT_texture_compression_s3tc extensions.
3+
* Added `PixelInternalFormat` constructors for S3_s3tc, EXT_texture_compression_s3tc, and ARB_texture_float extensions.
44

55
3.0.1.0
66
-------

src/Graphics/Rendering/OpenGL/GL/DataType.hs

Lines changed: 17 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
module Graphics.Rendering.OpenGL.GL.DataType (
1717
DataType(..), marshalDataType, unmarshalDataType,
18-
DataTypeType(..), marshalDataTypeType, unmarshalDataTypeType
18+
DataRepresentation(..), unmarshalDataRepresentation
1919
) where
2020

2121
import Graphics.GL
@@ -126,29 +126,20 @@ unmarshalDataType x
126126
| x == GL_4_BYTES = FourBytes
127127
| otherwise = error ("unmarshalDataType: illegal value " ++ show x)
128128

129-
data DataTypeType
130-
= TNone
131-
| TSignedNormalized
132-
| TUnsignedNormalized
133-
| TFloat
134-
| TInt
135-
| TUnsignedInt
136-
137-
marshalDataTypeType :: DataTypeType -> GLenum
138-
marshalDataTypeType x = case x of
139-
TNone -> GL_NONE
140-
TSignedNormalized -> GL_SIGNED_NORMALIZED
141-
TUnsignedNormalized -> GL_UNSIGNED_NORMALIZED
142-
TFloat -> GL_FLOAT
143-
TInt -> GL_INT
144-
TUnsignedInt -> GL_UNSIGNED_INT
129+
data DataRepresentation
130+
= SignedNormalizedRepresentation
131+
| UnsignedNormalizedRepresentation
132+
| FloatRepresentation
133+
| IntRepresentation
134+
| UnsignedIntRepresentation
135+
deriving ( Eq, Ord, Show )
145136

146-
unmarshalDataTypeType :: GLenum -> DataTypeType
147-
unmarshalDataTypeType x
148-
| x == GL_NONE = TNone
149-
| x == GL_SIGNED_NORMALIZED = TSignedNormalized
150-
| x == GL_UNSIGNED_NORMALIZED = TUnsignedNormalized
151-
| x == GL_FLOAT = TFloat
152-
| x == GL_INT = TInt
153-
| x == GL_UNSIGNED_INT = TUnsignedInt
154-
| otherwise = error $ "unmarshalDataTypeType: illegal value " ++ show x
137+
unmarshalDataRepresentation :: GLenum -> Maybe DataRepresentation
138+
unmarshalDataRepresentation x
139+
| x == GL_SIGNED_NORMALIZED = Just SignedNormalizedRepresentation
140+
| x == GL_UNSIGNED_NORMALIZED = Just UnsignedNormalizedRepresentation
141+
| x == GL_FLOAT = Just FloatRepresentation
142+
| x == GL_INT = Just IntRepresentation
143+
| x == GL_UNSIGNED_INT = Just UnsignedIntRepresentation
144+
| x == GL_NONE = Nothing
145+
| otherwise = error $ "unmarshalDataRepresentation: illegal value " ++ show x

src/Graphics/Rendering/OpenGL/GL/Texturing/PixelInternalFormat.hs

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,14 @@ data PixelInternalFormat =
143143
| CompressedRGBAS3TCDXT3
144144
| CompressedRGBAS3TCDXT5
145145
| CompressedRGBS3TCDXT1
146+
| Alpha32F
147+
| Intensity32F
148+
| Luminance32F
149+
| LuminanceAlpha32F
150+
| Alpha16F
151+
| Intensity16F
152+
| Luminance16F
153+
| LuminanceAlpha16F
146154
deriving ( Eq, Ord, Show )
147155

148156
marshalPixelInternalFormat :: PixelInternalFormat -> GLint
@@ -267,6 +275,14 @@ marshalPixelInternalFormat x = fromIntegral $ case x of
267275
CompressedRGBAS3TCDXT3 -> GL_COMPRESSED_RGBA_S3TC_DXT3_EXT
268276
CompressedRGBAS3TCDXT5 -> GL_COMPRESSED_RGBA_S3TC_DXT5_EXT
269277
CompressedRGBS3TCDXT1 -> GL_COMPRESSED_RGB_S3TC_DXT1_EXT
278+
Alpha32F -> GL_ALPHA32F_ARB
279+
Intensity32F -> GL_INTENSITY32F_ARB
280+
Luminance32F -> GL_LUMINANCE32F_ARB
281+
LuminanceAlpha32F -> GL_LUMINANCE_ALPHA32F_ARB
282+
Alpha16F -> GL_ALPHA16F_ARB
283+
Intensity16F -> GL_INTENSITY16F_ARB
284+
Luminance16F -> GL_LUMINANCE16F_ARB
285+
LuminanceAlpha16F -> GL_LUMINANCE_ALPHA16F_ARB
270286

271287
-- *sigh* The OpenGL API is sometimes a bit creative in its usage of types...
272288
marshalPixelInternalFormat' :: PixelInternalFormat -> GLenum
@@ -389,6 +405,14 @@ unmarshalPixelInternalFormat x
389405
| y == GL_COMPRESSED_RGBA_S3TC_DXT3_EXT = CompressedRGBAS3TCDXT3
390406
| y == GL_COMPRESSED_RGBA_S3TC_DXT5_EXT = CompressedRGBAS3TCDXT5
391407
| y == GL_COMPRESSED_RGB_S3TC_DXT1_EXT = CompressedRGBS3TCDXT1
408+
| y == GL_ALPHA32F_ARB = Alpha32F
409+
| y == GL_INTENSITY32F_ARB = Intensity32F
410+
| y == GL_LUMINANCE32F_ARB = Luminance32F
411+
| y == GL_LUMINANCE_ALPHA32F_ARB = LuminanceAlpha32F
412+
| y == GL_ALPHA16F_ARB = Alpha16F
413+
| y == GL_INTENSITY16F_ARB = Intensity16F
414+
| y == GL_LUMINANCE16F_ARB = Luminance16F
415+
| y == GL_LUMINANCE_ALPHA16F_ARB = LuminanceAlpha16F
392416
-- legacy values
393417
| y == 1 = Luminance'
394418
| y == 2 = LuminanceAlpha'

src/Graphics/Rendering/OpenGL/GL/Texturing/Queries.hs

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,14 @@ module Graphics.Rendering.OpenGL.GL.Texturing.Queries (
1616
TextureQuery, textureInternalFormat, textureSize1D, textureSize2D,
1717
textureSize3D, textureBorder, textureRGBASizes, textureSharedSize,
1818
textureIntensitySize, textureLuminanceSize, textureIndexSize,
19-
textureDepthBits, textureCompressedImageSize, textureProxyOK
19+
textureDepthBits, textureCompressedImageSize, textureProxyOK,
20+
textureRGBATypes, textureIntensityType, textureLuminanceType, textureDepthType
2021
) where
2122

2223
import Control.Monad
2324
import Data.StateVar
2425
import Foreign.Marshal.Utils
26+
import Graphics.Rendering.OpenGL.GL.DataType
2527
import Graphics.Rendering.OpenGL.GL.GLboolean
2628
import Graphics.Rendering.OpenGL.GL.PeekPoke
2729
import Graphics.Rendering.OpenGL.GL.PixelRectangles
@@ -50,6 +52,13 @@ data TexLevelParameter =
5052
| TextureCompressedImageSize
5153
| TextureCompressed
5254
| TextureSharedSize
55+
| TextureRedType
56+
| TextureGreenType
57+
| TextureBlueType
58+
| TextureAlphaType
59+
| TextureLuminanceType
60+
| TextureIntensityType
61+
| TextureDepthType
5362

5463
marshalTexLevelParameter :: TexLevelParameter -> GLenum
5564
marshalTexLevelParameter x = case x of
@@ -69,6 +78,13 @@ marshalTexLevelParameter x = case x of
6978
TextureCompressedImageSize -> GL_TEXTURE_COMPRESSED_IMAGE_SIZE
7079
TextureCompressed -> GL_TEXTURE_COMPRESSED
7180
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
7288

7389
--------------------------------------------------------------------------------
7490

@@ -152,6 +168,27 @@ textureProxyOK t level =
152168
makeGettableStateVar $
153169
getTexLevelParameteri unmarshalGLboolean (marshalParameterizedTextureTargetProxy t) level TextureWidth
154170

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+
155192
getTexLevelParameteriNoProxy :: QueryableTextureTarget t => (GLint -> a) -> t -> Level -> TexLevelParameter -> IO a
156193
getTexLevelParameteriNoProxy f = getTexLevelParameteri f . marshalQueryableTextureTarget
157194

0 commit comments

Comments
 (0)