module Graphics.Rendering.OpenGL.GL.Framebuffer (
BufferMode(..),
drawBuffer, namedFramebufferDrawBuffer,
drawBuffers, namedFramebufferDrawBuffers,
DrawBufferIndex, drawBufferi,
maxDrawBuffers,
indexMask, colorMask, colorMaski, depthMask,
stencilMask, stencilMaskSeparate,
ClearBuffer(..), clear,
clearColor, clearIndex, clearDepth, clearDepthf, clearStencil, clearAccum,
ClearBufferCommand(..), clearBuffer, clearNamedFramebuffer,
invalidateSubFramebuffer, invalidateNamedFramebufferSubData,
invalidateFramebuffer, invalidateNamedFramebufferData,
AccumOp(..), accum,
auxBuffers, doubleBuffer, stereoBuffer,
rgbaBits, stencilBits, depthBits, accumBits, rgbaSignedComponents,
) where
import Control.Monad
import Data.Maybe
import Data.StateVar
import Foreign.Marshal.Array
import Foreign.Marshal.Utils
import Foreign.Ptr
import Graphics.Rendering.OpenGL.GL.BufferMode
import Graphics.Rendering.OpenGL.GL.Capability
import Graphics.Rendering.OpenGL.GL.CoordTrans
import Graphics.Rendering.OpenGL.GL.Face
import Graphics.Rendering.OpenGL.GL.FramebufferObjects.FramebufferObject
import Graphics.Rendering.OpenGL.GL.FramebufferObjects.FramebufferObjectAttachment
import Graphics.Rendering.OpenGL.GL.FramebufferObjects.FramebufferTarget
import Graphics.Rendering.OpenGL.GL.GLboolean
import Graphics.Rendering.OpenGL.GL.QueryUtils
import Graphics.Rendering.OpenGL.GL.VertexSpec
import Graphics.Rendering.OpenGL.GLU.ErrorsInternal
import Graphics.GL
drawBuffer :: StateVar BufferMode
drawBuffer :: StateVar BufferMode
drawBuffer = IO BufferMode -> (BufferMode -> IO ()) -> StateVar BufferMode
forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar IO BufferMode
getDrawBuffer BufferMode -> IO ()
setDrawBuffer
getDrawBuffer :: IO BufferMode
getDrawBuffer :: IO BufferMode
getDrawBuffer = GLint -> IO BufferMode
getDrawBufferi GLint
0
setDrawBuffer :: BufferMode -> IO ()
setDrawBuffer :: BufferMode -> IO ()
setDrawBuffer BufferMode
mode =
[BufferMode] -> ([GLenum] -> IO ()) -> IO ()
withBufferModes [BufferMode
mode] (([GLenum] -> IO ()) -> IO ()) -> ([GLenum] -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \[GLenum
m] ->
GLenum -> IO ()
forall (m :: * -> *). MonadIO m => GLenum -> m ()
glDrawBuffer GLenum
m
namedFramebufferDrawBuffer :: FramebufferObject -> SettableStateVar BufferMode
namedFramebufferDrawBuffer :: FramebufferObject -> SettableStateVar BufferMode
namedFramebufferDrawBuffer FramebufferObject
fbo =
(BufferMode -> IO ()) -> SettableStateVar BufferMode
forall a. (a -> IO ()) -> SettableStateVar a
makeSettableStateVar ((BufferMode -> IO ()) -> SettableStateVar BufferMode)
-> (BufferMode -> IO ()) -> SettableStateVar BufferMode
forall a b. (a -> b) -> a -> b
$ \BufferMode
mode ->
[BufferMode] -> ([GLenum] -> IO ()) -> IO ()
withBufferModes [BufferMode
mode] (([GLenum] -> IO ()) -> IO ()) -> ([GLenum] -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \[GLenum
m] ->
GLenum -> GLenum -> IO ()
forall (m :: * -> *). MonadIO m => GLenum -> GLenum -> m ()
glNamedFramebufferDrawBuffer (FramebufferObject -> GLenum
framebufferID FramebufferObject
fbo) GLenum
m
drawBuffers :: StateVar [BufferMode]
drawBuffers :: StateVar [BufferMode]
drawBuffers = IO [BufferMode] -> ([BufferMode] -> IO ()) -> StateVar [BufferMode]
forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar IO [BufferMode]
getDrawBuffers [BufferMode] -> IO ()
setDrawBuffers
getDrawBuffers :: IO [BufferMode]
getDrawBuffers :: IO [BufferMode]
getDrawBuffers = do
GLint
n <- GettableStateVar GLint -> GettableStateVar GLint
forall t a (m :: * -> *). (HasGetter t a, MonadIO m) => t -> m a
forall (m :: * -> *).
MonadIO m =>
GettableStateVar GLint -> m GLint
get GettableStateVar GLint
maxDrawBuffers
(GLint -> IO BufferMode) -> [GLint] -> IO [BufferMode]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
forall (m :: * -> *) a b. Monad m => (a -> m b) -> [a] -> m [b]
mapM GLint -> IO BufferMode
getDrawBufferi [ GLint
0 .. GLint
nGLint -> GLint -> GLint
forall a. Num a => a -> a -> a
-GLint
1 ]
setDrawBuffers :: [BufferMode] -> IO ()
setDrawBuffers :: [BufferMode] -> IO ()
setDrawBuffers [BufferMode]
modes =
[BufferMode] -> ([GLenum] -> IO ()) -> IO ()
withBufferModes [BufferMode]
modes (([GLenum] -> IO ()) -> IO ()) -> ([GLenum] -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \[GLenum]
ms ->
[GLenum] -> (Int -> Ptr GLenum -> IO ()) -> IO ()
forall a b. Storable a => [a] -> (Int -> Ptr a -> IO b) -> IO b
withArrayLen [GLenum]
ms ((Int -> Ptr GLenum -> IO ()) -> IO ())
-> (Int -> Ptr GLenum -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Int
len ->
GLint -> Ptr GLenum -> IO ()
forall (m :: * -> *). MonadIO m => GLint -> Ptr GLenum -> m ()
glDrawBuffers (Int -> GLint
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
len)
namedFramebufferDrawBuffers :: FramebufferObject -> SettableStateVar [BufferMode]
namedFramebufferDrawBuffers :: FramebufferObject -> SettableStateVar [BufferMode]
namedFramebufferDrawBuffers FramebufferObject
fbo =
([BufferMode] -> IO ()) -> SettableStateVar [BufferMode]
forall a. (a -> IO ()) -> SettableStateVar a
makeSettableStateVar (([BufferMode] -> IO ()) -> SettableStateVar [BufferMode])
-> ([BufferMode] -> IO ()) -> SettableStateVar [BufferMode]
forall a b. (a -> b) -> a -> b
$ \[BufferMode]
modes ->
[BufferMode] -> ([GLenum] -> IO ()) -> IO ()
withBufferModes [BufferMode]
modes (([GLenum] -> IO ()) -> IO ()) -> ([GLenum] -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \[GLenum]
ms ->
[GLenum] -> (Int -> Ptr GLenum -> IO ()) -> IO ()
forall a b. Storable a => [a] -> (Int -> Ptr a -> IO b) -> IO b
withArrayLen [GLenum]
ms ((Int -> Ptr GLenum -> IO ()) -> IO ())
-> (Int -> Ptr GLenum -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Int
len ->
GLenum -> GLint -> Ptr GLenum -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLint -> Ptr GLenum -> m ()
glNamedFramebufferDrawBuffers (FramebufferObject -> GLenum
framebufferID FramebufferObject
fbo) (Int -> GLint
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
len)
withBufferModes :: [BufferMode] -> ([GLenum] -> IO ()) -> IO ()
withBufferModes :: [BufferMode] -> ([GLenum] -> IO ()) -> IO ()
withBufferModes [BufferMode]
modes [GLenum] -> IO ()
success
| (Maybe GLenum -> Bool) -> [Maybe GLenum] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all Maybe GLenum -> Bool
forall a. Maybe a -> Bool
isJust [Maybe GLenum]
ms = [GLenum] -> IO ()
success ([Maybe GLenum] -> [GLenum]
forall a. [Maybe a] -> [a]
catMaybes [Maybe GLenum]
ms)
| Bool
otherwise = IO ()
recordInvalidValue
where ms :: [Maybe GLenum]
ms = (BufferMode -> Maybe GLenum) -> [BufferMode] -> [Maybe GLenum]
forall a b. (a -> b) -> [a] -> [b]
map BufferMode -> Maybe GLenum
marshalBufferMode [BufferMode]
modes
type DrawBufferIndex = GLuint
drawBufferi :: DrawBufferIndex -> GettableStateVar BufferMode
drawBufferi :: GLenum -> IO BufferMode
drawBufferi = IO BufferMode -> IO BufferMode
forall a. IO a -> IO a
makeGettableStateVar (IO BufferMode -> IO BufferMode)
-> (GLenum -> IO BufferMode) -> GLenum -> IO BufferMode
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GLint -> IO BufferMode
getDrawBufferi (GLint -> IO BufferMode)
-> (GLenum -> GLint) -> GLenum -> IO BufferMode
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GLenum -> GLint
forall a b. (Integral a, Num b) => a -> b
fromIntegral
getDrawBufferi :: GLsizei -> IO BufferMode
getDrawBufferi :: GLint -> IO BufferMode
getDrawBufferi = (GLenum -> BufferMode) -> PName1I -> IO BufferMode
forall p a. GetPName1I p => (GLenum -> a) -> p -> IO a
forall a. (GLenum -> a) -> PName1I -> IO a
getEnum1 GLenum -> BufferMode
unmarshalBufferMode (PName1I -> IO BufferMode)
-> (GLint -> PName1I) -> GLint -> IO BufferMode
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GLint -> PName1I
GetDrawBufferN
maxDrawBuffers :: GettableStateVar GLsizei
maxDrawBuffers :: GettableStateVar GLint
maxDrawBuffers = GettableStateVar GLint -> GettableStateVar GLint
forall a. IO a -> IO a
makeGettableStateVar (GettableStateVar GLint -> GettableStateVar GLint)
-> GettableStateVar GLint -> GettableStateVar GLint
forall a b. (a -> b) -> a -> b
$ (GLint -> GLint) -> PName1I -> GettableStateVar GLint
forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
forall a. (GLint -> a) -> PName1I -> IO a
getSizei1 GLint -> GLint
forall a. a -> a
id PName1I
GetMaxDrawBuffers
indexMask :: StateVar GLuint
indexMask :: StateVar GLenum
indexMask =
IO GLenum -> (GLenum -> IO ()) -> StateVar GLenum
forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar ((GLint -> GLenum) -> PName1I -> IO GLenum
forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
forall a. (GLint -> a) -> PName1I -> IO a
getInteger1 GLint -> GLenum
forall a b. (Integral a, Num b) => a -> b
fromIntegral PName1I
GetIndexWritemask) GLenum -> IO ()
forall (m :: * -> *). MonadIO m => GLenum -> m ()
glIndexMask
colorMask :: StateVar (Color4 Capability)
colorMask :: StateVar (Color4 Capability)
colorMask =
IO (Color4 Capability)
-> (Color4 Capability -> IO ()) -> StateVar (Color4 Capability)
forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar
((GLboolean
-> GLboolean -> GLboolean -> GLboolean -> Color4 Capability)
-> PName4ISemiIndexed -> IO (Color4 Capability)
forall p a.
GetPName4I p =>
(GLboolean -> GLboolean -> GLboolean -> GLboolean -> a)
-> p -> IO a
forall a.
(GLboolean -> GLboolean -> GLboolean -> GLboolean -> a)
-> PName4ISemiIndexed -> IO a
getBoolean4 (\GLboolean
r GLboolean
g GLboolean
b GLboolean
a -> Capability
-> Capability -> Capability -> Capability -> Color4 Capability
forall a. a -> a -> a -> a -> Color4 a
Color4 (GLboolean -> Capability
unmarshalCapability GLboolean
r)
(GLboolean -> Capability
unmarshalCapability GLboolean
g)
(GLboolean -> Capability
unmarshalCapability GLboolean
b)
(GLboolean -> Capability
unmarshalCapability GLboolean
a))
PName4ISemiIndexed
GetColorWritemask)
(\(Color4 Capability
r Capability
g Capability
b Capability
a) -> GLboolean -> GLboolean -> GLboolean -> GLboolean -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLboolean -> GLboolean -> GLboolean -> GLboolean -> m ()
glColorMask (Capability -> GLboolean
marshalCapability Capability
r)
(Capability -> GLboolean
marshalCapability Capability
g)
(Capability -> GLboolean
marshalCapability Capability
b)
(Capability -> GLboolean
marshalCapability Capability
a))
colorMaski :: DrawBufferIndex -> StateVar (Color4 Capability)
colorMaski :: GLenum -> StateVar (Color4 Capability)
colorMaski GLenum
idx =
IO (Color4 Capability)
-> (Color4 Capability -> IO ()) -> StateVar (Color4 Capability)
forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar
((GLboolean
-> GLboolean -> GLboolean -> GLboolean -> Color4 Capability)
-> PName4ISemiIndexed -> GLenum -> IO (Color4 Capability)
forall p a.
GetIPName4I p =>
(GLboolean -> GLboolean -> GLboolean -> GLboolean -> a)
-> p -> GLenum -> IO a
forall a.
(GLboolean -> GLboolean -> GLboolean -> GLboolean -> a)
-> PName4ISemiIndexed -> GLenum -> IO a
getBoolean4i (\GLboolean
r GLboolean
g GLboolean
b GLboolean
a -> Capability
-> Capability -> Capability -> Capability -> Color4 Capability
forall a. a -> a -> a -> a -> Color4 a
Color4 (GLboolean -> Capability
unmarshalCapability GLboolean
r)
(GLboolean -> Capability
unmarshalCapability GLboolean
g)
(GLboolean -> Capability
unmarshalCapability GLboolean
b)
(GLboolean -> Capability
unmarshalCapability GLboolean
a))
PName4ISemiIndexed
GetColorWritemask GLenum
idx)
(\(Color4 Capability
r Capability
g Capability
b Capability
a) -> GLenum -> GLboolean -> GLboolean -> GLboolean -> GLboolean -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLboolean -> GLboolean -> GLboolean -> GLboolean -> m ()
glColorMaski GLenum
idx
(Capability -> GLboolean
marshalCapability Capability
r)
(Capability -> GLboolean
marshalCapability Capability
g)
(Capability -> GLboolean
marshalCapability Capability
b)
(Capability -> GLboolean
marshalCapability Capability
a))
depthMask :: StateVar Capability
depthMask :: StateVar Capability
depthMask = IO Capability -> (Capability -> IO ()) -> StateVar Capability
forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar ((GLboolean -> Capability) -> PName1I -> IO Capability
forall p a. GetPName1I p => (GLboolean -> a) -> p -> IO a
forall a. (GLboolean -> a) -> PName1I -> IO a
getBoolean1 GLboolean -> Capability
unmarshalCapability PName1I
GetDepthWritemask)
(GLboolean -> IO ()
forall (m :: * -> *). MonadIO m => GLboolean -> m ()
glDepthMask (GLboolean -> IO ())
-> (Capability -> GLboolean) -> Capability -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Capability -> GLboolean
marshalCapability)
stencilMask :: StateVar GLuint
stencilMask :: StateVar GLenum
stencilMask =
IO GLenum -> (GLenum -> IO ()) -> StateVar GLenum
forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar (StateVar GLenum -> IO GLenum
forall t a (m :: * -> *). (HasGetter t a, MonadIO m) => t -> m a
forall (m :: * -> *). MonadIO m => StateVar GLenum -> m GLenum
get (Face -> StateVar GLenum
stencilMaskSeparate Face
Front)) GLenum -> IO ()
forall (m :: * -> *). MonadIO m => GLenum -> m ()
glStencilMask
stencilMaskSeparate :: Face -> StateVar GLuint
stencilMaskSeparate :: Face -> StateVar GLenum
stencilMaskSeparate Face
face =
IO GLenum -> (GLenum -> IO ()) -> StateVar GLenum
forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar
(case Face
face of
Face
Front -> (GLint -> GLenum) -> PName1I -> IO GLenum
forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
forall a. (GLint -> a) -> PName1I -> IO a
getInteger1 GLint -> GLenum
forall a b. (Integral a, Num b) => a -> b
fromIntegral PName1I
GetStencilWritemask
Face
Back -> (GLint -> GLenum) -> PName1I -> IO GLenum
forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
forall a. (GLint -> a) -> PName1I -> IO a
getInteger1 GLint -> GLenum
forall a b. (Integral a, Num b) => a -> b
fromIntegral PName1I
GetStencilBackWritemask
Face
FrontAndBack -> do IO ()
recordInvalidEnum; GLenum -> IO GLenum
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return GLenum
0)
(GLenum -> GLenum -> IO ()
forall (m :: * -> *). MonadIO m => GLenum -> GLenum -> m ()
glStencilMaskSeparate (Face -> GLenum
marshalFace Face
face))
data ClearBuffer =
ColorBuffer
| AccumBuffer
| StencilBuffer
| DepthBuffer
deriving ( ClearBuffer -> ClearBuffer -> Bool
(ClearBuffer -> ClearBuffer -> Bool)
-> (ClearBuffer -> ClearBuffer -> Bool) -> Eq ClearBuffer
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ClearBuffer -> ClearBuffer -> Bool
== :: ClearBuffer -> ClearBuffer -> Bool
$c/= :: ClearBuffer -> ClearBuffer -> Bool
/= :: ClearBuffer -> ClearBuffer -> Bool
Eq, Eq ClearBuffer
Eq ClearBuffer
-> (ClearBuffer -> ClearBuffer -> Ordering)
-> (ClearBuffer -> ClearBuffer -> Bool)
-> (ClearBuffer -> ClearBuffer -> Bool)
-> (ClearBuffer -> ClearBuffer -> Bool)
-> (ClearBuffer -> ClearBuffer -> Bool)
-> (ClearBuffer -> ClearBuffer -> ClearBuffer)
-> (ClearBuffer -> ClearBuffer -> ClearBuffer)
-> Ord ClearBuffer
ClearBuffer -> ClearBuffer -> Bool
ClearBuffer -> ClearBuffer -> Ordering
ClearBuffer -> ClearBuffer -> ClearBuffer
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 :: ClearBuffer -> ClearBuffer -> Ordering
compare :: ClearBuffer -> ClearBuffer -> Ordering
$c< :: ClearBuffer -> ClearBuffer -> Bool
< :: ClearBuffer -> ClearBuffer -> Bool
$c<= :: ClearBuffer -> ClearBuffer -> Bool
<= :: ClearBuffer -> ClearBuffer -> Bool
$c> :: ClearBuffer -> ClearBuffer -> Bool
> :: ClearBuffer -> ClearBuffer -> Bool
$c>= :: ClearBuffer -> ClearBuffer -> Bool
>= :: ClearBuffer -> ClearBuffer -> Bool
$cmax :: ClearBuffer -> ClearBuffer -> ClearBuffer
max :: ClearBuffer -> ClearBuffer -> ClearBuffer
$cmin :: ClearBuffer -> ClearBuffer -> ClearBuffer
min :: ClearBuffer -> ClearBuffer -> ClearBuffer
Ord, Int -> ClearBuffer -> ShowS
[ClearBuffer] -> ShowS
ClearBuffer -> String
(Int -> ClearBuffer -> ShowS)
-> (ClearBuffer -> String)
-> ([ClearBuffer] -> ShowS)
-> Show ClearBuffer
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ClearBuffer -> ShowS
showsPrec :: Int -> ClearBuffer -> ShowS
$cshow :: ClearBuffer -> String
show :: ClearBuffer -> String
$cshowList :: [ClearBuffer] -> ShowS
showList :: [ClearBuffer] -> ShowS
Show )
marshalClearBuffer :: ClearBuffer -> GLbitfield
marshalClearBuffer :: ClearBuffer -> GLenum
marshalClearBuffer ClearBuffer
x = case ClearBuffer
x of
ClearBuffer
ColorBuffer -> GLenum
GL_COLOR_BUFFER_BIT
ClearBuffer
AccumBuffer -> GLenum
GL_ACCUM_BUFFER_BIT
ClearBuffer
StencilBuffer -> GLenum
GL_STENCIL_BUFFER_BIT
ClearBuffer
DepthBuffer -> GLenum
GL_DEPTH_BUFFER_BIT
clear :: [ClearBuffer] -> IO ()
clear :: [ClearBuffer] -> IO ()
clear = GLenum -> IO ()
forall (m :: * -> *). MonadIO m => GLenum -> m ()
glClear (GLenum -> IO ())
-> ([ClearBuffer] -> GLenum) -> [ClearBuffer] -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [GLenum] -> GLenum
forall a. Num a => [a] -> a
forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum ([GLenum] -> GLenum)
-> ([ClearBuffer] -> [GLenum]) -> [ClearBuffer] -> GLenum
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (ClearBuffer -> GLenum) -> [ClearBuffer] -> [GLenum]
forall a b. (a -> b) -> [a] -> [b]
map ClearBuffer -> GLenum
marshalClearBuffer
clearColor :: StateVar (Color4 GLfloat)
clearColor :: StateVar (Color4 GLfloat)
clearColor = IO (Color4 GLfloat)
-> (Color4 GLfloat -> IO ()) -> StateVar (Color4 GLfloat)
forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar ((GLfloat -> GLfloat -> GLfloat -> GLfloat -> Color4 GLfloat)
-> PName4F -> IO (Color4 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 GLfloat -> GLfloat -> GLfloat -> GLfloat -> Color4 GLfloat
forall a. a -> a -> a -> a -> Color4 a
Color4 PName4F
GetColorClearValue)
(\(Color4 GLfloat
r GLfloat
g GLfloat
b GLfloat
a) -> GLfloat -> GLfloat -> GLfloat -> GLfloat -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLfloat -> GLfloat -> GLfloat -> GLfloat -> m ()
glClearColor GLfloat
r GLfloat
g GLfloat
b GLfloat
a)
clearIndex :: StateVar (Index1 GLfloat)
clearIndex :: StateVar (Index1 GLfloat)
clearIndex = IO (Index1 GLfloat)
-> (Index1 GLfloat -> IO ()) -> StateVar (Index1 GLfloat)
forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar ((GLfloat -> Index1 GLfloat) -> PName1F -> IO (Index1 GLfloat)
forall p a. GetPName1F p => (GLfloat -> a) -> p -> IO a
forall a. (GLfloat -> a) -> PName1F -> IO a
getFloat1 GLfloat -> Index1 GLfloat
forall a. a -> Index1 a
Index1 PName1F
GetIndexClearValue)
(\(Index1 GLfloat
i) -> GLfloat -> IO ()
forall (m :: * -> *). MonadIO m => GLfloat -> m ()
glClearIndex GLfloat
i)
clearDepth :: StateVar GLdouble
clearDepth :: StateVar GLdouble
clearDepth = IO GLdouble -> (GLdouble -> IO ()) -> StateVar GLdouble
forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar ((GLdouble -> GLdouble) -> PName1F -> IO GLdouble
forall p a. GetPName1F p => (GLdouble -> a) -> p -> IO a
forall a. (GLdouble -> a) -> PName1F -> IO a
getDouble1 GLdouble -> GLdouble
forall a. a -> a
id PName1F
GetDepthClearValue) GLdouble -> IO ()
forall (m :: * -> *). MonadIO m => GLdouble -> m ()
glClearDepth
clearDepthf :: StateVar GLfloat
clearDepthf :: StateVar GLfloat
clearDepthf = IO GLfloat -> (GLfloat -> IO ()) -> StateVar GLfloat
forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar ((GLfloat -> GLfloat) -> PName1F -> IO GLfloat
forall p a. GetPName1F p => (GLfloat -> a) -> p -> IO a
forall a. (GLfloat -> a) -> PName1F -> IO a
getFloat1 GLfloat -> GLfloat
forall a. a -> a
id PName1F
GetDepthClearValue) GLfloat -> IO ()
forall (m :: * -> *). MonadIO m => GLfloat -> m ()
glClearDepthf
clearStencil :: StateVar GLint
clearStencil :: StateVar GLint
clearStencil = GettableStateVar GLint -> (GLint -> IO ()) -> StateVar GLint
forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar ((GLint -> GLint) -> PName1I -> GettableStateVar GLint
forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
forall a. (GLint -> a) -> PName1I -> IO a
getInteger1 GLint -> GLint
forall a. a -> a
id PName1I
GetStencilClearValue) GLint -> IO ()
forall (m :: * -> *). MonadIO m => GLint -> m ()
glClearStencil
clearAccum :: StateVar (Color4 GLfloat)
clearAccum :: StateVar (Color4 GLfloat)
clearAccum =
IO (Color4 GLfloat)
-> (Color4 GLfloat -> IO ()) -> StateVar (Color4 GLfloat)
forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar ((GLfloat -> GLfloat -> GLfloat -> GLfloat -> Color4 GLfloat)
-> PName4F -> IO (Color4 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 GLfloat -> GLfloat -> GLfloat -> GLfloat -> Color4 GLfloat
forall a. a -> a -> a -> a -> Color4 a
Color4 PName4F
GetAccumClearValue)
(\(Color4 GLfloat
r GLfloat
g GLfloat
b GLfloat
a) -> GLfloat -> GLfloat -> GLfloat -> GLfloat -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLfloat -> GLfloat -> GLfloat -> GLfloat -> m ()
glClearAccum GLfloat
r GLfloat
g GLfloat
b GLfloat
a)
data ClearBufferCommand
= ClearColorBufferInt DrawBufferIndex (Color4 GLint)
| ClearColorBufferFloat DrawBufferIndex (Color4 GLfloat)
| ClearColorBufferUint DrawBufferIndex (Color4 GLuint)
| ClearDepthBuffer GLfloat
| ClearStencilBuffer GLint
| ClearDepthAndStencilBuffers GLfloat GLint
deriving ( ClearBufferCommand -> ClearBufferCommand -> Bool
(ClearBufferCommand -> ClearBufferCommand -> Bool)
-> (ClearBufferCommand -> ClearBufferCommand -> Bool)
-> Eq ClearBufferCommand
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: ClearBufferCommand -> ClearBufferCommand -> Bool
== :: ClearBufferCommand -> ClearBufferCommand -> Bool
$c/= :: ClearBufferCommand -> ClearBufferCommand -> Bool
/= :: ClearBufferCommand -> ClearBufferCommand -> Bool
Eq, Eq ClearBufferCommand
Eq ClearBufferCommand
-> (ClearBufferCommand -> ClearBufferCommand -> Ordering)
-> (ClearBufferCommand -> ClearBufferCommand -> Bool)
-> (ClearBufferCommand -> ClearBufferCommand -> Bool)
-> (ClearBufferCommand -> ClearBufferCommand -> Bool)
-> (ClearBufferCommand -> ClearBufferCommand -> Bool)
-> (ClearBufferCommand -> ClearBufferCommand -> ClearBufferCommand)
-> (ClearBufferCommand -> ClearBufferCommand -> ClearBufferCommand)
-> Ord ClearBufferCommand
ClearBufferCommand -> ClearBufferCommand -> Bool
ClearBufferCommand -> ClearBufferCommand -> Ordering
ClearBufferCommand -> ClearBufferCommand -> ClearBufferCommand
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 :: ClearBufferCommand -> ClearBufferCommand -> Ordering
compare :: ClearBufferCommand -> ClearBufferCommand -> Ordering
$c< :: ClearBufferCommand -> ClearBufferCommand -> Bool
< :: ClearBufferCommand -> ClearBufferCommand -> Bool
$c<= :: ClearBufferCommand -> ClearBufferCommand -> Bool
<= :: ClearBufferCommand -> ClearBufferCommand -> Bool
$c> :: ClearBufferCommand -> ClearBufferCommand -> Bool
> :: ClearBufferCommand -> ClearBufferCommand -> Bool
$c>= :: ClearBufferCommand -> ClearBufferCommand -> Bool
>= :: ClearBufferCommand -> ClearBufferCommand -> Bool
$cmax :: ClearBufferCommand -> ClearBufferCommand -> ClearBufferCommand
max :: ClearBufferCommand -> ClearBufferCommand -> ClearBufferCommand
$cmin :: ClearBufferCommand -> ClearBufferCommand -> ClearBufferCommand
min :: ClearBufferCommand -> ClearBufferCommand -> ClearBufferCommand
Ord, Int -> ClearBufferCommand -> ShowS
[ClearBufferCommand] -> ShowS
ClearBufferCommand -> String
(Int -> ClearBufferCommand -> ShowS)
-> (ClearBufferCommand -> String)
-> ([ClearBufferCommand] -> ShowS)
-> Show ClearBufferCommand
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> ClearBufferCommand -> ShowS
showsPrec :: Int -> ClearBufferCommand -> ShowS
$cshow :: ClearBufferCommand -> String
show :: ClearBufferCommand -> String
$cshowList :: [ClearBufferCommand] -> ShowS
showList :: [ClearBufferCommand] -> ShowS
Show )
clearBuffer :: ClearBufferCommand -> IO ()
clearBuffer :: ClearBufferCommand -> IO ()
clearBuffer ClearBufferCommand
cmd = case ClearBufferCommand
cmd of
ClearColorBufferInt GLenum
i Color4 GLint
c ->
Color4 GLint -> (Ptr (Color4 GLint) -> IO ()) -> IO ()
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with Color4 GLint
c ((Ptr (Color4 GLint) -> IO ()) -> IO ())
-> (Ptr (Color4 GLint) -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ GLenum -> GLint -> Ptr GLint -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLint -> Ptr GLint -> m ()
glClearBufferiv GLenum
GL_COLOR (GLenum -> GLint
forall a b. (Integral a, Num b) => a -> b
fromIntegral GLenum
i) (Ptr GLint -> IO ())
-> (Ptr (Color4 GLint) -> Ptr GLint) -> Ptr (Color4 GLint) -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr (Color4 GLint) -> Ptr GLint
forall a b. Ptr a -> Ptr b
castPtr
ClearColorBufferFloat GLenum
i Color4 GLfloat
c ->
Color4 GLfloat -> (Ptr (Color4 GLfloat) -> IO ()) -> IO ()
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with Color4 GLfloat
c ((Ptr (Color4 GLfloat) -> IO ()) -> IO ())
-> (Ptr (Color4 GLfloat) -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ GLenum -> GLint -> Ptr GLfloat -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLint -> Ptr GLfloat -> m ()
glClearBufferfv GLenum
GL_COLOR (GLenum -> GLint
forall a b. (Integral a, Num b) => a -> b
fromIntegral GLenum
i) (Ptr GLfloat -> IO ())
-> (Ptr (Color4 GLfloat) -> Ptr GLfloat)
-> Ptr (Color4 GLfloat)
-> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr (Color4 GLfloat) -> Ptr GLfloat
forall a b. Ptr a -> Ptr b
castPtr
ClearColorBufferUint GLenum
i Color4 GLenum
c ->
Color4 GLenum -> (Ptr (Color4 GLenum) -> IO ()) -> IO ()
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with Color4 GLenum
c ((Ptr (Color4 GLenum) -> IO ()) -> IO ())
-> (Ptr (Color4 GLenum) -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ GLenum -> GLint -> Ptr GLenum -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLint -> Ptr GLenum -> m ()
glClearBufferuiv GLenum
GL_COLOR (GLenum -> GLint
forall a b. (Integral a, Num b) => a -> b
fromIntegral GLenum
i) (Ptr GLenum -> IO ())
-> (Ptr (Color4 GLenum) -> Ptr GLenum)
-> Ptr (Color4 GLenum)
-> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr (Color4 GLenum) -> Ptr GLenum
forall a b. Ptr a -> Ptr b
castPtr
ClearDepthBuffer GLfloat
d ->
GLfloat -> (Ptr GLfloat -> IO ()) -> IO ()
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with GLfloat
d ((Ptr GLfloat -> IO ()) -> IO ())
-> (Ptr GLfloat -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ GLenum -> GLint -> Ptr GLfloat -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLint -> Ptr GLfloat -> m ()
glClearBufferfv GLenum
GL_DEPTH GLint
0
ClearStencilBuffer GLint
s ->
GLint -> (Ptr GLint -> IO ()) -> IO ()
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with GLint
s ((Ptr GLint -> IO ()) -> IO ()) -> (Ptr GLint -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ GLenum -> GLint -> Ptr GLint -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLint -> Ptr GLint -> m ()
glClearBufferiv GLenum
GL_STENCIL GLint
0
ClearDepthAndStencilBuffers GLfloat
d GLint
s ->
GLenum -> GLint -> GLfloat -> GLint -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLint -> GLfloat -> GLint -> m ()
glClearBufferfi GLenum
GL_DEPTH_STENCIL GLint
0 GLfloat
d GLint
s
clearNamedFramebuffer :: FramebufferObject -> ClearBufferCommand -> IO ()
clearNamedFramebuffer :: FramebufferObject -> ClearBufferCommand -> IO ()
clearNamedFramebuffer FramebufferObject
fbo ClearBufferCommand
cmd = case ClearBufferCommand
cmd of
ClearColorBufferInt GLenum
i Color4 GLint
c ->
Color4 GLint -> (Ptr (Color4 GLint) -> IO ()) -> IO ()
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with Color4 GLint
c ((Ptr (Color4 GLint) -> IO ()) -> IO ())
-> (Ptr (Color4 GLint) -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ GLenum -> GLenum -> GLint -> Ptr GLint -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLenum -> GLint -> Ptr GLint -> m ()
glClearNamedFramebufferiv GLenum
f GLenum
GL_COLOR (GLenum -> GLint
forall a b. (Integral a, Num b) => a -> b
fromIntegral GLenum
i) (Ptr GLint -> IO ())
-> (Ptr (Color4 GLint) -> Ptr GLint) -> Ptr (Color4 GLint) -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr (Color4 GLint) -> Ptr GLint
forall a b. Ptr a -> Ptr b
castPtr
ClearColorBufferFloat GLenum
i Color4 GLfloat
c ->
Color4 GLfloat -> (Ptr (Color4 GLfloat) -> IO ()) -> IO ()
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with Color4 GLfloat
c ((Ptr (Color4 GLfloat) -> IO ()) -> IO ())
-> (Ptr (Color4 GLfloat) -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ GLenum -> GLenum -> GLint -> Ptr GLfloat -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLenum -> GLint -> Ptr GLfloat -> m ()
glClearNamedFramebufferfv GLenum
f GLenum
GL_COLOR (GLenum -> GLint
forall a b. (Integral a, Num b) => a -> b
fromIntegral GLenum
i) (Ptr GLfloat -> IO ())
-> (Ptr (Color4 GLfloat) -> Ptr GLfloat)
-> Ptr (Color4 GLfloat)
-> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr (Color4 GLfloat) -> Ptr GLfloat
forall a b. Ptr a -> Ptr b
castPtr
ClearColorBufferUint GLenum
i Color4 GLenum
c ->
Color4 GLenum -> (Ptr (Color4 GLenum) -> IO ()) -> IO ()
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with Color4 GLenum
c ((Ptr (Color4 GLenum) -> IO ()) -> IO ())
-> (Ptr (Color4 GLenum) -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ GLenum -> GLenum -> GLint -> Ptr GLenum -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLenum -> GLint -> Ptr GLenum -> m ()
glClearNamedFramebufferuiv GLenum
f GLenum
GL_COLOR (GLenum -> GLint
forall a b. (Integral a, Num b) => a -> b
fromIntegral GLenum
i) (Ptr GLenum -> IO ())
-> (Ptr (Color4 GLenum) -> Ptr GLenum)
-> Ptr (Color4 GLenum)
-> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr (Color4 GLenum) -> Ptr GLenum
forall a b. Ptr a -> Ptr b
castPtr
ClearDepthBuffer GLfloat
d ->
GLfloat -> (Ptr GLfloat -> IO ()) -> IO ()
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with GLfloat
d ((Ptr GLfloat -> IO ()) -> IO ())
-> (Ptr GLfloat -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ GLenum -> GLenum -> GLint -> Ptr GLfloat -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLenum -> GLint -> Ptr GLfloat -> m ()
glClearNamedFramebufferfv GLenum
f GLenum
GL_DEPTH GLint
0
ClearStencilBuffer GLint
s ->
GLint -> (Ptr GLint -> IO ()) -> IO ()
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with GLint
s ((Ptr GLint -> IO ()) -> IO ()) -> (Ptr GLint -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ GLenum -> GLenum -> GLint -> Ptr GLint -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLenum -> GLint -> Ptr GLint -> m ()
glClearNamedFramebufferiv GLenum
f GLenum
GL_STENCIL GLint
0
ClearDepthAndStencilBuffers GLfloat
d GLint
s ->
GLenum -> GLenum -> GLint -> GLfloat -> GLint -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLenum -> GLint -> GLfloat -> GLint -> m ()
glClearNamedFramebufferfi GLenum
f GLenum
GL_DEPTH_STENCIL GLint
0 GLfloat
d GLint
s
where f :: GLenum
f = FramebufferObject -> GLenum
framebufferID FramebufferObject
fbo
invalidateSubFramebuffer :: FramebufferTarget -> [FramebufferObjectAttachment] -> (Position, Size) -> IO ()
invalidateSubFramebuffer :: FramebufferTarget
-> [FramebufferObjectAttachment] -> (Position, Size) -> IO ()
invalidateSubFramebuffer FramebufferTarget
target [FramebufferObjectAttachment]
attachments (Position GLint
x GLint
y, Size GLint
w GLint
h) =
[FramebufferObjectAttachment]
-> (GLint -> Ptr GLenum -> IO ()) -> IO ()
withAttachments [FramebufferObjectAttachment]
attachments ((GLint -> Ptr GLenum -> IO ()) -> IO ())
-> (GLint -> Ptr GLenum -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \GLint
numAttachments Ptr GLenum
atts ->
GLenum
-> GLint -> Ptr GLenum -> GLint -> GLint -> GLint -> GLint -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum
-> GLint -> Ptr GLenum -> GLint -> GLint -> GLint -> GLint -> m ()
glInvalidateSubFramebuffer (FramebufferTarget -> GLenum
marshalFramebufferTarget FramebufferTarget
target) GLint
numAttachments Ptr GLenum
atts GLint
x GLint
y GLint
w GLint
h
invalidateNamedFramebufferSubData :: FramebufferObject -> [FramebufferObjectAttachment] -> (Position, Size) -> IO ()
invalidateNamedFramebufferSubData :: FramebufferObject
-> [FramebufferObjectAttachment] -> (Position, Size) -> IO ()
invalidateNamedFramebufferSubData FramebufferObject
fbo [FramebufferObjectAttachment]
attachments (Position GLint
x GLint
y, Size GLint
w GLint
h) =
[FramebufferObjectAttachment]
-> (GLint -> Ptr GLenum -> IO ()) -> IO ()
withAttachments [FramebufferObjectAttachment]
attachments ((GLint -> Ptr GLenum -> IO ()) -> IO ())
-> (GLint -> Ptr GLenum -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \GLint
numAttachments Ptr GLenum
atts ->
GLenum
-> GLint -> Ptr GLenum -> GLint -> GLint -> GLint -> GLint -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum
-> GLint -> Ptr GLenum -> GLint -> GLint -> GLint -> GLint -> m ()
glInvalidateNamedFramebufferSubData (FramebufferObject -> GLenum
framebufferID FramebufferObject
fbo) GLint
numAttachments Ptr GLenum
atts GLint
x GLint
y GLint
w GLint
h
invalidateFramebuffer :: FramebufferTarget -> [FramebufferObjectAttachment] -> IO ()
invalidateFramebuffer :: FramebufferTarget -> [FramebufferObjectAttachment] -> IO ()
invalidateFramebuffer FramebufferTarget
target [FramebufferObjectAttachment]
attachments =
[FramebufferObjectAttachment]
-> (GLint -> Ptr GLenum -> IO ()) -> IO ()
withAttachments [FramebufferObjectAttachment]
attachments ((GLint -> Ptr GLenum -> IO ()) -> IO ())
-> (GLint -> Ptr GLenum -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$
GLenum -> GLint -> Ptr GLenum -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLint -> Ptr GLenum -> m ()
glInvalidateFramebuffer (FramebufferTarget -> GLenum
marshalFramebufferTarget FramebufferTarget
target)
invalidateNamedFramebufferData :: FramebufferObject -> [FramebufferObjectAttachment] -> IO ()
invalidateNamedFramebufferData :: FramebufferObject -> [FramebufferObjectAttachment] -> IO ()
invalidateNamedFramebufferData FramebufferObject
fbo [FramebufferObjectAttachment]
attachments =
[FramebufferObjectAttachment]
-> (GLint -> Ptr GLenum -> IO ()) -> IO ()
withAttachments [FramebufferObjectAttachment]
attachments ((GLint -> Ptr GLenum -> IO ()) -> IO ())
-> (GLint -> Ptr GLenum -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$
GLenum -> GLint -> Ptr GLenum -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLint -> Ptr GLenum -> m ()
glInvalidateNamedFramebufferData (FramebufferObject -> GLenum
framebufferID FramebufferObject
fbo)
withAttachments :: [FramebufferObjectAttachment] -> (GLsizei -> Ptr GLenum -> IO ()) -> IO ()
withAttachments :: [FramebufferObjectAttachment]
-> (GLint -> Ptr GLenum -> IO ()) -> IO ()
withAttachments [FramebufferObjectAttachment]
attachments GLint -> Ptr GLenum -> IO ()
success
| (Maybe GLenum -> Bool) -> [Maybe GLenum] -> Bool
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all Maybe GLenum -> Bool
forall a. Maybe a -> Bool
isJust [Maybe GLenum]
atts = [GLenum] -> (Int -> Ptr GLenum -> IO ()) -> IO ()
forall a b. Storable a => [a] -> (Int -> Ptr a -> IO b) -> IO b
withArrayLen ([Maybe GLenum] -> [GLenum]
forall a. [Maybe a] -> [a]
catMaybes [Maybe GLenum]
atts) ((Int -> Ptr GLenum -> IO ()) -> IO ())
-> (Int -> Ptr GLenum -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \Int
len Ptr GLenum
buf ->
GLint -> Ptr GLenum -> IO ()
success (Int -> GLint
forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
len) Ptr GLenum
buf
| Bool
otherwise = IO ()
recordInvalidEnum
where atts :: [Maybe GLenum]
atts = (FramebufferObjectAttachment -> Maybe GLenum)
-> [FramebufferObjectAttachment] -> [Maybe GLenum]
forall a b. (a -> b) -> [a] -> [b]
map FramebufferObjectAttachment -> Maybe GLenum
marshalFramebufferObjectAttachment [FramebufferObjectAttachment]
attachments
auxBuffers :: GettableStateVar GLsizei
auxBuffers :: GettableStateVar GLint
auxBuffers = GettableStateVar GLint -> GettableStateVar GLint
forall a. IO a -> IO a
makeGettableStateVar (GettableStateVar GLint -> GettableStateVar GLint)
-> GettableStateVar GLint -> GettableStateVar GLint
forall a b. (a -> b) -> a -> b
$ (GLint -> GLint) -> PName1I -> GettableStateVar GLint
forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
forall a. (GLint -> a) -> PName1I -> IO a
getSizei1 GLint -> GLint
forall a. a -> a
id PName1I
GetAuxBuffers
doubleBuffer :: GettableStateVar Bool
doubleBuffer :: GettableStateVar Bool
doubleBuffer =
GettableStateVar Bool -> GettableStateVar Bool
forall a. IO a -> IO a
makeGettableStateVar (GettableStateVar Bool -> GettableStateVar Bool)
-> GettableStateVar Bool -> GettableStateVar Bool
forall a b. (a -> b) -> a -> b
$ (GLboolean -> Bool) -> PName1I -> GettableStateVar Bool
forall p a. GetPName1I p => (GLboolean -> a) -> p -> IO a
forall a. (GLboolean -> a) -> PName1I -> IO a
getBoolean1 GLboolean -> Bool
forall a. (Eq a, Num a) => a -> Bool
unmarshalGLboolean PName1I
GetDoublebuffer
stereoBuffer :: GettableStateVar Bool
stereoBuffer :: GettableStateVar Bool
stereoBuffer =
GettableStateVar Bool -> GettableStateVar Bool
forall a. IO a -> IO a
makeGettableStateVar (GettableStateVar Bool -> GettableStateVar Bool)
-> GettableStateVar Bool -> GettableStateVar Bool
forall a b. (a -> b) -> a -> b
$ (GLboolean -> Bool) -> PName1I -> GettableStateVar Bool
forall p a. GetPName1I p => (GLboolean -> a) -> p -> IO a
forall a. (GLboolean -> a) -> PName1I -> IO a
getBoolean1 GLboolean -> Bool
forall a. (Eq a, Num a) => a -> Bool
unmarshalGLboolean PName1I
GetStereo
rgbaBits :: GettableStateVar (Color4 GLsizei)
rgbaBits :: GettableStateVar (Color4 GLint)
rgbaBits =
GettableStateVar (Color4 GLint) -> GettableStateVar (Color4 GLint)
forall a. IO a -> IO a
makeGettableStateVar (GettableStateVar (Color4 GLint)
-> GettableStateVar (Color4 GLint))
-> GettableStateVar (Color4 GLint)
-> GettableStateVar (Color4 GLint)
forall a b. (a -> b) -> a -> b
$
(GLint -> GLint -> GLint -> GLint -> Color4 GLint)
-> GettableStateVar GLint
-> GettableStateVar GLint
-> GettableStateVar GLint
-> GettableStateVar GLint
-> GettableStateVar (Color4 GLint)
forall (m :: * -> *) a1 a2 a3 a4 r.
Monad m =>
(a1 -> a2 -> a3 -> a4 -> r) -> m a1 -> m a2 -> m a3 -> m a4 -> m r
liftM4 GLint -> GLint -> GLint -> GLint -> Color4 GLint
forall a. a -> a -> a -> a -> Color4 a
Color4 ((GLint -> GLint) -> PName1I -> GettableStateVar GLint
forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
forall a. (GLint -> a) -> PName1I -> IO a
getSizei1 GLint -> GLint
forall a. a -> a
id PName1I
GetRedBits)
((GLint -> GLint) -> PName1I -> GettableStateVar GLint
forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
forall a. (GLint -> a) -> PName1I -> IO a
getSizei1 GLint -> GLint
forall a. a -> a
id PName1I
GetGreenBits)
((GLint -> GLint) -> PName1I -> GettableStateVar GLint
forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
forall a. (GLint -> a) -> PName1I -> IO a
getSizei1 GLint -> GLint
forall a. a -> a
id PName1I
GetBlueBits)
((GLint -> GLint) -> PName1I -> GettableStateVar GLint
forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
forall a. (GLint -> a) -> PName1I -> IO a
getSizei1 GLint -> GLint
forall a. a -> a
id PName1I
GetAlphaBits)
stencilBits :: GettableStateVar GLsizei
stencilBits :: GettableStateVar GLint
stencilBits = GettableStateVar GLint -> GettableStateVar GLint
forall a. IO a -> IO a
makeGettableStateVar (GettableStateVar GLint -> GettableStateVar GLint)
-> GettableStateVar GLint -> GettableStateVar GLint
forall a b. (a -> b) -> a -> b
$ (GLint -> GLint) -> PName1I -> GettableStateVar GLint
forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
forall a. (GLint -> a) -> PName1I -> IO a
getSizei1 GLint -> GLint
forall a. a -> a
id PName1I
GetStencilBits
depthBits :: GettableStateVar GLsizei
depthBits :: GettableStateVar GLint
depthBits = GettableStateVar GLint -> GettableStateVar GLint
forall a. IO a -> IO a
makeGettableStateVar (GettableStateVar GLint -> GettableStateVar GLint)
-> GettableStateVar GLint -> GettableStateVar GLint
forall a b. (a -> b) -> a -> b
$ (GLint -> GLint) -> PName1I -> GettableStateVar GLint
forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
forall a. (GLint -> a) -> PName1I -> IO a
getSizei1 GLint -> GLint
forall a. a -> a
id PName1I
GetDepthBits
accumBits :: GettableStateVar (Color4 GLsizei)
accumBits :: GettableStateVar (Color4 GLint)
accumBits =
GettableStateVar (Color4 GLint) -> GettableStateVar (Color4 GLint)
forall a. IO a -> IO a
makeGettableStateVar (GettableStateVar (Color4 GLint)
-> GettableStateVar (Color4 GLint))
-> GettableStateVar (Color4 GLint)
-> GettableStateVar (Color4 GLint)
forall a b. (a -> b) -> a -> b
$
(GLint -> GLint -> GLint -> GLint -> Color4 GLint)
-> GettableStateVar GLint
-> GettableStateVar GLint
-> GettableStateVar GLint
-> GettableStateVar GLint
-> GettableStateVar (Color4 GLint)
forall (m :: * -> *) a1 a2 a3 a4 r.
Monad m =>
(a1 -> a2 -> a3 -> a4 -> r) -> m a1 -> m a2 -> m a3 -> m a4 -> m r
liftM4 GLint -> GLint -> GLint -> GLint -> Color4 GLint
forall a. a -> a -> a -> a -> Color4 a
Color4 ((GLint -> GLint) -> PName1I -> GettableStateVar GLint
forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
forall a. (GLint -> a) -> PName1I -> IO a
getSizei1 GLint -> GLint
forall a. a -> a
id PName1I
GetAccumRedBits)
((GLint -> GLint) -> PName1I -> GettableStateVar GLint
forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
forall a. (GLint -> a) -> PName1I -> IO a
getSizei1 GLint -> GLint
forall a. a -> a
id PName1I
GetAccumGreenBits)
((GLint -> GLint) -> PName1I -> GettableStateVar GLint
forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
forall a. (GLint -> a) -> PName1I -> IO a
getSizei1 GLint -> GLint
forall a. a -> a
id PName1I
GetAccumBlueBits)
((GLint -> GLint) -> PName1I -> GettableStateVar GLint
forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
forall a. (GLint -> a) -> PName1I -> IO a
getSizei1 GLint -> GLint
forall a. a -> a
id PName1I
GetAccumAlphaBits)
rgbaSignedComponents :: GettableStateVar (Color4 Bool)
rgbaSignedComponents :: GettableStateVar (Color4 Bool)
rgbaSignedComponents =
GettableStateVar (Color4 Bool) -> GettableStateVar (Color4 Bool)
forall a. IO a -> IO a
makeGettableStateVar (GettableStateVar (Color4 Bool) -> GettableStateVar (Color4 Bool))
-> GettableStateVar (Color4 Bool) -> GettableStateVar (Color4 Bool)
forall a b. (a -> b) -> a -> b
$
(GLint -> GLint -> GLint -> GLint -> Color4 Bool)
-> PName4I -> GettableStateVar (Color4 Bool)
forall p a.
GetPName4I p =>
(GLint -> GLint -> GLint -> GLint -> a) -> p -> IO a
forall a.
(GLint -> GLint -> GLint -> GLint -> a) -> PName4I -> IO a
getInteger4 (\GLint
r GLint
g GLint
b GLint
a -> Bool -> Bool -> Bool -> Bool -> Color4 Bool
forall a. a -> a -> a -> a -> Color4 a
Color4 (GLint -> Bool
forall a. (Eq a, Num a) => a -> Bool
unmarshalGLboolean GLint
r)
(GLint -> Bool
forall a. (Eq a, Num a) => a -> Bool
unmarshalGLboolean GLint
g)
(GLint -> Bool
forall a. (Eq a, Num a) => a -> Bool
unmarshalGLboolean GLint
b)
(GLint -> Bool
forall a. (Eq a, Num a) => a -> Bool
unmarshalGLboolean GLint
a))
PName4I
GetRGBASignedComponents
data AccumOp =
Accum
| Load
| Return
| Mult
| Add
deriving ( AccumOp -> AccumOp -> Bool
(AccumOp -> AccumOp -> Bool)
-> (AccumOp -> AccumOp -> Bool) -> Eq AccumOp
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: AccumOp -> AccumOp -> Bool
== :: AccumOp -> AccumOp -> Bool
$c/= :: AccumOp -> AccumOp -> Bool
/= :: AccumOp -> AccumOp -> Bool
Eq, Eq AccumOp
Eq AccumOp
-> (AccumOp -> AccumOp -> Ordering)
-> (AccumOp -> AccumOp -> Bool)
-> (AccumOp -> AccumOp -> Bool)
-> (AccumOp -> AccumOp -> Bool)
-> (AccumOp -> AccumOp -> Bool)
-> (AccumOp -> AccumOp -> AccumOp)
-> (AccumOp -> AccumOp -> AccumOp)
-> Ord AccumOp
AccumOp -> AccumOp -> Bool
AccumOp -> AccumOp -> Ordering
AccumOp -> AccumOp -> AccumOp
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 :: AccumOp -> AccumOp -> Ordering
compare :: AccumOp -> AccumOp -> Ordering
$c< :: AccumOp -> AccumOp -> Bool
< :: AccumOp -> AccumOp -> Bool
$c<= :: AccumOp -> AccumOp -> Bool
<= :: AccumOp -> AccumOp -> Bool
$c> :: AccumOp -> AccumOp -> Bool
> :: AccumOp -> AccumOp -> Bool
$c>= :: AccumOp -> AccumOp -> Bool
>= :: AccumOp -> AccumOp -> Bool
$cmax :: AccumOp -> AccumOp -> AccumOp
max :: AccumOp -> AccumOp -> AccumOp
$cmin :: AccumOp -> AccumOp -> AccumOp
min :: AccumOp -> AccumOp -> AccumOp
Ord, Int -> AccumOp -> ShowS
[AccumOp] -> ShowS
AccumOp -> String
(Int -> AccumOp -> ShowS)
-> (AccumOp -> String) -> ([AccumOp] -> ShowS) -> Show AccumOp
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> AccumOp -> ShowS
showsPrec :: Int -> AccumOp -> ShowS
$cshow :: AccumOp -> String
show :: AccumOp -> String
$cshowList :: [AccumOp] -> ShowS
showList :: [AccumOp] -> ShowS
Show )
marshalAccumOp :: AccumOp -> GLenum
marshalAccumOp :: AccumOp -> GLenum
marshalAccumOp AccumOp
x = case AccumOp
x of
AccumOp
Accum -> GLenum
GL_ACCUM
AccumOp
Load -> GLenum
GL_LOAD
AccumOp
Return -> GLenum
GL_RETURN
AccumOp
Mult -> GLenum
GL_MULT
AccumOp
Add -> GLenum
GL_ADD
accum :: AccumOp -> GLfloat -> IO ()
accum :: AccumOp -> GLfloat -> IO ()
accum = GLenum -> GLfloat -> IO ()
forall (m :: * -> *). MonadIO m => GLenum -> GLfloat -> m ()
glAccum (GLenum -> GLfloat -> IO ())
-> (AccumOp -> GLenum) -> AccumOp -> GLfloat -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. AccumOp -> GLenum
marshalAccumOp