{-# OPTIONS_HADDOCK hide #-}
--------------------------------------------------------------------------------
-- |
-- Module      :  Graphics.Rendering.OpenGL.GL.PolygonMode
-- Copyright   :  (c) Sven Panne 2002-2019
-- License     :  BSD3
-- 
-- Maintainer  :  Sven Panne <svenpanne@gmail.com>
-- Stability   :  stable
-- Portability :  portable
--
-- This is a purely internal module for (un-)marshaling PolygonMode.
--
--------------------------------------------------------------------------------

module Graphics.Rendering.OpenGL.GL.PolygonMode (
   PolygonMode(..), marshalPolygonMode, unmarshalPolygonMode
) where

import Graphics.GL

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

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

marshalPolygonMode :: PolygonMode -> GLenum
marshalPolygonMode :: PolygonMode -> GLenum
marshalPolygonMode x :: PolygonMode
x = case PolygonMode
x of
   Point -> GLenum
GL_POINT
   Line -> GLenum
GL_LINE
   Fill -> GLenum
GL_FILL

unmarshalPolygonMode :: GLenum -> PolygonMode
unmarshalPolygonMode :: GLenum -> PolygonMode
unmarshalPolygonMode x :: GLenum
x
   | GLenum
x GLenum -> GLenum -> Bool
forall a. Eq a => a -> a -> Bool
== GLenum
GL_POINT = PolygonMode
Point
   | GLenum
x GLenum -> GLenum -> Bool
forall a. Eq a => a -> a -> Bool
== GLenum
GL_LINE = PolygonMode
Line
   | GLenum
x GLenum -> GLenum -> Bool
forall a. Eq a => a -> a -> Bool
== GLenum
GL_FILL = PolygonMode
Fill
   | Bool
otherwise = String -> PolygonMode
forall a. HasCallStack => String -> a
error ("unmarshalPolygonMode: illegal value " String -> ShowS
forall a. [a] -> [a] -> [a]
++ GLenum -> String
forall a. Show a => a -> String
show GLenum
x)