module Graphics.Rendering.OpenGL.GL.FramebufferObjects.FramebufferObjects (
FramebufferObject, defaultFramebufferObject,
FramebufferTarget(..), bindFramebuffer,
FramebufferStatus(..), framebufferStatus,
) where
import Data.StateVar
import Graphics.Rendering.OpenGL.GL.FramebufferObjects.FramebufferObject
import Graphics.Rendering.OpenGL.GL.FramebufferObjects.FramebufferTarget
import Graphics.Rendering.OpenGL.GL.QueryUtils
import Graphics.GL
defaultFramebufferObject :: FramebufferObject
defaultFramebufferObject :: FramebufferObject
defaultFramebufferObject = GLenum -> FramebufferObject
FramebufferObject GLenum
0
bindFramebuffer :: FramebufferTarget -> StateVar FramebufferObject
bindFramebuffer :: FramebufferTarget -> StateVar FramebufferObject
bindFramebuffer FramebufferTarget
fbt =
IO FramebufferObject
-> (FramebufferObject -> IO ()) -> StateVar FramebufferObject
forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar (FramebufferTarget -> IO FramebufferObject
getBoundFramebuffer FramebufferTarget
fbt) (FramebufferTarget -> FramebufferObject -> IO ()
setFramebuffer FramebufferTarget
fbt)
marshalFramebufferTargetBinding :: FramebufferTarget -> PName1I
marshalFramebufferTargetBinding :: FramebufferTarget -> PName1I
marshalFramebufferTargetBinding FramebufferTarget
x = case FramebufferTarget
x of
FramebufferTarget
DrawFramebuffer -> PName1I
GetDrawFramebufferBinding
FramebufferTarget
ReadFramebuffer -> PName1I
GetReadFramebufferBinding
FramebufferTarget
Framebuffer -> PName1I
GetFramebufferBinding
getBoundFramebuffer :: FramebufferTarget -> IO FramebufferObject
getBoundFramebuffer :: FramebufferTarget -> IO FramebufferObject
getBoundFramebuffer =
(GLint -> FramebufferObject) -> PName1I -> IO FramebufferObject
forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
forall a. (GLint -> a) -> PName1I -> IO a
getInteger1 (GLenum -> FramebufferObject
FramebufferObject (GLenum -> FramebufferObject)
-> (GLint -> GLenum) -> GLint -> FramebufferObject
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GLint -> GLenum
forall a b. (Integral a, Num b) => a -> b
fromIntegral) (PName1I -> IO FramebufferObject)
-> (FramebufferTarget -> PName1I)
-> FramebufferTarget
-> IO FramebufferObject
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FramebufferTarget -> PName1I
marshalFramebufferTargetBinding
setFramebuffer :: FramebufferTarget -> FramebufferObject -> IO ()
setFramebuffer :: FramebufferTarget -> FramebufferObject -> IO ()
setFramebuffer FramebufferTarget
fbt =
GLenum -> GLenum -> IO ()
forall (m :: * -> *). MonadIO m => GLenum -> GLenum -> m ()
glBindFramebuffer (FramebufferTarget -> GLenum
marshalFramebufferTarget FramebufferTarget
fbt) (GLenum -> IO ())
-> (FramebufferObject -> GLenum) -> FramebufferObject -> IO ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FramebufferObject -> GLenum
framebufferID
data FramebufferStatus =
Complete
| Undefined
| IncompleteMissingAttachment
| IncompleteDrawBuffer
| IncompleteReadBuffer
| IncompleteMultiSample
| Unsupported
deriving ( FramebufferStatus -> FramebufferStatus -> Bool
(FramebufferStatus -> FramebufferStatus -> Bool)
-> (FramebufferStatus -> FramebufferStatus -> Bool)
-> Eq FramebufferStatus
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: FramebufferStatus -> FramebufferStatus -> Bool
== :: FramebufferStatus -> FramebufferStatus -> Bool
$c/= :: FramebufferStatus -> FramebufferStatus -> Bool
/= :: FramebufferStatus -> FramebufferStatus -> Bool
Eq, Eq FramebufferStatus
Eq FramebufferStatus
-> (FramebufferStatus -> FramebufferStatus -> Ordering)
-> (FramebufferStatus -> FramebufferStatus -> Bool)
-> (FramebufferStatus -> FramebufferStatus -> Bool)
-> (FramebufferStatus -> FramebufferStatus -> Bool)
-> (FramebufferStatus -> FramebufferStatus -> Bool)
-> (FramebufferStatus -> FramebufferStatus -> FramebufferStatus)
-> (FramebufferStatus -> FramebufferStatus -> FramebufferStatus)
-> Ord FramebufferStatus
FramebufferStatus -> FramebufferStatus -> Bool
FramebufferStatus -> FramebufferStatus -> Ordering
FramebufferStatus -> FramebufferStatus -> FramebufferStatus
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 :: FramebufferStatus -> FramebufferStatus -> Ordering
compare :: FramebufferStatus -> FramebufferStatus -> Ordering
$c< :: FramebufferStatus -> FramebufferStatus -> Bool
< :: FramebufferStatus -> FramebufferStatus -> Bool
$c<= :: FramebufferStatus -> FramebufferStatus -> Bool
<= :: FramebufferStatus -> FramebufferStatus -> Bool
$c> :: FramebufferStatus -> FramebufferStatus -> Bool
> :: FramebufferStatus -> FramebufferStatus -> Bool
$c>= :: FramebufferStatus -> FramebufferStatus -> Bool
>= :: FramebufferStatus -> FramebufferStatus -> Bool
$cmax :: FramebufferStatus -> FramebufferStatus -> FramebufferStatus
max :: FramebufferStatus -> FramebufferStatus -> FramebufferStatus
$cmin :: FramebufferStatus -> FramebufferStatus -> FramebufferStatus
min :: FramebufferStatus -> FramebufferStatus -> FramebufferStatus
Ord, Int -> FramebufferStatus -> ShowS
[FramebufferStatus] -> ShowS
FramebufferStatus -> String
(Int -> FramebufferStatus -> ShowS)
-> (FramebufferStatus -> String)
-> ([FramebufferStatus] -> ShowS)
-> Show FramebufferStatus
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> FramebufferStatus -> ShowS
showsPrec :: Int -> FramebufferStatus -> ShowS
$cshow :: FramebufferStatus -> String
show :: FramebufferStatus -> String
$cshowList :: [FramebufferStatus] -> ShowS
showList :: [FramebufferStatus] -> ShowS
Show )
unmarshalFramebufferStatus :: GLenum -> FramebufferStatus
unmarshalFramebufferStatus :: GLenum -> FramebufferStatus
unmarshalFramebufferStatus GLenum
x
| GLenum
x GLenum -> GLenum -> Bool
forall a. Eq a => a -> a -> Bool
== GLenum
GL_FRAMEBUFFER_COMPLETE = FramebufferStatus
Complete
| GLenum
x GLenum -> GLenum -> Bool
forall a. Eq a => a -> a -> Bool
== GLenum
GL_FRAMEBUFFER_UNDEFINED = FramebufferStatus
Undefined
| GLenum
x GLenum -> GLenum -> Bool
forall a. Eq a => a -> a -> Bool
== GLenum
GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT
= FramebufferStatus
IncompleteMissingAttachment
| GLenum
x GLenum -> GLenum -> Bool
forall a. Eq a => a -> a -> Bool
== GLenum
GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER = FramebufferStatus
IncompleteDrawBuffer
| GLenum
x GLenum -> GLenum -> Bool
forall a. Eq a => a -> a -> Bool
== GLenum
GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER = FramebufferStatus
IncompleteReadBuffer
| GLenum
x GLenum -> GLenum -> Bool
forall a. Eq a => a -> a -> Bool
== GLenum
GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE = FramebufferStatus
IncompleteMultiSample
| GLenum
x GLenum -> GLenum -> Bool
forall a. Eq a => a -> a -> Bool
== GLenum
GL_FRAMEBUFFER_UNSUPPORTED = FramebufferStatus
Unsupported
| Bool
otherwise = String -> FramebufferStatus
forall a. HasCallStack => String -> a
error (String -> FramebufferStatus) -> String -> FramebufferStatus
forall a b. (a -> b) -> a -> b
$ String
"unmarshalFramebufferStatus: unknown value: "
String -> ShowS
forall a. [a] -> [a] -> [a]
++ GLenum -> String
forall a. Show a => a -> String
show GLenum
x
framebufferStatus :: FramebufferTarget -> GettableStateVar FramebufferStatus
framebufferStatus :: FramebufferTarget -> GettableStateVar FramebufferStatus
framebufferStatus FramebufferTarget
t = GettableStateVar FramebufferStatus
-> GettableStateVar FramebufferStatus
forall a. IO a -> IO a
makeGettableStateVar (GettableStateVar FramebufferStatus
-> GettableStateVar FramebufferStatus)
-> GettableStateVar FramebufferStatus
-> GettableStateVar FramebufferStatus
forall a b. (a -> b) -> a -> b
$ (GLenum -> FramebufferStatus)
-> IO GLenum -> GettableStateVar FramebufferStatus
forall a b. (a -> b) -> IO a -> IO b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap GLenum -> FramebufferStatus
unmarshalFramebufferStatus
(IO GLenum -> GettableStateVar FramebufferStatus)
-> (FramebufferTarget -> IO GLenum)
-> FramebufferTarget
-> GettableStateVar FramebufferStatus
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GLenum -> IO GLenum
forall (m :: * -> *). MonadIO m => GLenum -> m GLenum
glCheckFramebufferStatus (GLenum -> IO GLenum)
-> (FramebufferTarget -> GLenum) -> FramebufferTarget -> IO GLenum
forall b c a. (b -> c) -> (a -> b) -> a -> c
. FramebufferTarget -> GLenum
marshalFramebufferTarget (FramebufferTarget -> GettableStateVar FramebufferStatus)
-> FramebufferTarget -> GettableStateVar FramebufferStatus
forall a b. (a -> b) -> a -> b
$ FramebufferTarget
t