--------------------------------------------------------------------------------
-- |
-- Module      :  Graphics.Rendering.OpenGL.GL.FramebufferObjects.RenderbufferTarget
-- Copyright   :  (c) Sven Panne 2019
-- License     :  BSD3
--
-- Maintainer  :  Sven Panne <svenpanne@gmail.com>
-- Stability   :  stable
-- Portability :  portable
--
-- This is a purely internal module for handling RenderbufferTargets.
--
--------------------------------------------------------------------------------

module Graphics.Rendering.OpenGL.GL.FramebufferObjects.RenderbufferTarget (
   RenderbufferTarget(..), marshalRenderbufferTarget, getRBParameteriv,
   Samples(..)
) where

import Foreign.Marshal
import Graphics.Rendering.OpenGL.GL.PeekPoke
import Graphics.GL

--------------------------------------------------------------------------------

data RenderbufferTarget = Renderbuffer
   deriving ( RenderbufferTarget -> RenderbufferTarget -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: RenderbufferTarget -> RenderbufferTarget -> Bool
$c/= :: RenderbufferTarget -> RenderbufferTarget -> Bool
== :: RenderbufferTarget -> RenderbufferTarget -> Bool
$c== :: RenderbufferTarget -> RenderbufferTarget -> Bool
Eq, Eq RenderbufferTarget
RenderbufferTarget -> RenderbufferTarget -> Bool
RenderbufferTarget -> RenderbufferTarget -> Ordering
RenderbufferTarget -> RenderbufferTarget -> RenderbufferTarget
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 :: RenderbufferTarget -> RenderbufferTarget -> RenderbufferTarget
$cmin :: RenderbufferTarget -> RenderbufferTarget -> RenderbufferTarget
max :: RenderbufferTarget -> RenderbufferTarget -> RenderbufferTarget
$cmax :: RenderbufferTarget -> RenderbufferTarget -> RenderbufferTarget
>= :: RenderbufferTarget -> RenderbufferTarget -> Bool
$c>= :: RenderbufferTarget -> RenderbufferTarget -> Bool
> :: RenderbufferTarget -> RenderbufferTarget -> Bool
$c> :: RenderbufferTarget -> RenderbufferTarget -> Bool
<= :: RenderbufferTarget -> RenderbufferTarget -> Bool
$c<= :: RenderbufferTarget -> RenderbufferTarget -> Bool
< :: RenderbufferTarget -> RenderbufferTarget -> Bool
$c< :: RenderbufferTarget -> RenderbufferTarget -> Bool
compare :: RenderbufferTarget -> RenderbufferTarget -> Ordering
$ccompare :: RenderbufferTarget -> RenderbufferTarget -> Ordering
Ord, Int -> RenderbufferTarget -> ShowS
[RenderbufferTarget] -> ShowS
RenderbufferTarget -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [RenderbufferTarget] -> ShowS
$cshowList :: [RenderbufferTarget] -> ShowS
show :: RenderbufferTarget -> String
$cshow :: RenderbufferTarget -> String
showsPrec :: Int -> RenderbufferTarget -> ShowS
$cshowsPrec :: Int -> RenderbufferTarget -> ShowS
Show )

marshalRenderbufferTarget :: RenderbufferTarget -> GLenum
marshalRenderbufferTarget :: RenderbufferTarget -> GLenum
marshalRenderbufferTarget RenderbufferTarget
x = case RenderbufferTarget
x of
    RenderbufferTarget
Renderbuffer -> GLenum
GL_RENDERBUFFER

-----------------------------------------------------------------------------

getRBParameteriv :: RenderbufferTarget -> (GLint -> a) -> GLenum -> IO a
getRBParameteriv :: forall a. RenderbufferTarget -> (GLint -> a) -> GLenum -> IO a
getRBParameteriv RenderbufferTarget
rbt GLint -> a
f GLenum
p =
   forall a b. Storable a => a -> (Ptr a -> IO b) -> IO b
with GLint
0 forall a b. (a -> b) -> a -> b
$ \Ptr GLint
buf -> do
      forall (m :: * -> *).
MonadIO m =>
GLenum -> GLenum -> Ptr GLint -> m ()
glGetRenderbufferParameteriv (RenderbufferTarget -> GLenum
marshalRenderbufferTarget RenderbufferTarget
rbt) GLenum
p Ptr GLint
buf
      forall a b. Storable a => (a -> b) -> Ptr a -> IO b
peek1 GLint -> a
f Ptr GLint
buf
-----------------------------------------------------------------------------

newtype Samples = Samples GLsizei
   deriving ( Samples -> Samples -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: Samples -> Samples -> Bool
$c/= :: Samples -> Samples -> Bool
== :: Samples -> Samples -> Bool
$c== :: Samples -> Samples -> Bool
Eq, Eq Samples
Samples -> Samples -> Bool
Samples -> Samples -> Ordering
Samples -> Samples -> Samples
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 :: Samples -> Samples -> Samples
$cmin :: Samples -> Samples -> Samples
max :: Samples -> Samples -> Samples
$cmax :: Samples -> Samples -> Samples
>= :: Samples -> Samples -> Bool
$c>= :: Samples -> Samples -> Bool
> :: Samples -> Samples -> Bool
$c> :: Samples -> Samples -> Bool
<= :: Samples -> Samples -> Bool
$c<= :: Samples -> Samples -> Bool
< :: Samples -> Samples -> Bool
$c< :: Samples -> Samples -> Bool
compare :: Samples -> Samples -> Ordering
$ccompare :: Samples -> Samples -> Ordering
Ord, Int -> Samples -> ShowS
[Samples] -> ShowS
Samples -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Samples] -> ShowS
$cshowList :: [Samples] -> ShowS
show :: Samples -> String
$cshow :: Samples -> String
showsPrec :: Int -> Samples -> ShowS
$cshowsPrec :: Int -> Samples -> ShowS
Show )