{-# OPTIONS_HADDOCK hide #-}
--------------------------------------------------------------------------------
-- |
-- Module      :  Graphics.Rendering.OpenGL.GL.EdgeFlag
-- 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 EdgeFlag.
--
--------------------------------------------------------------------------------

module Graphics.Rendering.OpenGL.GL.EdgeFlag (
   EdgeFlag(..), marshalEdgeFlag, unmarshalEdgeFlag
) where

import Graphics.Rendering.OpenGL.GL.GLboolean
import Graphics.GL

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

-- | A vertex can begin an edge which lies in the interior of its polygon or on
-- the polygon\'s boundary.

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

marshalEdgeFlag :: EdgeFlag -> GLboolean
marshalEdgeFlag :: EdgeFlag -> GLboolean
marshalEdgeFlag = forall a. Num a => Bool -> a
marshalGLboolean forall b c a. (b -> c) -> (a -> b) -> a -> c
. (EdgeFlag
BeginsBoundaryEdge forall a. Eq a => a -> a -> Bool
==)

unmarshalEdgeFlag :: GLboolean -> EdgeFlag
unmarshalEdgeFlag :: GLboolean -> EdgeFlag
unmarshalEdgeFlag GLboolean
f =
   if forall a. (Eq a, Num a) => a -> Bool
unmarshalGLboolean GLboolean
f then EdgeFlag
BeginsBoundaryEdge else EdgeFlag
BeginsInteriorEdge