{-# OPTIONS_HADDOCK hide #-}
module Graphics.Rendering.OpenGL.GL.BufferMode (
BufferMode(..), marshalBufferMode, unmarshalBufferMode,
unmarshalBufferModeSafe,
maxColorAttachments,
) where
import Graphics.GL
data BufferMode =
NoBuffers
| FrontLeftBuffer
| FrontRightBuffer
| BackLeftBuffer
| BackRightBuffer
| FrontBuffers
| BackBuffers
| LeftBuffers
| RightBuffers
| FrontAndBackBuffers
| AuxBuffer GLsizei
| FBOColorAttachment GLsizei
deriving ( BufferMode -> BufferMode -> Bool
(BufferMode -> BufferMode -> Bool)
-> (BufferMode -> BufferMode -> Bool) -> Eq BufferMode
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: BufferMode -> BufferMode -> Bool
$c/= :: BufferMode -> BufferMode -> Bool
== :: BufferMode -> BufferMode -> Bool
$c== :: BufferMode -> BufferMode -> Bool
Eq, Eq BufferMode
Eq BufferMode =>
(BufferMode -> BufferMode -> Ordering)
-> (BufferMode -> BufferMode -> Bool)
-> (BufferMode -> BufferMode -> Bool)
-> (BufferMode -> BufferMode -> Bool)
-> (BufferMode -> BufferMode -> Bool)
-> (BufferMode -> BufferMode -> BufferMode)
-> (BufferMode -> BufferMode -> BufferMode)
-> Ord BufferMode
BufferMode -> BufferMode -> Bool
BufferMode -> BufferMode -> Ordering
BufferMode -> BufferMode -> BufferMode
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 :: BufferMode -> BufferMode -> BufferMode
$cmin :: BufferMode -> BufferMode -> BufferMode
max :: BufferMode -> BufferMode -> BufferMode
$cmax :: BufferMode -> BufferMode -> BufferMode
>= :: BufferMode -> BufferMode -> Bool
$c>= :: BufferMode -> BufferMode -> Bool
> :: BufferMode -> BufferMode -> Bool
$c> :: BufferMode -> BufferMode -> Bool
<= :: BufferMode -> BufferMode -> Bool
$c<= :: BufferMode -> BufferMode -> Bool
< :: BufferMode -> BufferMode -> Bool
$c< :: BufferMode -> BufferMode -> Bool
compare :: BufferMode -> BufferMode -> Ordering
$ccompare :: BufferMode -> BufferMode -> Ordering
$cp1Ord :: Eq BufferMode
Ord, Int -> BufferMode -> ShowS
[BufferMode] -> ShowS
BufferMode -> String
(Int -> BufferMode -> ShowS)
-> (BufferMode -> String)
-> ([BufferMode] -> ShowS)
-> Show BufferMode
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [BufferMode] -> ShowS
$cshowList :: [BufferMode] -> ShowS
show :: BufferMode -> String
$cshow :: BufferMode -> String
showsPrec :: Int -> BufferMode -> ShowS
$cshowsPrec :: Int -> BufferMode -> ShowS
Show )
marshalBufferMode :: BufferMode -> Maybe GLenum
marshalBufferMode :: BufferMode -> Maybe GLenum
marshalBufferMode x :: BufferMode
x = case BufferMode
x of
NoBuffers -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_NONE
FrontLeftBuffer -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_FRONT_LEFT
FrontRightBuffer -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_FRONT_RIGHT
BackLeftBuffer -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_BACK_LEFT
BackRightBuffer -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_BACK_RIGHT
FrontBuffers -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_FRONT
BackBuffers -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_BACK
LeftBuffers -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_LEFT
RightBuffers -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_RIGHT
FrontAndBackBuffers -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just GLenum
GL_FRONT_AND_BACK
AuxBuffer i :: GLsizei
i
| GLsizei -> GLenum
forall a b. (Integral a, Num b) => a -> b
fromIntegral GLsizei
i GLenum -> GLenum -> Bool
forall a. Ord a => a -> a -> Bool
<= GLenum
maxAuxBuffer -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just (GLenum
GL_AUX0 GLenum -> GLenum -> GLenum
forall a. Num a => a -> a -> a
+ GLsizei -> GLenum
forall a b. (Integral a, Num b) => a -> b
fromIntegral GLsizei
i)
| Bool
otherwise -> Maybe GLenum
forall a. Maybe a
Nothing
FBOColorAttachment i :: GLsizei
i
| GLsizei -> GLenum
forall a b. (Integral a, Num b) => a -> b
fromIntegral GLsizei
i GLenum -> GLenum -> Bool
forall a. Ord a => a -> a -> Bool
<= GLenum
maxColorAttachments -> GLenum -> Maybe GLenum
forall a. a -> Maybe a
Just (GLenum
GL_COLOR_ATTACHMENT0 GLenum -> GLenum -> GLenum
forall a. Num a => a -> a -> a
+ GLsizei -> GLenum
forall a b. (Integral a, Num b) => a -> b
fromIntegral GLsizei
i)
| Bool
otherwise -> Maybe GLenum
forall a. Maybe a
Nothing
unmarshalBufferMode :: GLenum -> BufferMode
unmarshalBufferMode :: GLenum -> BufferMode
unmarshalBufferMode x :: GLenum
x = BufferMode
-> (BufferMode -> BufferMode) -> Maybe BufferMode -> BufferMode
forall b a. b -> (a -> b) -> Maybe a -> b
maybe
(String -> BufferMode
forall a. HasCallStack => String -> a
error ("unmarshalBufferMode: illegal value " String -> ShowS
forall a. [a] -> [a] -> [a]
++ GLenum -> String
forall a. Show a => a -> String
show GLenum
x)) BufferMode -> BufferMode
forall a. a -> a
id (Maybe BufferMode -> BufferMode) -> Maybe BufferMode -> BufferMode
forall a b. (a -> b) -> a -> b
$ GLenum -> Maybe BufferMode
unmarshalBufferModeSafe GLenum
x
unmarshalBufferModeSafe :: GLenum -> Maybe BufferMode
unmarshalBufferModeSafe :: GLenum -> Maybe BufferMode
unmarshalBufferModeSafe x :: GLenum
x
| GLenum
x GLenum -> GLenum -> Bool
forall a. Eq a => a -> a -> Bool
== GLenum
GL_NONE = BufferMode -> Maybe BufferMode
forall a. a -> Maybe a
Just BufferMode
NoBuffers
| GLenum
x GLenum -> GLenum -> Bool
forall a. Eq a => a -> a -> Bool
== GLenum
GL_FRONT_LEFT = BufferMode -> Maybe BufferMode
forall a. a -> Maybe a
Just BufferMode
FrontLeftBuffer
| GLenum
x GLenum -> GLenum -> Bool
forall a. Eq a => a -> a -> Bool
== GLenum
GL_FRONT_RIGHT = BufferMode -> Maybe BufferMode
forall a. a -> Maybe a
Just BufferMode
FrontRightBuffer
| GLenum
x GLenum -> GLenum -> Bool
forall a. Eq a => a -> a -> Bool
== GLenum
GL_BACK_LEFT = BufferMode -> Maybe BufferMode
forall a. a -> Maybe a
Just BufferMode
BackLeftBuffer
| GLenum
x GLenum -> GLenum -> Bool
forall a. Eq a => a -> a -> Bool
== GLenum
GL_BACK_RIGHT = BufferMode -> Maybe BufferMode
forall a. a -> Maybe a
Just BufferMode
BackRightBuffer
| GLenum
x GLenum -> GLenum -> Bool
forall a. Eq a => a -> a -> Bool
== GLenum
GL_FRONT = BufferMode -> Maybe BufferMode
forall a. a -> Maybe a
Just BufferMode
FrontBuffers
| GLenum
x GLenum -> GLenum -> Bool
forall a. Eq a => a -> a -> Bool
== GLenum
GL_BACK = BufferMode -> Maybe BufferMode
forall a. a -> Maybe a
Just BufferMode
BackBuffers
| GLenum
x GLenum -> GLenum -> Bool
forall a. Eq a => a -> a -> Bool
== GLenum
GL_LEFT = BufferMode -> Maybe BufferMode
forall a. a -> Maybe a
Just BufferMode
LeftBuffers
| GLenum
x GLenum -> GLenum -> Bool
forall a. Eq a => a -> a -> Bool
== GLenum
GL_RIGHT = BufferMode -> Maybe BufferMode
forall a. a -> Maybe a
Just BufferMode
RightBuffers
| GLenum
x GLenum -> GLenum -> Bool
forall a. Eq a => a -> a -> Bool
== GLenum
GL_FRONT_AND_BACK = BufferMode -> Maybe BufferMode
forall a. a -> Maybe a
Just BufferMode
FrontAndBackBuffers
| GLenum
GL_AUX0 GLenum -> GLenum -> Bool
forall a. Ord a => a -> a -> Bool
<= GLenum
x Bool -> Bool -> Bool
&& GLenum
x GLenum -> GLenum -> Bool
forall a. Ord a => a -> a -> Bool
<= GLenum
GL_AUX0 GLenum -> GLenum -> GLenum
forall a. Num a => a -> a -> a
+ GLenum
maxAuxBuffer = BufferMode -> Maybe BufferMode
forall a. a -> Maybe a
Just (BufferMode -> Maybe BufferMode)
-> (GLenum -> BufferMode) -> GLenum -> Maybe BufferMode
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GLsizei -> BufferMode
AuxBuffer (GLsizei -> BufferMode)
-> (GLenum -> GLsizei) -> GLenum -> BufferMode
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GLenum -> GLsizei
forall a b. (Integral a, Num b) => a -> b
fromIntegral (GLenum -> Maybe BufferMode) -> GLenum -> Maybe BufferMode
forall a b. (a -> b) -> a -> b
$ GLenum
x GLenum -> GLenum -> GLenum
forall a. Num a => a -> a -> a
- GLenum
GL_AUX0
| GLenum
GL_COLOR_ATTACHMENT0 GLenum -> GLenum -> Bool
forall a. Ord a => a -> a -> Bool
<= GLenum
x Bool -> Bool -> Bool
&& GLenum
x GLenum -> GLenum -> Bool
forall a. Ord a => a -> a -> Bool
<= GLenum
GL_COLOR_ATTACHMENT0 GLenum -> GLenum -> GLenum
forall a. Num a => a -> a -> a
+ GLenum
maxColorAttachments
= BufferMode -> Maybe BufferMode
forall a. a -> Maybe a
Just (BufferMode -> Maybe BufferMode)
-> (GLenum -> BufferMode) -> GLenum -> Maybe BufferMode
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GLsizei -> BufferMode
FBOColorAttachment (GLsizei -> BufferMode)
-> (GLenum -> GLsizei) -> GLenum -> BufferMode
forall b c a. (b -> c) -> (a -> b) -> a -> c
. GLenum -> GLsizei
forall a b. (Integral a, Num b) => a -> b
fromIntegral (GLenum -> Maybe BufferMode) -> GLenum -> Maybe BufferMode
forall a b. (a -> b) -> a -> b
$ GLenum
x GLenum -> GLenum -> GLenum
forall a. Num a => a -> a -> a
- GLenum
GL_COLOR_ATTACHMENT0
| Bool
otherwise = Maybe BufferMode
forall a. Maybe a
Nothing
maxAuxBuffer :: GLenum
maxAuxBuffer :: GLenum
maxAuxBuffer = 246
maxColorAttachments :: GLenum
maxColorAttachments :: GLenum
maxColorAttachments = 16