Skip to content

Commit b8063d5

Browse files
committed
Simpler and more consistent transformFeedbackVaryings API.
1 parent a7ab76f commit b8063d5

File tree

4 files changed

+42
-43
lines changed

4 files changed

+42
-43
lines changed

Graphics/Rendering/OpenGL/GL/Shaders/Attribs.hs

+6-1
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,9 @@ bindAttribLocation (Program program) (AttribLocation location) name =
5353
--------------------------------------------------------------------------------
5454

5555
activeAttribs :: Program -> GettableStateVar [(GLint,VariableType,String)]
56-
activeAttribs = activeVars activeAttributes activeAttributeMaxLength glGetActiveAttrib
56+
activeAttribs =
57+
activeVars
58+
activeAttributes
59+
activeAttributeMaxLength
60+
glGetActiveAttrib
61+
unmarshalVariableType

Graphics/Rendering/OpenGL/GL/Shaders/Uniform.hs

+6-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,12 @@ uniformLocation (Program program) name =
5959
--------------------------------------------------------------------------------
6060

6161
activeUniforms :: Program -> GettableStateVar [(GLint,VariableType,String)]
62-
activeUniforms = activeVars numActiveUniforms activeUniformMaxLength glGetActiveUniform
62+
activeUniforms =
63+
activeVars
64+
numActiveUniforms
65+
activeUniformMaxLength
66+
glGetActiveUniform
67+
unmarshalVariableType
6368

6469
--------------------------------------------------------------------------------
6570

Graphics/Rendering/OpenGL/GL/Shaders/Variables.hs

+9-6
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,15 @@
1515
-----------------------------------------------------------------------------
1616

1717
module Graphics.Rendering.OpenGL.GL.Shaders.Variables (
18-
VariableType(..), activeVars
18+
VariableType(..), unmarshalVariableType, activeVars
1919
) where
2020

2121
import Control.Monad
2222
import Foreign.Marshal.Alloc
2323
import Foreign.Ptr
2424
import Foreign.Storable
2525
import Graphics.Rendering.OpenGL.GL.ByteString
26+
import Graphics.Rendering.OpenGL.GL.PeekPoke
2627
import Graphics.Rendering.OpenGL.GL.Shaders.Program
2728
import Graphics.Rendering.OpenGL.GL.StateVar
2829
import Graphics.Rendering.OpenGL.Raw
@@ -142,8 +143,10 @@ unmarshalVariableType x
142143
activeVars :: (Program -> GettableStateVar GLuint)
143144
-> (Program -> GettableStateVar GLsizei)
144145
-> (GLuint -> GLuint -> GLsizei -> Ptr GLsizei -> Ptr GLint -> Ptr GLenum -> Ptr GLchar -> IO ())
145-
-> Program -> GettableStateVar [(GLint,VariableType,String)]
146-
activeVars numVars maxLength getter p@(Program program) =
146+
-> (GLenum -> a)
147+
-> Program
148+
-> GettableStateVar [(GLint,a,String)]
149+
activeVars numVars maxLength getter unmarshalType p@(Program program) =
147150
makeGettableStateVar $ do
148151
numActiveVars <- get (numVars p)
149152
maxLen <- get (maxLength p)
@@ -155,6 +158,6 @@ activeVars numVars maxLength getter p@(Program program) =
155158
n <- createAndTrimByteString maxLen $ \nameBuf -> do
156159
getter program i maxLen nameLengthBuf sizeBuf typeBuf nameBuf
157160
peek nameLengthBuf
158-
s <- peek sizeBuf
159-
t <- peek typeBuf
160-
return (s, unmarshalVariableType t, unpackUtf8 n)
161+
s <- peek1 fromIntegral sizeBuf
162+
t <- peek1 unmarshalType typeBuf
163+
return (s, t, unpackUtf8 n)

Graphics/Rendering/OpenGL/GL/TransformFeedback.hs

+21-35
Original file line numberDiff line numberDiff line change
@@ -20,24 +20,22 @@ module Graphics.Rendering.OpenGL.GL.TransformFeedback (
2020

2121
-- * Shader related
2222
transformFeedbackBufferMode,
23-
VaryingIndex, MaxLength,
24-
getTransformFeedbackVaryings, setTransformFeedbackVaryings,
25-
getTransformFeedbackVarying, getTransformFeedbackVaryingMaxLength,
23+
transformFeedbackVaryings,
24+
setTransformFeedbackVaryings,
2625

2726
-- * limits
2827
maxTransformFeedbackSeparateAttribs,
2928
maxTransformFeedbackInterleavedComponents,
3029
maxTransformFeedbackSeparateComponents
3130
) where
3231

33-
import Foreign.Marshal.Alloc
3432
import Foreign.Marshal.Array
35-
import Foreign.Storable
3633
import Graphics.Rendering.OpenGL.GL.ByteString
3734
import Graphics.Rendering.OpenGL.GL.DataType
3835
import Graphics.Rendering.OpenGL.GL.PrimitiveMode
3936
import Graphics.Rendering.OpenGL.GL.QueryUtils
4037
import Graphics.Rendering.OpenGL.GL.Shaders.Program
38+
import Graphics.Rendering.OpenGL.GL.Shaders.Variables
4139
import Graphics.Rendering.OpenGL.GL.StateVar
4240
import Graphics.Rendering.OpenGL.Raw
4341

@@ -49,9 +47,12 @@ beginTransformFeedback = glBeginTransformFeedback . marshalPrimitiveMode
4947
endTransformFeedback :: IO ()
5048
endTransformFeedback = glEndTransformFeedback
5149

50+
--------------------------------------------------------------------------------
5251

53-
--TranformFeedbackBuffer mode
54-
data TransformFeedbackBufferMode = InterleavedAttribs | SeperateAttribs
52+
data TransformFeedbackBufferMode =
53+
InterleavedAttribs
54+
| SeperateAttribs
55+
deriving ( Eq, Ord, Show )
5556

5657
marshalTransformFeedbackBufferMode :: TransformFeedbackBufferMode -> GLenum
5758
marshalTransformFeedbackBufferMode x = case x of
@@ -83,11 +84,6 @@ maxTransformFeedbackSeparateComponents :: GettableStateVar GLint
8384
maxTransformFeedbackSeparateComponents = makeGettableStateVar $
8485
getInteger1 fromIntegral GetMaxTransformFeedbackSeparateComponents
8586

86-
-----------------------------------------------------------------------------
87-
88-
type VaryingIndex = GLuint
89-
type MaxLength = GLsizei
90-
9187
--------------------------------------------------------------------------------
9288

9389
-- | Set all the transform feedbacks varyings for this program
@@ -109,30 +105,20 @@ transformFeedbackBufferMode = programVar1
109105

110106
-- | The number of varyings that are currently recorded when in
111107
-- transform feedback mode
112-
getTransformFeedbackVaryings :: Program -> GettableStateVar GLuint
113-
getTransformFeedbackVaryings
114-
= programVar1 fromIntegral TransformFeedbackVaryings
108+
numTransformFeedbackVaryings :: Program -> GettableStateVar GLuint
109+
numTransformFeedbackVaryings =
110+
programVar1 fromIntegral TransformFeedbackVaryings
115111

116112
-- | The maximum length of a varying's name for transform feedback mode
117-
getTransformFeedbackVaryingMaxLength :: Program -> GettableStateVar GLuint
118-
getTransformFeedbackVaryingMaxLength
113+
transformFeedbackVaryingMaxLength :: Program -> GettableStateVar GLsizei
114+
transformFeedbackVaryingMaxLength
119115
= programVar1 fromIntegral TransformFeedbackVaryingMaxLength
120116

121-
-- | Get the name, datatype and size of a single transform feedback
122-
-- varying.
123-
getTransformFeedbackVarying :: Program
124-
-> VaryingIndex -- ^ the index in a previous array of names of
125-
-- setTransformFeedbackVaryings
126-
-> MaxLength -- ^ the maximum length of the returned string
127-
-> IO (String, DataType, GLsizei) -- ^ The name of the varying, it's type
128-
-- and size
129-
getTransformFeedbackVarying (Program program) vi ml = do
130-
alloca $ \nameLengthBuf ->
131-
alloca $ \sizeBuf ->
132-
alloca $ \typeBuf -> do
133-
n <- createAndTrimByteString ml $ \nameBuf -> do
134-
glGetTransformFeedbackVarying program vi ml nameLengthBuf sizeBuf typeBuf nameBuf
135-
peek nameLengthBuf
136-
s <- peek sizeBuf
137-
d <- peek typeBuf
138-
return (unpackUtf8 n, unmarshalDataType d, s)
117+
-- | The name, datatype and size of the transform feedback varyings.
118+
transformFeedbackVaryings :: Program -> GettableStateVar [(GLint, DataType, String)]
119+
transformFeedbackVaryings =
120+
activeVars
121+
numTransformFeedbackVaryings
122+
transformFeedbackVaryingMaxLength
123+
glGetTransformFeedbackVarying
124+
unmarshalDataType

0 commit comments

Comments
 (0)