@@ -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
3432import Foreign.Marshal.Array
35- import Foreign.Storable
3633import Graphics.Rendering.OpenGL.GL.ByteString
3734import Graphics.Rendering.OpenGL.GL.DataType
3835import Graphics.Rendering.OpenGL.GL.PrimitiveMode
3936import Graphics.Rendering.OpenGL.GL.QueryUtils
4037import Graphics.Rendering.OpenGL.GL.Shaders.Program
38+ import Graphics.Rendering.OpenGL.GL.Shaders.Variables
4139import Graphics.Rendering.OpenGL.GL.StateVar
4240import Graphics.Rendering.OpenGL.Raw
4341
@@ -49,9 +47,12 @@ beginTransformFeedback = glBeginTransformFeedback . marshalPrimitiveMode
4947endTransformFeedback :: IO ()
5048endTransformFeedback = 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
5657marshalTransformFeedbackBufferMode :: TransformFeedbackBufferMode -> GLenum
5758marshalTransformFeedbackBufferMode x = case x of
@@ -83,11 +84,6 @@ maxTransformFeedbackSeparateComponents :: GettableStateVar GLint
8384maxTransformFeedbackSeparateComponents = 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