packages feed

wgpu-hs-0.1.0.0: src-internal/WGPU/Internal/Multipurpose.hs

{-# LANGUAGE MultiParamTypeClasses #-}

-- |
-- Module      : WGPU.Internal.Multipurpose
-- Description : Multipurpose
--
-- This is a bit like a "Types" module. It exists to collect things which are
-- somewhat generic and are used in more than one part of the API.
module WGPU.Internal.Multipurpose
  ( -- * Types
    CompareFunction (..),
  )
where

import WGPU.Internal.Memory (ToRaw, raw)
import WGPU.Raw.Generated.Enum.WGPUCompareFunction (WGPUCompareFunction)
import qualified WGPU.Raw.Generated.Enum.WGPUCompareFunction as WGPUCompareFunction

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

-- | Comparison function used for depth and stencil operations.
data CompareFunction
  = CompareFunctionNever
  | CompareFunctionLess
  | CompareFunctionEqual
  | CompareFunctionLessEqual
  | CompareFunctionGreater
  | CompareFunctionNotEqual
  | CompareFunctionGreaterEqual
  | CompareFunctionAlways
  deriving (Eq, Show)

-- | Convert a 'CompareFunction' to its raw value.
instance ToRaw CompareFunction WGPUCompareFunction where
  raw cf =
    pure $
      case cf of
        CompareFunctionNever -> WGPUCompareFunction.Never
        CompareFunctionLess -> WGPUCompareFunction.Less
        CompareFunctionEqual -> WGPUCompareFunction.Equal
        CompareFunctionLessEqual -> WGPUCompareFunction.LessEqual
        CompareFunctionGreater -> WGPUCompareFunction.Greater
        CompareFunctionNotEqual -> WGPUCompareFunction.NotEqual
        CompareFunctionGreaterEqual -> WGPUCompareFunction.GreaterEqual
        CompareFunctionAlways -> WGPUCompareFunction.Always