@@ -20,24 +20,22 @@ module Graphics.Rendering.OpenGL.GL.TransformFeedback (
20
20
21
21
-- * Shader related
22
22
transformFeedbackBufferMode ,
23
- VaryingIndex , MaxLength ,
24
- getTransformFeedbackVaryings , setTransformFeedbackVaryings ,
25
- getTransformFeedbackVarying , getTransformFeedbackVaryingMaxLength ,
23
+ transformFeedbackVaryings ,
24
+ setTransformFeedbackVaryings ,
26
25
27
26
-- * limits
28
27
maxTransformFeedbackSeparateAttribs ,
29
28
maxTransformFeedbackInterleavedComponents ,
30
29
maxTransformFeedbackSeparateComponents
31
30
) where
32
31
33
- import Foreign.Marshal.Alloc
34
32
import Foreign.Marshal.Array
35
- import Foreign.Storable
36
33
import Graphics.Rendering.OpenGL.GL.ByteString
37
34
import Graphics.Rendering.OpenGL.GL.DataType
38
35
import Graphics.Rendering.OpenGL.GL.PrimitiveMode
39
36
import Graphics.Rendering.OpenGL.GL.QueryUtils
40
37
import Graphics.Rendering.OpenGL.GL.Shaders.Program
38
+ import Graphics.Rendering.OpenGL.GL.Shaders.Variables
41
39
import Graphics.Rendering.OpenGL.GL.StateVar
42
40
import Graphics.Rendering.OpenGL.Raw
43
41
@@ -49,9 +47,12 @@ beginTransformFeedback = glBeginTransformFeedback . marshalPrimitiveMode
49
47
endTransformFeedback :: IO ()
50
48
endTransformFeedback = glEndTransformFeedback
51
49
50
+ --------------------------------------------------------------------------------
52
51
53
- -- TranformFeedbackBuffer mode
54
- data TransformFeedbackBufferMode = InterleavedAttribs | SeperateAttribs
52
+ data TransformFeedbackBufferMode =
53
+ InterleavedAttribs
54
+ | SeperateAttribs
55
+ deriving ( Eq , Ord , Show )
55
56
56
57
marshalTransformFeedbackBufferMode :: TransformFeedbackBufferMode -> GLenum
57
58
marshalTransformFeedbackBufferMode x = case x of
@@ -83,11 +84,6 @@ maxTransformFeedbackSeparateComponents :: GettableStateVar GLint
83
84
maxTransformFeedbackSeparateComponents = makeGettableStateVar $
84
85
getInteger1 fromIntegral GetMaxTransformFeedbackSeparateComponents
85
86
86
- -----------------------------------------------------------------------------
87
-
88
- type VaryingIndex = GLuint
89
- type MaxLength = GLsizei
90
-
91
87
--------------------------------------------------------------------------------
92
88
93
89
-- | Set all the transform feedbacks varyings for this program
@@ -109,30 +105,20 @@ transformFeedbackBufferMode = programVar1
109
105
110
106
-- | The number of varyings that are currently recorded when in
111
107
-- 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
115
111
116
112
-- | 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
119
115
= programVar1 fromIntegral TransformFeedbackVaryingMaxLength
120
116
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