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 = GLsizei -> IO BufferMode
getDrawBufferi GLsizei
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
GLsizei
n <- GettableStateVar GLsizei -> GettableStateVar GLsizei
forall t a (m :: * -> *). (HasGetter t a, MonadIO m) => t -> m a
get GettableStateVar GLsizei
maxDrawBuffers
(GLsizei -> IO BufferMode) -> [GLsizei] -> IO [BufferMode]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM GLsizei -> IO BufferMode
getDrawBufferi [ GLsizei
0 .. GLsizei
nGLsizei -> GLsizei -> GLsizei
forall a. Num a => a -> a -> a
-GLsizei
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 ->
GLsizei -> Ptr GLenum -> IO ()
forall (m :: * -> *). MonadIO m => GLsizei -> Ptr GLenum -> m ()
glDrawBuffers (Int -> GLsizei
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 -> GLsizei -> Ptr GLenum -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLsizei -> Ptr GLenum -> m ()
glNamedFramebufferDrawBuffers (FramebufferObject -> GLenum
framebufferID FramebufferObject
fbo) (Int -> GLsizei
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
. GLsizei -> IO BufferMode
getDrawBufferi (GLsizei -> IO BufferMode)
-> (GLenum -> GLsizei) -> GLenum -> IO BufferMode
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GLenum -> GLsizei
forall a b. (Integral a, Num b) => a -> b
fromIntegral
getDrawBufferi :: GLsizei -> IO BufferMode
getDrawBufferi :: GLsizei -> IO BufferMode
getDrawBufferi = (GLenum -> BufferMode) -> PName1I -> IO BufferMode
forall p a. GetPName1I p => (GLenum -> a) -> p -> IO a
getEnum1 GLenum -> BufferMode
unmarshalBufferMode (PName1I -> IO BufferMode)
-> (GLsizei -> PName1I) -> GLsizei -> IO BufferMode
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GLsizei -> PName1I
GetDrawBufferN
maxDrawBuffers :: GettableStateVar GLsizei
maxDrawBuffers :: GettableStateVar GLsizei
maxDrawBuffers = GettableStateVar GLsizei -> GettableStateVar GLsizei
forall a. IO a -> IO a
makeGettableStateVar (GettableStateVar GLsizei -> GettableStateVar GLsizei)
-> GettableStateVar GLsizei -> GettableStateVar GLsizei
forall a b. (a -> b) -> a -> b
$ (GLsizei -> GLsizei) -> PName1I -> GettableStateVar GLsizei
forall p a. GetPName1I p => (GLsizei -> a) -> p -> IO a
getSizei1 GLsizei -> GLsizei
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 ((GLsizei -> GLenum) -> PName1I -> IO GLenum
forall p a. GetPName1I p => (GLsizei -> a) -> p -> IO a
getInteger1 GLsizei -> 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
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
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
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
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 -> (GLsizei -> GLenum) -> PName1I -> IO GLenum
forall p a. GetPName1I p => (GLsizei -> a) -> p -> IO a
getInteger1 GLsizei -> GLenum
forall a b. (Integral a, Num b) => a -> b
fromIntegral PName1I
GetStencilWritemask
Face
Back -> (GLsizei -> GLenum) -> PName1I -> IO GLenum
forall p a. GetPName1I p => (GLsizei -> a) -> p -> IO a
getInteger1 GLsizei -> GLenum
forall a b. (Integral a, Num b) => a -> b
fromIntegral PName1I
GetStencilBackWritemask
Face
FrontAndBack -> do IO ()
recordInvalidEnum; GLenum -> IO GLenum
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
/= :: ClearBuffer -> ClearBuffer -> Bool
$c/= :: ClearBuffer -> ClearBuffer -> Bool
== :: ClearBuffer -> ClearBuffer -> Bool
$c== :: 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
min :: ClearBuffer -> ClearBuffer -> ClearBuffer
$cmin :: ClearBuffer -> ClearBuffer -> ClearBuffer
max :: ClearBuffer -> ClearBuffer -> ClearBuffer
$cmax :: ClearBuffer -> ClearBuffer -> ClearBuffer
>= :: ClearBuffer -> ClearBuffer -> Bool
$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
compare :: ClearBuffer -> ClearBuffer -> Ordering
$ccompare :: ClearBuffer -> ClearBuffer -> Ordering
$cp1Ord :: Eq 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
showList :: [ClearBuffer] -> ShowS
$cshowList :: [ClearBuffer] -> ShowS
show :: ClearBuffer -> String
$cshow :: ClearBuffer -> String
showsPrec :: Int -> ClearBuffer -> ShowS
$cshowsPrec :: Int -> 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 (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
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
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
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
getFloat1 GLfloat -> GLfloat
forall a. a -> a
id PName1F
GetDepthClearValue) GLfloat -> IO ()
forall (m :: * -> *). MonadIO m => GLfloat -> m ()
glClearDepthf
clearStencil :: StateVar GLint
clearStencil :: StateVar GLsizei
clearStencil = GettableStateVar GLsizei -> (GLsizei -> IO ()) -> StateVar GLsizei
forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar ((GLsizei -> GLsizei) -> PName1I -> GettableStateVar GLsizei
forall p a. GetPName1I p => (GLsizei -> a) -> p -> IO a
getInteger1 GLsizei -> GLsizei
forall a. a -> a
id PName1I
GetStencilClearValue) GLsizei -> IO ()
forall (m :: * -> *). MonadIO m => GLsizei -> 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
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
/= :: ClearBufferCommand -> ClearBufferCommand -> Bool
$c/= :: ClearBufferCommand -> ClearBufferCommand -> Bool
== :: ClearBufferCommand -> ClearBufferCommand -> Bool
$c== :: 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
min :: ClearBufferCommand -> ClearBufferCommand -> ClearBufferCommand
$cmin :: ClearBufferCommand -> ClearBufferCommand -> ClearBufferCommand
max :: ClearBufferCommand -> ClearBufferCommand -> ClearBufferCommand
$cmax :: ClearBufferCommand -> ClearBufferCommand -> ClearBufferCommand
>= :: ClearBufferCommand -> ClearBufferCommand -> Bool
$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
compare :: ClearBufferCommand -> ClearBufferCommand -> Ordering
$ccompare :: ClearBufferCommand -> ClearBufferCommand -> Ordering
$cp1Ord :: Eq 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
showList :: [ClearBufferCommand] -> ShowS
$cshowList :: [ClearBufferCommand] -> ShowS
show :: ClearBufferCommand -> String
$cshow :: ClearBufferCommand -> String
showsPrec :: Int -> ClearBufferCommand -> ShowS
$cshowsPrec :: Int -> ClearBufferCommand -> ShowS
Show )
clearBuffer :: ClearBufferCommand -> IO ()
clearBuffer :: ClearBufferCommand -> IO ()
clearBuffer ClearBufferCommand
cmd = case ClearBufferCommand
cmd of
ClearColorBufferInt GLenum
i Color4 GLsizei
c ->
Color4 GLsizei -> (Ptr (Color4 GLsizei) -> IO ()) -> IO ()
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with Color4 GLsizei
c ((Ptr (Color4 GLsizei) -> IO ()) -> IO ())
-> (Ptr (Color4 GLsizei) -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ GLenum -> GLsizei -> Ptr GLsizei -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLsizei -> Ptr GLsizei -> m ()
glClearBufferiv GLenum
GL_COLOR (GLenum -> GLsizei
forall a b. (Integral a, Num b) => a -> b
fromIntegral GLenum
i) (Ptr GLsizei -> IO ())
-> (Ptr (Color4 GLsizei) -> Ptr GLsizei)
-> Ptr (Color4 GLsizei)
-> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr (Color4 GLsizei) -> Ptr GLsizei
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 -> GLsizei -> Ptr GLfloat -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLsizei -> Ptr GLfloat -> m ()
glClearBufferfv GLenum
GL_COLOR (GLenum -> GLsizei
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 -> GLsizei -> Ptr GLenum -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLsizei -> Ptr GLenum -> m ()
glClearBufferuiv GLenum
GL_COLOR (GLenum -> GLsizei
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 -> GLsizei -> Ptr GLfloat -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLsizei -> Ptr GLfloat -> m ()
glClearBufferfv GLenum
GL_DEPTH GLsizei
0
ClearStencilBuffer GLsizei
s ->
GLsizei -> (Ptr GLsizei -> IO ()) -> IO ()
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with GLsizei
s ((Ptr GLsizei -> IO ()) -> IO ())
-> (Ptr GLsizei -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ GLenum -> GLsizei -> Ptr GLsizei -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLsizei -> Ptr GLsizei -> m ()
glClearBufferiv GLenum
GL_STENCIL GLsizei
0
ClearDepthAndStencilBuffers GLfloat
d GLsizei
s ->
GLenum -> GLsizei -> GLfloat -> GLsizei -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLsizei -> GLfloat -> GLsizei -> m ()
glClearBufferfi GLenum
GL_DEPTH_STENCIL GLsizei
0 GLfloat
d GLsizei
s
clearNamedFramebuffer :: FramebufferObject -> ClearBufferCommand -> IO ()
clearNamedFramebuffer :: FramebufferObject -> ClearBufferCommand -> IO ()
clearNamedFramebuffer FramebufferObject
fbo ClearBufferCommand
cmd = case ClearBufferCommand
cmd of
ClearColorBufferInt GLenum
i Color4 GLsizei
c ->
Color4 GLsizei -> (Ptr (Color4 GLsizei) -> IO ()) -> IO ()
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with Color4 GLsizei
c ((Ptr (Color4 GLsizei) -> IO ()) -> IO ())
-> (Ptr (Color4 GLsizei) -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ GLenum -> GLenum -> GLsizei -> Ptr GLsizei -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLenum -> GLsizei -> Ptr GLsizei -> m ()
glClearNamedFramebufferiv GLenum
f GLenum
GL_COLOR (GLenum -> GLsizei
forall a b. (Integral a, Num b) => a -> b
fromIntegral GLenum
i) (Ptr GLsizei -> IO ())
-> (Ptr (Color4 GLsizei) -> Ptr GLsizei)
-> Ptr (Color4 GLsizei)
-> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Ptr (Color4 GLsizei) -> Ptr GLsizei
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 -> GLsizei -> Ptr GLfloat -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLenum -> GLsizei -> Ptr GLfloat -> m ()
glClearNamedFramebufferfv GLenum
f GLenum
GL_COLOR (GLenum -> GLsizei
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 -> GLsizei -> Ptr GLenum -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLenum -> GLsizei -> Ptr GLenum -> m ()
glClearNamedFramebufferuiv GLenum
f GLenum
GL_COLOR (GLenum -> GLsizei
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 -> GLsizei -> Ptr GLfloat -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLenum -> GLsizei -> Ptr GLfloat -> m ()
glClearNamedFramebufferfv GLenum
f GLenum
GL_DEPTH GLsizei
0
ClearStencilBuffer GLsizei
s ->
GLsizei -> (Ptr GLsizei -> IO ()) -> IO ()
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with GLsizei
s ((Ptr GLsizei -> IO ()) -> IO ())
-> (Ptr GLsizei -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ GLenum -> GLenum -> GLsizei -> Ptr GLsizei -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLenum -> GLsizei -> Ptr GLsizei -> m ()
glClearNamedFramebufferiv GLenum
f GLenum
GL_STENCIL GLsizei
0
ClearDepthAndStencilBuffers GLfloat
d GLsizei
s ->
GLenum -> GLenum -> GLsizei -> GLfloat -> GLsizei -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLenum -> GLsizei -> GLfloat -> GLsizei -> m ()
glClearNamedFramebufferfi GLenum
f GLenum
GL_DEPTH_STENCIL GLsizei
0 GLfloat
d GLsizei
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 GLsizei
x GLsizei
y, Size GLsizei
w GLsizei
h) =
[FramebufferObjectAttachment]
-> (GLsizei -> Ptr GLenum -> IO ()) -> IO ()
withAttachments [FramebufferObjectAttachment]
attachments ((GLsizei -> Ptr GLenum -> IO ()) -> IO ())
-> (GLsizei -> Ptr GLenum -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \GLsizei
numAttachments Ptr GLenum
atts ->
GLenum
-> GLsizei
-> Ptr GLenum
-> GLsizei
-> GLsizei
-> GLsizei
-> GLsizei
-> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum
-> GLsizei
-> Ptr GLenum
-> GLsizei
-> GLsizei
-> GLsizei
-> GLsizei
-> m ()
glInvalidateSubFramebuffer (FramebufferTarget -> GLenum
marshalFramebufferTarget FramebufferTarget
target) GLsizei
numAttachments Ptr GLenum
atts GLsizei
x GLsizei
y GLsizei
w GLsizei
h
invalidateNamedFramebufferSubData :: FramebufferObject -> [FramebufferObjectAttachment] -> (Position, Size) -> IO ()
invalidateNamedFramebufferSubData :: FramebufferObject
-> [FramebufferObjectAttachment] -> (Position, Size) -> IO ()
invalidateNamedFramebufferSubData FramebufferObject
fbo [FramebufferObjectAttachment]
attachments (Position GLsizei
x GLsizei
y, Size GLsizei
w GLsizei
h) =
[FramebufferObjectAttachment]
-> (GLsizei -> Ptr GLenum -> IO ()) -> IO ()
withAttachments [FramebufferObjectAttachment]
attachments ((GLsizei -> Ptr GLenum -> IO ()) -> IO ())
-> (GLsizei -> Ptr GLenum -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$ \GLsizei
numAttachments Ptr GLenum
atts ->
GLenum
-> GLsizei
-> Ptr GLenum
-> GLsizei
-> GLsizei
-> GLsizei
-> GLsizei
-> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum
-> GLsizei
-> Ptr GLenum
-> GLsizei
-> GLsizei
-> GLsizei
-> GLsizei
-> m ()
glInvalidateNamedFramebufferSubData (FramebufferObject -> GLenum
framebufferID FramebufferObject
fbo) GLsizei
numAttachments Ptr GLenum
atts GLsizei
x GLsizei
y GLsizei
w GLsizei
h
invalidateFramebuffer :: FramebufferTarget -> [FramebufferObjectAttachment] -> IO ()
invalidateFramebuffer :: FramebufferTarget -> [FramebufferObjectAttachment] -> IO ()
invalidateFramebuffer FramebufferTarget
target [FramebufferObjectAttachment]
attachments =
[FramebufferObjectAttachment]
-> (GLsizei -> Ptr GLenum -> IO ()) -> IO ()
withAttachments [FramebufferObjectAttachment]
attachments ((GLsizei -> Ptr GLenum -> IO ()) -> IO ())
-> (GLsizei -> Ptr GLenum -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$
GLenum -> GLsizei -> Ptr GLenum -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLsizei -> Ptr GLenum -> m ()
glInvalidateFramebuffer (FramebufferTarget -> GLenum
marshalFramebufferTarget FramebufferTarget
target)
invalidateNamedFramebufferData :: FramebufferObject -> [FramebufferObjectAttachment] -> IO ()
invalidateNamedFramebufferData :: FramebufferObject -> [FramebufferObjectAttachment] -> IO ()
invalidateNamedFramebufferData FramebufferObject
fbo [FramebufferObjectAttachment]
attachments =
[FramebufferObjectAttachment]
-> (GLsizei -> Ptr GLenum -> IO ()) -> IO ()
withAttachments [FramebufferObjectAttachment]
attachments ((GLsizei -> Ptr GLenum -> IO ()) -> IO ())
-> (GLsizei -> Ptr GLenum -> IO ()) -> IO ()
forall a b. (a -> b) -> a -> b
$
GLenum -> GLsizei -> Ptr GLenum -> IO ()
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLsizei -> Ptr GLenum -> m ()
glInvalidateNamedFramebufferData (FramebufferObject -> GLenum
framebufferID FramebufferObject
fbo)
withAttachments :: [FramebufferObjectAttachment] -> (GLsizei -> Ptr GLenum -> IO ()) -> IO ()
withAttachments :: [FramebufferObjectAttachment]
-> (GLsizei -> Ptr GLenum -> IO ()) -> IO ()
withAttachments [FramebufferObjectAttachment]
attachments GLsizei -> 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 ->
GLsizei -> Ptr GLenum -> IO ()
success (Int -> GLsizei
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 GLsizei
auxBuffers = GettableStateVar GLsizei -> GettableStateVar GLsizei
forall a. IO a -> IO a
makeGettableStateVar (GettableStateVar GLsizei -> GettableStateVar GLsizei)
-> GettableStateVar GLsizei -> GettableStateVar GLsizei
forall a b. (a -> b) -> a -> b
$ (GLsizei -> GLsizei) -> PName1I -> GettableStateVar GLsizei
forall p a. GetPName1I p => (GLsizei -> a) -> p -> IO a
getSizei1 GLsizei -> GLsizei
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
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
getBoolean1 GLboolean -> Bool
forall a. (Eq a, Num a) => a -> Bool
unmarshalGLboolean PName1I
GetStereo
rgbaBits :: GettableStateVar (Color4 GLsizei)
rgbaBits :: GettableStateVar (Color4 GLsizei)
rgbaBits =
GettableStateVar (Color4 GLsizei)
-> GettableStateVar (Color4 GLsizei)
forall a. IO a -> IO a
makeGettableStateVar (GettableStateVar (Color4 GLsizei)
-> GettableStateVar (Color4 GLsizei))
-> GettableStateVar (Color4 GLsizei)
-> GettableStateVar (Color4 GLsizei)
forall a b. (a -> b) -> a -> b
$
(GLsizei -> GLsizei -> GLsizei -> GLsizei -> Color4 GLsizei)
-> GettableStateVar GLsizei
-> GettableStateVar GLsizei
-> GettableStateVar GLsizei
-> GettableStateVar GLsizei
-> GettableStateVar (Color4 GLsizei)
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 GLsizei -> GLsizei -> GLsizei -> GLsizei -> Color4 GLsizei
forall a. a -> a -> a -> a -> Color4 a
Color4 ((GLsizei -> GLsizei) -> PName1I -> GettableStateVar GLsizei
forall p a. GetPName1I p => (GLsizei -> a) -> p -> IO a
getSizei1 GLsizei -> GLsizei
forall a. a -> a
id PName1I
GetRedBits)
((GLsizei -> GLsizei) -> PName1I -> GettableStateVar GLsizei
forall p a. GetPName1I p => (GLsizei -> a) -> p -> IO a
getSizei1 GLsizei -> GLsizei
forall a. a -> a
id PName1I
GetGreenBits)
((GLsizei -> GLsizei) -> PName1I -> GettableStateVar GLsizei
forall p a. GetPName1I p => (GLsizei -> a) -> p -> IO a
getSizei1 GLsizei -> GLsizei
forall a. a -> a
id PName1I
GetBlueBits)
((GLsizei -> GLsizei) -> PName1I -> GettableStateVar GLsizei
forall p a. GetPName1I p => (GLsizei -> a) -> p -> IO a
getSizei1 GLsizei -> GLsizei
forall a. a -> a
id PName1I
GetAlphaBits)
stencilBits :: GettableStateVar GLsizei
stencilBits :: GettableStateVar GLsizei
stencilBits = GettableStateVar GLsizei -> GettableStateVar GLsizei
forall a. IO a -> IO a
makeGettableStateVar (GettableStateVar GLsizei -> GettableStateVar GLsizei)
-> GettableStateVar GLsizei -> GettableStateVar GLsizei
forall a b. (a -> b) -> a -> b
$ (GLsizei -> GLsizei) -> PName1I -> GettableStateVar GLsizei
forall p a. GetPName1I p => (GLsizei -> a) -> p -> IO a
getSizei1 GLsizei -> GLsizei
forall a. a -> a
id PName1I
GetStencilBits
depthBits :: GettableStateVar GLsizei
depthBits :: GettableStateVar GLsizei
depthBits = GettableStateVar GLsizei -> GettableStateVar GLsizei
forall a. IO a -> IO a
makeGettableStateVar (GettableStateVar GLsizei -> GettableStateVar GLsizei)
-> GettableStateVar GLsizei -> GettableStateVar GLsizei
forall a b. (a -> b) -> a -> b
$ (GLsizei -> GLsizei) -> PName1I -> GettableStateVar GLsizei
forall p a. GetPName1I p => (GLsizei -> a) -> p -> IO a
getSizei1 GLsizei -> GLsizei
forall a. a -> a
id PName1I
GetDepthBits
accumBits :: GettableStateVar (Color4 GLsizei)
accumBits :: GettableStateVar (Color4 GLsizei)
accumBits =
GettableStateVar (Color4 GLsizei)
-> GettableStateVar (Color4 GLsizei)
forall a. IO a -> IO a
makeGettableStateVar (GettableStateVar (Color4 GLsizei)
-> GettableStateVar (Color4 GLsizei))
-> GettableStateVar (Color4 GLsizei)
-> GettableStateVar (Color4 GLsizei)
forall a b. (a -> b) -> a -> b
$
(GLsizei -> GLsizei -> GLsizei -> GLsizei -> Color4 GLsizei)
-> GettableStateVar GLsizei
-> GettableStateVar GLsizei
-> GettableStateVar GLsizei
-> GettableStateVar GLsizei
-> GettableStateVar (Color4 GLsizei)
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 GLsizei -> GLsizei -> GLsizei -> GLsizei -> Color4 GLsizei
forall a. a -> a -> a -> a -> Color4 a
Color4 ((GLsizei -> GLsizei) -> PName1I -> GettableStateVar GLsizei
forall p a. GetPName1I p => (GLsizei -> a) -> p -> IO a
getSizei1 GLsizei -> GLsizei
forall a. a -> a
id PName1I
GetAccumRedBits)
((GLsizei -> GLsizei) -> PName1I -> GettableStateVar GLsizei
forall p a. GetPName1I p => (GLsizei -> a) -> p -> IO a
getSizei1 GLsizei -> GLsizei
forall a. a -> a
id PName1I
GetAccumGreenBits)
((GLsizei -> GLsizei) -> PName1I -> GettableStateVar GLsizei
forall p a. GetPName1I p => (GLsizei -> a) -> p -> IO a
getSizei1 GLsizei -> GLsizei
forall a. a -> a
id PName1I
GetAccumBlueBits)
((GLsizei -> GLsizei) -> PName1I -> GettableStateVar GLsizei
forall p a. GetPName1I p => (GLsizei -> a) -> p -> IO a
getSizei1 GLsizei -> GLsizei
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
$
(GLsizei -> GLsizei -> GLsizei -> GLsizei -> Color4 Bool)
-> PName4I -> GettableStateVar (Color4 Bool)
forall p a.
GetPName4I p =>
(GLsizei -> GLsizei -> GLsizei -> GLsizei -> a) -> p -> IO a
getInteger4 (\GLsizei
r GLsizei
g GLsizei
b GLsizei
a -> Bool -> Bool -> Bool -> Bool -> Color4 Bool
forall a. a -> a -> a -> a -> Color4 a
Color4 (GLsizei -> Bool
forall a. (Eq a, Num a) => a -> Bool
unmarshalGLboolean GLsizei
r)
(GLsizei -> Bool
forall a. (Eq a, Num a) => a -> Bool
unmarshalGLboolean GLsizei
g)
(GLsizei -> Bool
forall a. (Eq a, Num a) => a -> Bool
unmarshalGLboolean GLsizei
b)
(GLsizei -> Bool
forall a. (Eq a, Num a) => a -> Bool
unmarshalGLboolean GLsizei
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
/= :: AccumOp -> AccumOp -> Bool
$c/= :: AccumOp -> AccumOp -> Bool
== :: AccumOp -> AccumOp -> Bool
$c== :: 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
min :: AccumOp -> AccumOp -> AccumOp
$cmin :: AccumOp -> AccumOp -> AccumOp
max :: AccumOp -> AccumOp -> AccumOp
$cmax :: AccumOp -> AccumOp -> AccumOp
>= :: AccumOp -> AccumOp -> Bool
$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
compare :: AccumOp -> AccumOp -> Ordering
$ccompare :: AccumOp -> AccumOp -> Ordering
$cp1Ord :: Eq 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
showList :: [AccumOp] -> ShowS
$cshowList :: [AccumOp] -> ShowS
show :: AccumOp -> String
$cshow :: AccumOp -> String
showsPrec :: Int -> AccumOp -> ShowS
$cshowsPrec :: Int -> 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