module Graphics.Rendering.OpenGL.GL.PrimitiveMode (
PrimitiveMode(..),
patchVertices, maxPatchVertices,
patchDefaultOuterLevel, patchDefaultInnerLevel, maxTessGenLevel
) where
import Data.StateVar
import Foreign.Marshal.Array
import Graphics.Rendering.OpenGL.GL.PeekPoke
import Graphics.Rendering.OpenGL.GL.QueryUtils.PName
import Graphics.GL
data PrimitiveMode =
Points
| Lines
| LineLoop
| LineStrip
| Triangles
| TriangleStrip
| TriangleFan
| Quads
| QuadStrip
| Polygon
| Patches
deriving ( PrimitiveMode -> PrimitiveMode -> Bool
(PrimitiveMode -> PrimitiveMode -> Bool)
-> (PrimitiveMode -> PrimitiveMode -> Bool) -> Eq PrimitiveMode
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: PrimitiveMode -> PrimitiveMode -> Bool
== :: PrimitiveMode -> PrimitiveMode -> Bool
$c/= :: PrimitiveMode -> PrimitiveMode -> Bool
/= :: PrimitiveMode -> PrimitiveMode -> Bool
Eq, Eq PrimitiveMode
Eq PrimitiveMode
-> (PrimitiveMode -> PrimitiveMode -> Ordering)
-> (PrimitiveMode -> PrimitiveMode -> Bool)
-> (PrimitiveMode -> PrimitiveMode -> Bool)
-> (PrimitiveMode -> PrimitiveMode -> Bool)
-> (PrimitiveMode -> PrimitiveMode -> Bool)
-> (PrimitiveMode -> PrimitiveMode -> PrimitiveMode)
-> (PrimitiveMode -> PrimitiveMode -> PrimitiveMode)
-> Ord PrimitiveMode
PrimitiveMode -> PrimitiveMode -> Bool
PrimitiveMode -> PrimitiveMode -> Ordering
PrimitiveMode -> PrimitiveMode -> PrimitiveMode
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
$ccompare :: PrimitiveMode -> PrimitiveMode -> Ordering
compare :: PrimitiveMode -> PrimitiveMode -> Ordering
$c< :: PrimitiveMode -> PrimitiveMode -> Bool
< :: PrimitiveMode -> PrimitiveMode -> Bool
$c<= :: PrimitiveMode -> PrimitiveMode -> Bool
<= :: PrimitiveMode -> PrimitiveMode -> Bool
$c> :: PrimitiveMode -> PrimitiveMode -> Bool
> :: PrimitiveMode -> PrimitiveMode -> Bool
$c>= :: PrimitiveMode -> PrimitiveMode -> Bool
>= :: PrimitiveMode -> PrimitiveMode -> Bool
$cmax :: PrimitiveMode -> PrimitiveMode -> PrimitiveMode
max :: PrimitiveMode -> PrimitiveMode -> PrimitiveMode
$cmin :: PrimitiveMode -> PrimitiveMode -> PrimitiveMode
min :: PrimitiveMode -> PrimitiveMode -> PrimitiveMode
Ord, Int -> PrimitiveMode -> ShowS
[PrimitiveMode] -> ShowS
PrimitiveMode -> String
(Int -> PrimitiveMode -> ShowS)
-> (PrimitiveMode -> String)
-> ([PrimitiveMode] -> ShowS)
-> Show PrimitiveMode
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> PrimitiveMode -> ShowS
showsPrec :: Int -> PrimitiveMode -> ShowS
$cshow :: PrimitiveMode -> String
show :: PrimitiveMode -> String
$cshowList :: [PrimitiveMode] -> ShowS
showList :: [PrimitiveMode] -> ShowS
Show )
patchVertices :: StateVar GLsizei
patchVertices :: StateVar GLsizei
patchVertices =
IO GLsizei -> (GLsizei -> IO ()) -> StateVar GLsizei
forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar ((GLsizei -> GLsizei) -> PName1I -> IO GLsizei
forall p a. GetPName1I p => (GLsizei -> a) -> p -> IO a
forall a. (GLsizei -> a) -> PName1I -> IO a
getSizei1 GLsizei -> GLsizei
forall a. a -> a
id PName1I
GetPatchVertices)
(GLenum -> GLsizei -> IO ()
forall (m :: * -> *). MonadIO m => GLenum -> GLsizei -> m ()
glPatchParameteri GLenum
GL_PATCH_VERTICES (GLsizei -> IO ()) -> (GLsizei -> GLsizei) -> GLsizei -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GLsizei -> GLsizei
forall a b. (Integral a, Num b) => a -> b
fromIntegral)
maxPatchVertices :: GettableStateVar GLsizei
maxPatchVertices :: IO GLsizei
maxPatchVertices = IO GLsizei -> IO GLsizei
forall a. IO a -> IO a
makeGettableStateVar (IO GLsizei -> IO GLsizei) -> IO GLsizei -> IO GLsizei
forall a b. (a -> b) -> a -> b
$ (GLsizei -> GLsizei) -> PName1I -> IO GLsizei
forall p a. GetPName1I p => (GLsizei -> a) -> p -> IO a
forall a. (GLsizei -> a) -> PName1I -> IO a
getSizei1 GLsizei -> GLsizei
forall a. a -> a
id PName1I
GetMaxPatchVertices
patchDefaultOuterLevel :: StateVar (GLfloat, GLfloat, GLfloat, GLfloat)
patchDefaultOuterLevel :: StateVar (GLfloat, GLfloat, GLfloat, GLfloat)
patchDefaultOuterLevel =
IO (GLfloat, GLfloat, GLfloat, GLfloat)
-> ((GLfloat, GLfloat, GLfloat, GLfloat) -> IO ())
-> StateVar (GLfloat, GLfloat, GLfloat, GLfloat)
forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar
((GLfloat
-> GLfloat
-> GLfloat
-> GLfloat
-> (GLfloat, GLfloat, GLfloat, GLfloat))
-> PName4F -> IO (GLfloat, GLfloat, GLfloat, GLfloat)
forall p a.
GetPName4F p =>
(GLfloat -> GLfloat -> GLfloat -> GLfloat -> a) -> p -> IO a
forall a.
(GLfloat -> GLfloat -> GLfloat -> GLfloat -> a) -> PName4F -> IO a
getFloat4 (,,,) PName4F
GetPatchDefaultOuterLevel)
(\(GLfloat
l0, GLfloat
l1, GLfloat
l2, GLfloat
l3) -> Int -> (Ptr GLfloat -> IO ()) -> IO ()
forall a b. Storable a => Int -> (Ptr a -> IO b) -> IO b
allocaArray Int
4 ((Ptr GLfloat -> IO ()) -> IO ())
-> (Ptr GLfloat -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr GLfloat
ptr -> do
Ptr GLfloat -> GLfloat -> GLfloat -> GLfloat -> GLfloat -> IO ()
forall a. Storable a => Ptr a -> a -> a -> a -> a -> IO ()
poke4 Ptr GLfloat
ptr GLfloat
l0 GLfloat
l1 GLfloat
l2 GLfloat
l3
GLenum -> Ptr GLfloat -> IO ()
forall (m :: * -> *). MonadIO m => GLenum -> Ptr GLfloat -> m ()
glPatchParameterfv GLenum
GL_PATCH_DEFAULT_OUTER_LEVEL Ptr GLfloat
ptr)
patchDefaultInnerLevel :: StateVar (GLfloat, GLfloat)
patchDefaultInnerLevel :: StateVar (GLfloat, GLfloat)
patchDefaultInnerLevel =
IO (GLfloat, GLfloat)
-> ((GLfloat, GLfloat) -> IO ()) -> StateVar (GLfloat, GLfloat)
forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar
((GLfloat -> GLfloat -> (GLfloat, GLfloat))
-> PName2F -> IO (GLfloat, GLfloat)
forall p a. GetPName2F p => (GLfloat -> GLfloat -> a) -> p -> IO a
forall a. (GLfloat -> GLfloat -> a) -> PName2F -> IO a
getFloat2 (,) PName2F
GetPatchDefaultInnerLevel)
(\(GLfloat
l0, GLfloat
l1) -> Int -> (Ptr GLfloat -> IO ()) -> IO ()
forall a b. Storable a => Int -> (Ptr a -> IO b) -> IO b
allocaArray Int
2 ((Ptr GLfloat -> IO ()) -> IO ())
-> (Ptr GLfloat -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Ptr GLfloat
ptr -> do
Ptr GLfloat -> GLfloat -> GLfloat -> IO ()
forall a. Storable a => Ptr a -> a -> a -> IO ()
poke2 Ptr GLfloat
ptr GLfloat
l0 GLfloat
l1
GLenum -> Ptr GLfloat -> IO ()
forall (m :: * -> *). MonadIO m => GLenum -> Ptr GLfloat -> m ()
glPatchParameterfv GLenum
GL_PATCH_DEFAULT_INNER_LEVEL Ptr GLfloat
ptr)
maxTessGenLevel :: GettableStateVar GLsizei
maxTessGenLevel :: IO GLsizei
maxTessGenLevel = IO GLsizei -> IO GLsizei
forall a. IO a -> IO a
makeGettableStateVar (IO GLsizei -> IO GLsizei) -> IO GLsizei -> IO GLsizei
forall a b. (a -> b) -> a -> b
$ (GLsizei -> GLsizei) -> PName1I -> IO GLsizei
forall p a. GetPName1I p => (GLsizei -> a) -> p -> IO a
forall a. (GLsizei -> a) -> PName1I -> IO a
getSizei1 GLsizei -> GLsizei
forall a. a -> a
id PName1I
GetMaxTessGenLevel