module Graphics.Rendering.OpenGL.GL.TransformFeedback (
beginTransformFeedback, endTransformFeedback,
TransformFeedbackBufferMode(..), marshalTransformFeedbackBufferMode,
unmarshalTransformFeedbackBufferMode,
transformFeedbackBufferMode,
transformFeedbackVaryings,
setTransformFeedbackVaryings,
maxTransformFeedbackSeparateAttribs,
maxTransformFeedbackInterleavedComponents,
maxTransformFeedbackSeparateComponents
) where
import Data.StateVar
import Foreign.Marshal.Array
import Graphics.Rendering.OpenGL.GL.ByteString
import Graphics.Rendering.OpenGL.GL.DataType
import Graphics.Rendering.OpenGL.GL.PrimitiveMode
import Graphics.Rendering.OpenGL.GL.PrimitiveModeInternal
import Graphics.Rendering.OpenGL.GL.QueryUtils
import Graphics.Rendering.OpenGL.GL.Shaders.Program
import Graphics.Rendering.OpenGL.GL.Shaders.Variables
import Graphics.GL
beginTransformFeedback :: PrimitiveMode -> IO ()
beginTransformFeedback :: PrimitiveMode -> IO ()
beginTransformFeedback = forall (m :: * -> *). MonadIO m => GLuint -> m ()
glBeginTransformFeedback forall b c a. (b -> c) -> (a -> b) -> a -> c
. PrimitiveMode -> GLuint
marshalPrimitiveMode
endTransformFeedback :: IO ()
endTransformFeedback :: IO ()
endTransformFeedback = forall (m :: * -> *). MonadIO m => m ()
glEndTransformFeedback
data TransformFeedbackBufferMode =
InterleavedAttribs
| SeparateAttribs
| SeperateAttribs
deriving ( TransformFeedbackBufferMode -> TransformFeedbackBufferMode -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: TransformFeedbackBufferMode -> TransformFeedbackBufferMode -> Bool
$c/= :: TransformFeedbackBufferMode -> TransformFeedbackBufferMode -> Bool
== :: TransformFeedbackBufferMode -> TransformFeedbackBufferMode -> Bool
$c== :: TransformFeedbackBufferMode -> TransformFeedbackBufferMode -> Bool
Eq, Eq TransformFeedbackBufferMode
TransformFeedbackBufferMode -> TransformFeedbackBufferMode -> Bool
TransformFeedbackBufferMode
-> TransformFeedbackBufferMode -> Ordering
TransformFeedbackBufferMode
-> TransformFeedbackBufferMode -> TransformFeedbackBufferMode
forall a.
Eq a
-> (a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
min :: TransformFeedbackBufferMode
-> TransformFeedbackBufferMode -> TransformFeedbackBufferMode
$cmin :: TransformFeedbackBufferMode
-> TransformFeedbackBufferMode -> TransformFeedbackBufferMode
max :: TransformFeedbackBufferMode
-> TransformFeedbackBufferMode -> TransformFeedbackBufferMode
$cmax :: TransformFeedbackBufferMode
-> TransformFeedbackBufferMode -> TransformFeedbackBufferMode
>= :: TransformFeedbackBufferMode -> TransformFeedbackBufferMode -> Bool
$c>= :: TransformFeedbackBufferMode -> TransformFeedbackBufferMode -> Bool
> :: TransformFeedbackBufferMode -> TransformFeedbackBufferMode -> Bool
$c> :: TransformFeedbackBufferMode -> TransformFeedbackBufferMode -> Bool
<= :: TransformFeedbackBufferMode -> TransformFeedbackBufferMode -> Bool
$c<= :: TransformFeedbackBufferMode -> TransformFeedbackBufferMode -> Bool
< :: TransformFeedbackBufferMode -> TransformFeedbackBufferMode -> Bool
$c< :: TransformFeedbackBufferMode -> TransformFeedbackBufferMode -> Bool
compare :: TransformFeedbackBufferMode
-> TransformFeedbackBufferMode -> Ordering
$ccompare :: TransformFeedbackBufferMode
-> TransformFeedbackBufferMode -> Ordering
Ord, Int -> TransformFeedbackBufferMode -> ShowS
[TransformFeedbackBufferMode] -> ShowS
TransformFeedbackBufferMode -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TransformFeedbackBufferMode] -> ShowS
$cshowList :: [TransformFeedbackBufferMode] -> ShowS
show :: TransformFeedbackBufferMode -> String
$cshow :: TransformFeedbackBufferMode -> String
showsPrec :: Int -> TransformFeedbackBufferMode -> ShowS
$cshowsPrec :: Int -> TransformFeedbackBufferMode -> ShowS
Show )
{-# DEPRECATED SeperateAttribs "Use 'SeparateAttribs' instead." #-}
marshalTransformFeedbackBufferMode :: TransformFeedbackBufferMode -> GLenum
marshalTransformFeedbackBufferMode :: TransformFeedbackBufferMode -> GLuint
marshalTransformFeedbackBufferMode TransformFeedbackBufferMode
x = case TransformFeedbackBufferMode
x of
TransformFeedbackBufferMode
InterleavedAttribs -> GLuint
GL_INTERLEAVED_ATTRIBS
TransformFeedbackBufferMode
SeparateAttribs -> GLuint
GL_SEPARATE_ATTRIBS
TransformFeedbackBufferMode
SeperateAttribs -> GLuint
GL_SEPARATE_ATTRIBS
unmarshalTransformFeedbackBufferMode :: GLenum -> TransformFeedbackBufferMode
unmarshalTransformFeedbackBufferMode :: GLuint -> TransformFeedbackBufferMode
unmarshalTransformFeedbackBufferMode GLuint
x
| GLuint
x forall a. Eq a => a -> a -> Bool
== GLuint
GL_INTERLEAVED_ATTRIBS = TransformFeedbackBufferMode
InterleavedAttribs
| GLuint
x forall a. Eq a => a -> a -> Bool
== GLuint
GL_SEPARATE_ATTRIBS = TransformFeedbackBufferMode
SeparateAttribs
| Bool
otherwise = forall a. HasCallStack => String -> a
error forall a b. (a -> b) -> a -> b
$ String
"unmarshalTransformFeedbackBufferMode: illegal value " forall a. [a] -> [a] -> [a]
++ forall a. Show a => a -> String
show GLuint
x
maxTransformFeedbackSeparateAttribs :: GettableStateVar GLint
maxTransformFeedbackSeparateAttribs :: GettableStateVar GLint
maxTransformFeedbackSeparateAttribs = forall a. IO a -> IO a
makeGettableStateVar forall a b. (a -> b) -> a -> b
$
forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
getInteger1 forall a b. (Integral a, Num b) => a -> b
fromIntegral PName1I
GetMaxTransformFeedbackSeparateAttribs
maxTransformFeedbackInterleavedComponents :: GettableStateVar GLint
maxTransformFeedbackInterleavedComponents :: GettableStateVar GLint
maxTransformFeedbackInterleavedComponents = forall a. IO a -> IO a
makeGettableStateVar forall a b. (a -> b) -> a -> b
$
forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
getInteger1 forall a b. (Integral a, Num b) => a -> b
fromIntegral PName1I
GetMaxTransformFeedbackInterleavedComponents
maxTransformFeedbackSeparateComponents :: GettableStateVar GLint
maxTransformFeedbackSeparateComponents :: GettableStateVar GLint
maxTransformFeedbackSeparateComponents = forall a. IO a -> IO a
makeGettableStateVar forall a b. (a -> b) -> a -> b
$
forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
getInteger1 forall a b. (Integral a, Num b) => a -> b
fromIntegral PName1I
GetMaxTransformFeedbackSeparateComponents
setTransformFeedbackVaryings :: Program -> [String]
-> TransformFeedbackBufferMode -> IO ()
setTransformFeedbackVaryings :: Program -> [String] -> TransformFeedbackBufferMode -> IO ()
setTransformFeedbackVaryings (Program GLuint
program) [String]
sts TransformFeedbackBufferMode
tfbm = do
[Ptr GLchar]
ptSts <- forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (\String
x -> forall a. String -> (Ptr GLchar -> IO a) -> IO a
withGLstring String
x forall (m :: * -> *) a. Monad m => a -> m a
return) [String]
sts
Ptr (Ptr GLchar)
stsPtrs <- forall a. Storable a => [a] -> IO (Ptr a)
newArray [Ptr GLchar]
ptSts
forall (m :: * -> *).
MonadIO m =>
GLuint -> GLint -> Ptr (Ptr GLchar) -> GLuint -> m ()
glTransformFeedbackVaryings GLuint
program (forall a b. (Integral a, Num b) => a -> b
fromIntegral forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (t :: * -> *) a. Foldable t => t a -> Int
length forall a b. (a -> b) -> a -> b
$ [String]
sts) Ptr (Ptr GLchar)
stsPtrs
(TransformFeedbackBufferMode -> GLuint
marshalTransformFeedbackBufferMode TransformFeedbackBufferMode
tfbm)
transformFeedbackBufferMode
:: Program -> GettableStateVar TransformFeedbackBufferMode
transformFeedbackBufferMode :: Program -> GettableStateVar TransformFeedbackBufferMode
transformFeedbackBufferMode = forall a.
(GLint -> a) -> GetProgramPName -> Program -> GettableStateVar a
programVar1
(GLuint -> TransformFeedbackBufferMode
unmarshalTransformFeedbackBufferMode forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral)
GetProgramPName
TransformFeedbackBufferMode
numTransformFeedbackVaryings :: Program -> GettableStateVar GLuint
numTransformFeedbackVaryings :: Program -> GettableStateVar GLuint
numTransformFeedbackVaryings =
forall a.
(GLint -> a) -> GetProgramPName -> Program -> GettableStateVar a
programVar1 forall a b. (Integral a, Num b) => a -> b
fromIntegral GetProgramPName
TransformFeedbackVaryings
transformFeedbackVaryingMaxLength :: Program -> GettableStateVar GLsizei
transformFeedbackVaryingMaxLength :: Program -> GettableStateVar GLint
transformFeedbackVaryingMaxLength
= forall a.
(GLint -> a) -> GetProgramPName -> Program -> GettableStateVar a
programVar1 forall a b. (Integral a, Num b) => a -> b
fromIntegral GetProgramPName
TransformFeedbackVaryingMaxLength
transformFeedbackVaryings :: Program -> GettableStateVar [(GLint, DataType, String)]
transformFeedbackVaryings :: Program -> GettableStateVar [(GLint, DataType, String)]
transformFeedbackVaryings =
forall a.
(Program -> GettableStateVar GLuint)
-> (Program -> GettableStateVar GLint)
-> (GLuint
-> GLuint
-> GLint
-> Ptr GLint
-> Ptr GLint
-> Ptr GLuint
-> Ptr GLchar
-> IO ())
-> (GLuint -> a)
-> Program
-> GettableStateVar [(GLint, a, String)]
activeVars
Program -> GettableStateVar GLuint
numTransformFeedbackVaryings
Program -> GettableStateVar GLint
transformFeedbackVaryingMaxLength
forall (m :: * -> *).
MonadIO m =>
GLuint
-> GLuint
-> GLint
-> Ptr GLint
-> Ptr GLint
-> Ptr GLuint
-> Ptr GLchar
-> m ()
glGetTransformFeedbackVarying
GLuint -> DataType
unmarshalDataType