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 = 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] forall a b. (a -> b) -> a -> b
$ \[GLenum
m] ->
forall (m :: * -> *). MonadIO m => GLenum -> m ()
glDrawBuffer GLenum
m
namedFramebufferDrawBuffer :: FramebufferObject -> SettableStateVar BufferMode
namedFramebufferDrawBuffer :: FramebufferObject -> SettableStateVar BufferMode
namedFramebufferDrawBuffer FramebufferObject
fbo =
forall a. (a -> IO ()) -> SettableStateVar a
makeSettableStateVar forall a b. (a -> b) -> a -> b
$ \BufferMode
mode ->
[BufferMode] -> ([GLenum] -> IO ()) -> IO ()
withBufferModes [BufferMode
mode] forall a b. (a -> b) -> a -> b
$ \[GLenum
m] ->
forall (m :: * -> *). MonadIO m => GLenum -> GLenum -> m ()
glNamedFramebufferDrawBuffer (FramebufferObject -> GLenum
framebufferID FramebufferObject
fbo) GLenum
m
drawBuffers :: StateVar [BufferMode]
drawBuffers :: StateVar [BufferMode]
drawBuffers = 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 <- forall t a (m :: * -> *). (HasGetter t a, MonadIO m) => t -> m a
get GettableStateVar GLint
maxDrawBuffers
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM GLint -> IO BufferMode
getDrawBufferi [ GLint
0 .. GLint
nforall a. Num a => a -> a -> a
-GLint
1 ]
setDrawBuffers :: [BufferMode] -> IO ()
setDrawBuffers :: [BufferMode] -> IO ()
setDrawBuffers [BufferMode]
modes =
[BufferMode] -> ([GLenum] -> IO ()) -> IO ()
withBufferModes [BufferMode]
modes forall a b. (a -> b) -> a -> b
$ \[GLenum]
ms ->
forall a b. Storable a => [a] -> (Int -> Ptr a -> IO b) -> IO b
withArrayLen [GLenum]
ms forall a b. (a -> b) -> a -> b
$ \Int
len ->
forall (m :: * -> *). MonadIO m => GLint -> Ptr GLenum -> m ()
glDrawBuffers (forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
len)
namedFramebufferDrawBuffers :: FramebufferObject -> SettableStateVar [BufferMode]
namedFramebufferDrawBuffers :: FramebufferObject -> SettableStateVar [BufferMode]
namedFramebufferDrawBuffers FramebufferObject
fbo =
forall a. (a -> IO ()) -> SettableStateVar a
makeSettableStateVar forall a b. (a -> b) -> a -> b
$ \[BufferMode]
modes ->
[BufferMode] -> ([GLenum] -> IO ()) -> IO ()
withBufferModes [BufferMode]
modes forall a b. (a -> b) -> a -> b
$ \[GLenum]
ms ->
forall a b. Storable a => [a] -> (Int -> Ptr a -> IO b) -> IO b
withArrayLen [GLenum]
ms forall a b. (a -> b) -> a -> b
$ \Int
len ->
forall (m :: * -> *).
MonadIO m =>
GLenum -> GLint -> Ptr GLenum -> m ()
glNamedFramebufferDrawBuffers (FramebufferObject -> GLenum
framebufferID FramebufferObject
fbo) (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
| forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all forall a. Maybe a -> Bool
isJust [Maybe GLenum]
ms = [GLenum] -> IO ()
success (forall a. [Maybe a] -> [a]
catMaybes [Maybe GLenum]
ms)
| Bool
otherwise = IO ()
recordInvalidValue
where ms :: [Maybe GLenum]
ms = 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 = forall a. IO a -> IO a
makeGettableStateVar forall b c a. (b -> c) -> (a -> b) -> a -> c
. GLint -> IO BufferMode
getDrawBufferi forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral
getDrawBufferi :: GLsizei -> IO BufferMode
getDrawBufferi :: GLint -> IO BufferMode
getDrawBufferi = forall p a. GetPName1I p => (GLenum -> a) -> p -> IO a
getEnum1 GLenum -> BufferMode
unmarshalBufferMode forall b c a. (b -> c) -> (a -> b) -> a -> c
. GLint -> PName1I
GetDrawBufferN
maxDrawBuffers :: GettableStateVar GLsizei
maxDrawBuffers :: GettableStateVar GLint
maxDrawBuffers = forall a. IO a -> IO a
makeGettableStateVar forall a b. (a -> b) -> a -> b
$ forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
getSizei1 forall a. a -> a
id PName1I
GetMaxDrawBuffers
indexMask :: StateVar GLuint
indexMask :: StateVar GLenum
indexMask =
forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar (forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
getInteger1 forall a b. (Integral a, Num b) => a -> b
fromIntegral PName1I
GetIndexWritemask) forall (m :: * -> *). MonadIO m => GLenum -> m ()
glIndexMask
colorMask :: StateVar (Color4 Capability)
colorMask :: StateVar (Color4 Capability)
colorMask =
forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar
(forall p a.
GetPName4I p =>
(GLboolean -> GLboolean -> GLboolean -> GLboolean -> a)
-> p -> IO a
getBoolean4 (\GLboolean
r GLboolean
g GLboolean
b GLboolean
a -> 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) -> 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 =
forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar
(forall p a.
GetIPName4I p =>
(GLboolean -> GLboolean -> GLboolean -> GLboolean -> a)
-> p -> GLenum -> IO a
getBoolean4i (\GLboolean
r GLboolean
g GLboolean
b GLboolean
a -> 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) -> 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 = forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar (forall p a. GetPName1I p => (GLboolean -> a) -> p -> IO a
getBoolean1 GLboolean -> Capability
unmarshalCapability PName1I
GetDepthWritemask)
(forall (m :: * -> *). MonadIO m => GLboolean -> m ()
glDepthMask forall b c a. (b -> c) -> (a -> b) -> a -> c
. Capability -> GLboolean
marshalCapability)
stencilMask :: StateVar GLuint
stencilMask :: StateVar GLenum
stencilMask =
forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar (forall t a (m :: * -> *). (HasGetter t a, MonadIO m) => t -> m a
get (Face -> StateVar GLenum
stencilMaskSeparate Face
Front)) forall (m :: * -> *). MonadIO m => GLenum -> m ()
glStencilMask
stencilMaskSeparate :: Face -> StateVar GLuint
stencilMaskSeparate :: Face -> StateVar GLenum
stencilMaskSeparate Face
face =
forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar
(case Face
face of
Face
Front -> forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
getInteger1 forall a b. (Integral a, Num b) => a -> b
fromIntegral PName1I
GetStencilWritemask
Face
Back -> forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
getInteger1 forall a b. (Integral a, Num b) => a -> b
fromIntegral PName1I
GetStencilBackWritemask
Face
FrontAndBack -> do IO ()
recordInvalidEnum; forall (m :: * -> *) a. Monad m => a -> m a
return GLenum
0)
(forall (m :: * -> *). MonadIO m => GLenum -> GLenum -> m ()
glStencilMaskSeparate (Face -> GLenum
marshalFace Face
face))
data ClearBuffer =
ColorBuffer
| AccumBuffer
| StencilBuffer
| DepthBuffer
deriving ( ClearBuffer -> ClearBuffer -> Bool
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
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
Ord, Int -> ClearBuffer -> ShowS
[ClearBuffer] -> ShowS
ClearBuffer -> String
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 = forall (m :: * -> *). MonadIO m => GLenum -> m ()
glClear forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (t :: * -> *) a. (Foldable t, Num a) => t a -> a
sum forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (a -> b) -> [a] -> [b]
map ClearBuffer -> GLenum
marshalClearBuffer
clearColor :: StateVar (Color4 GLfloat)
clearColor :: StateVar (Color4 GLfloat)
clearColor = forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar (forall p a.
GetPName4F p =>
(GLfloat -> GLfloat -> GLfloat -> GLfloat -> a) -> p -> IO a
getFloat4 forall a. a -> a -> a -> a -> Color4 a
Color4 PName4F
GetColorClearValue)
(\(Color4 GLfloat
r GLfloat
g GLfloat
b GLfloat
a) -> 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 = forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar (forall p a. GetPName1F p => (GLfloat -> a) -> p -> IO a
getFloat1 forall a. a -> Index1 a
Index1 PName1F
GetIndexClearValue)
(\(Index1 GLfloat
i) -> forall (m :: * -> *). MonadIO m => GLfloat -> m ()
glClearIndex GLfloat
i)
clearDepth :: StateVar GLdouble
clearDepth :: StateVar GLdouble
clearDepth = forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar (forall p a. GetPName1F p => (GLdouble -> a) -> p -> IO a
getDouble1 forall a. a -> a
id PName1F
GetDepthClearValue) forall (m :: * -> *). MonadIO m => GLdouble -> m ()
glClearDepth
clearDepthf :: StateVar GLfloat
clearDepthf :: StateVar GLfloat
clearDepthf = forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar (forall p a. GetPName1F p => (GLfloat -> a) -> p -> IO a
getFloat1 forall a. a -> a
id PName1F
GetDepthClearValue) forall (m :: * -> *). MonadIO m => GLfloat -> m ()
glClearDepthf
clearStencil :: StateVar GLint
clearStencil :: StateVar GLint
clearStencil = forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar (forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
getInteger1 forall a. a -> a
id PName1I
GetStencilClearValue) forall (m :: * -> *). MonadIO m => GLint -> m ()
glClearStencil
clearAccum :: StateVar (Color4 GLfloat)
clearAccum :: StateVar (Color4 GLfloat)
clearAccum =
forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar (forall p a.
GetPName4F p =>
(GLfloat -> GLfloat -> GLfloat -> GLfloat -> a) -> p -> IO a
getFloat4 forall a. a -> a -> a -> a -> Color4 a
Color4 PName4F
GetAccumClearValue)
(\(Color4 GLfloat
r GLfloat
g GLfloat
b GLfloat
a) -> 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
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
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
Ord, Int -> ClearBufferCommand -> ShowS
[ClearBufferCommand] -> ShowS
ClearBufferCommand -> String
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 GLint
c ->
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with Color4 GLint
c forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *).
MonadIO m =>
GLenum -> GLint -> Ptr GLint -> m ()
glClearBufferiv GLenum
GL_COLOR (forall a b. (Integral a, Num b) => a -> b
fromIntegral GLenum
i) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. Ptr a -> Ptr b
castPtr
ClearColorBufferFloat GLenum
i Color4 GLfloat
c ->
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with Color4 GLfloat
c forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *).
MonadIO m =>
GLenum -> GLint -> Ptr GLfloat -> m ()
glClearBufferfv GLenum
GL_COLOR (forall a b. (Integral a, Num b) => a -> b
fromIntegral GLenum
i) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. Ptr a -> Ptr b
castPtr
ClearColorBufferUint GLenum
i Color4 GLenum
c ->
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with Color4 GLenum
c forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *).
MonadIO m =>
GLenum -> GLint -> Ptr GLenum -> m ()
glClearBufferuiv GLenum
GL_COLOR (forall a b. (Integral a, Num b) => a -> b
fromIntegral GLenum
i) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. Ptr a -> Ptr b
castPtr
ClearDepthBuffer GLfloat
d ->
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with GLfloat
d forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *).
MonadIO m =>
GLenum -> GLint -> Ptr GLfloat -> m ()
glClearBufferfv GLenum
GL_DEPTH GLint
0
ClearStencilBuffer GLint
s ->
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with GLint
s forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *).
MonadIO m =>
GLenum -> GLint -> Ptr GLint -> m ()
glClearBufferiv GLenum
GL_STENCIL GLint
0
ClearDepthAndStencilBuffers GLfloat
d GLint
s ->
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 ->
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with Color4 GLint
c forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *).
MonadIO m =>
GLenum -> GLenum -> GLint -> Ptr GLint -> m ()
glClearNamedFramebufferiv GLenum
f GLenum
GL_COLOR (forall a b. (Integral a, Num b) => a -> b
fromIntegral GLenum
i) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. Ptr a -> Ptr b
castPtr
ClearColorBufferFloat GLenum
i Color4 GLfloat
c ->
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with Color4 GLfloat
c forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *).
MonadIO m =>
GLenum -> GLenum -> GLint -> Ptr GLfloat -> m ()
glClearNamedFramebufferfv GLenum
f GLenum
GL_COLOR (forall a b. (Integral a, Num b) => a -> b
fromIntegral GLenum
i) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. Ptr a -> Ptr b
castPtr
ClearColorBufferUint GLenum
i Color4 GLenum
c ->
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with Color4 GLenum
c forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *).
MonadIO m =>
GLenum -> GLenum -> GLint -> Ptr GLenum -> m ()
glClearNamedFramebufferuiv GLenum
f GLenum
GL_COLOR (forall a b. (Integral a, Num b) => a -> b
fromIntegral GLenum
i) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. Ptr a -> Ptr b
castPtr
ClearDepthBuffer GLfloat
d ->
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with GLfloat
d forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *).
MonadIO m =>
GLenum -> GLenum -> GLint -> Ptr GLfloat -> m ()
glClearNamedFramebufferfv GLenum
f GLenum
GL_DEPTH GLint
0
ClearStencilBuffer GLint
s ->
forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with GLint
s forall a b. (a -> b) -> a -> b
$ forall (m :: * -> *).
MonadIO m =>
GLenum -> GLenum -> GLint -> Ptr GLint -> m ()
glClearNamedFramebufferiv GLenum
f GLenum
GL_STENCIL GLint
0
ClearDepthAndStencilBuffers GLfloat
d GLint
s ->
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 forall a b. (a -> b) -> a -> b
$ \GLint
numAttachments Ptr GLenum
atts ->
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 forall a b. (a -> b) -> a -> b
$ \GLint
numAttachments Ptr GLenum
atts ->
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 forall a b. (a -> b) -> a -> b
$
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 forall a b. (a -> b) -> a -> b
$
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
| forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all forall a. Maybe a -> Bool
isJust [Maybe GLenum]
atts = forall a b. Storable a => [a] -> (Int -> Ptr a -> IO b) -> IO b
withArrayLen (forall a. [Maybe a] -> [a]
catMaybes [Maybe GLenum]
atts) forall a b. (a -> b) -> a -> b
$ \Int
len Ptr GLenum
buf ->
GLint -> Ptr GLenum -> IO ()
success (forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
len) Ptr GLenum
buf
| Bool
otherwise = IO ()
recordInvalidEnum
where atts :: [Maybe GLenum]
atts = forall a b. (a -> b) -> [a] -> [b]
map FramebufferObjectAttachment -> Maybe GLenum
marshalFramebufferObjectAttachment [FramebufferObjectAttachment]
attachments
auxBuffers :: GettableStateVar GLsizei
auxBuffers :: GettableStateVar GLint
auxBuffers = forall a. IO a -> IO a
makeGettableStateVar forall a b. (a -> b) -> a -> b
$ forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
getSizei1 forall a. a -> a
id PName1I
GetAuxBuffers
doubleBuffer :: GettableStateVar Bool
doubleBuffer :: GettableStateVar Bool
doubleBuffer =
forall a. IO a -> IO a
makeGettableStateVar forall a b. (a -> b) -> a -> b
$ forall p a. GetPName1I p => (GLboolean -> a) -> p -> IO a
getBoolean1 forall a. (Eq a, Num a) => a -> Bool
unmarshalGLboolean PName1I
GetDoublebuffer
stereoBuffer :: GettableStateVar Bool
stereoBuffer :: GettableStateVar Bool
stereoBuffer =
forall a. IO a -> IO a
makeGettableStateVar forall a b. (a -> b) -> a -> b
$ forall p a. GetPName1I p => (GLboolean -> a) -> p -> IO a
getBoolean1 forall a. (Eq a, Num a) => a -> Bool
unmarshalGLboolean PName1I
GetStereo
rgbaBits :: GettableStateVar (Color4 GLsizei)
rgbaBits :: GettableStateVar (Color4 GLint)
rgbaBits =
forall a. IO a -> IO a
makeGettableStateVar forall a b. (a -> b) -> a -> b
$
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 forall a. a -> a -> a -> a -> Color4 a
Color4 (forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
getSizei1 forall a. a -> a
id PName1I
GetRedBits)
(forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
getSizei1 forall a. a -> a
id PName1I
GetGreenBits)
(forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
getSizei1 forall a. a -> a
id PName1I
GetBlueBits)
(forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
getSizei1 forall a. a -> a
id PName1I
GetAlphaBits)
stencilBits :: GettableStateVar GLsizei
stencilBits :: GettableStateVar GLint
stencilBits = forall a. IO a -> IO a
makeGettableStateVar forall a b. (a -> b) -> a -> b
$ forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
getSizei1 forall a. a -> a
id PName1I
GetStencilBits
depthBits :: GettableStateVar GLsizei
depthBits :: GettableStateVar GLint
depthBits = forall a. IO a -> IO a
makeGettableStateVar forall a b. (a -> b) -> a -> b
$ forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
getSizei1 forall a. a -> a
id PName1I
GetDepthBits
accumBits :: GettableStateVar (Color4 GLsizei)
accumBits :: GettableStateVar (Color4 GLint)
accumBits =
forall a. IO a -> IO a
makeGettableStateVar forall a b. (a -> b) -> a -> b
$
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 forall a. a -> a -> a -> a -> Color4 a
Color4 (forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
getSizei1 forall a. a -> a
id PName1I
GetAccumRedBits)
(forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
getSizei1 forall a. a -> a
id PName1I
GetAccumGreenBits)
(forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
getSizei1 forall a. a -> a
id PName1I
GetAccumBlueBits)
(forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
getSizei1 forall a. a -> a
id PName1I
GetAccumAlphaBits)
rgbaSignedComponents :: GettableStateVar (Color4 Bool)
rgbaSignedComponents :: GettableStateVar (Color4 Bool)
rgbaSignedComponents =
forall a. IO a -> IO a
makeGettableStateVar forall a b. (a -> b) -> a -> b
$
forall p a.
GetPName4I p =>
(GLint -> GLint -> GLint -> GLint -> a) -> p -> IO a
getInteger4 (\GLint
r GLint
g GLint
b GLint
a -> forall a. a -> a -> a -> a -> Color4 a
Color4 (forall a. (Eq a, Num a) => a -> Bool
unmarshalGLboolean GLint
r)
(forall a. (Eq a, Num a) => a -> Bool
unmarshalGLboolean GLint
g)
(forall a. (Eq a, Num a) => a -> Bool
unmarshalGLboolean GLint
b)
(forall a. (Eq a, Num a) => a -> Bool
unmarshalGLboolean GLint
a))
PName4I
GetRGBASignedComponents
data AccumOp =
Accum
| Load
| Return
| Mult
| Add
deriving ( AccumOp -> AccumOp -> Bool
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
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
Ord, Int -> AccumOp -> ShowS
[AccumOp] -> ShowS
AccumOp -> String
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 = forall (m :: * -> *). MonadIO m => GLenum -> GLfloat -> m ()
glAccum forall b c a. (b -> c) -> (a -> b) -> a -> c
. AccumOp -> GLenum
marshalAccumOp