{-# LINE 1 "src/SDL/Raw/ImageFilter.hsc" #-}
{-|
{-# LINE 2 "src/SDL/Raw/ImageFilter.hsc" #-}

Module      : SDL.Raw.ImageFilter
Copyright   : (c) 2015 Siniša Biđin
License     : MIT
Maintainer  : sinisa@bidin.eu
Stability   : experimental

Raw bindings to the @SDL2_gfx@ library, specifically the MMX image filter
functionality from @SDL2_imageFilter.h@.

-}

{-# OPTIONS_GHC -fno-warn-missing-signatures #-}

{-# LANGUAGE TemplateHaskell #-}

module SDL.Raw.ImageFilter
  ( mmxDetect
  , mmxOff
  , mmxOn
  , add
  , mean
  , sub
  , absDiff
  , mult
  , multNor
  , multDivBy2
  , multDivBy4
  , bitAnd
  , bitOr
  , div
  , bitNegation
  , addByte
  , addUInt
  , addByteToHalf
  , subByte
  , subUInt
  , shiftRight
  , shiftRightUInt
  , multByByte
  , shiftRightAndMultByByte
  , shiftLeftByte
  , shiftLeftUInt
  , shiftLeft
  , binarizeUsingThreshold
  , clipToRange
  , normalizeLinear
  ) where

import Foreign.C.Types (CUChar(..), CInt(..), CUInt(..))
import Foreign.Ptr     (Ptr)
import Prelude  hiding (div)
import SDL.Raw.Helper  (liftF)

liftF "mmxDetect" "SDL_imageFilterMMXdetect"
  [t|IO CInt|]

liftF "mmxOff" "SDL_imageFilterMMXoff"
  [t|IO ()|]

liftF "mmxOn" "SDL_imageFilterMMXon"
  [t|IO ()|]

liftF "add" "SDL_imageFilterAdd"
  [t|Ptr CUChar -> Ptr CUChar -> Ptr CUChar -> CUInt -> IO CInt|]

liftF "mean" "SDL_imageFilterMean"
  [t|Ptr CUChar -> Ptr CUChar -> Ptr CUChar -> CUInt -> IO CInt|]

liftF "sub" "SDL_imageFilterSub"
  [t|Ptr CUChar -> Ptr CUChar -> Ptr CUChar -> CUInt -> IO CInt|]

liftF "absDiff" "SDL_imageFilterAbsDiff"
  [t|Ptr CUChar -> Ptr CUChar -> Ptr CUChar -> CUInt -> IO CInt|]

liftF "mult" "SDL_imageFilterMult"
  [t|Ptr CUChar -> Ptr CUChar -> Ptr CUChar -> CUInt -> IO CInt|]

liftF "multNor" "SDL_imageFilterMultNor"
  [t|Ptr CUChar -> Ptr CUChar -> Ptr CUChar -> CUInt -> IO CInt|]

liftF "multDivBy2" "SDL_imageFilterMultDivby2"
  [t|Ptr CUChar -> Ptr CUChar -> Ptr CUChar -> CUInt -> IO CInt|]

liftF "multDivBy4" "SDL_imageFilterMultDivby4"
  [t|Ptr CUChar -> Ptr CUChar -> Ptr CUChar -> CUInt -> IO CInt|]

liftF "bitAnd" "SDL_imageFilterBitAnd"
  [t|Ptr CUChar -> Ptr CUChar -> Ptr CUChar -> CUInt -> IO CInt|]

liftF "bitOr" "SDL_imageFilterBitOr"
  [t|Ptr CUChar -> Ptr CUChar -> Ptr CUChar -> CUInt -> IO CInt|]

liftF "div" "SDL_imageFilterDiv"
  [t|Ptr CUChar -> Ptr CUChar -> Ptr CUChar -> CUInt -> IO CInt|]

liftF "bitNegation" "SDL_imageFilterBitNegation"
  [t|Ptr CUChar -> Ptr CUChar -> CUInt -> IO CInt|]

liftF "addByte" "SDL_imageFilterAddByte"
  [t|Ptr CUChar -> Ptr CUChar -> CUInt -> CUChar -> IO CInt|]

liftF "addUInt" "SDL_imageFilterAddUint"
  [t|Ptr CUChar -> Ptr CUChar -> CUInt -> CUInt -> IO CInt|]

liftF "addByteToHalf" "SDL_imageFilterAddByteToHalf"
  [t|Ptr CUChar -> Ptr CUChar -> CUInt -> CUChar -> IO CInt|]

liftF "subByte" "SDL_imageFilterSubByte"
  [t|Ptr CUChar -> Ptr CUChar -> CUInt -> CUChar -> IO CInt|]

liftF "subUInt" "SDL_imageFilterSubUint"
  [t|Ptr CUChar -> Ptr CUChar -> CUInt -> CUInt -> IO CInt|]

liftF "shiftRight" "SDL_imageFilterShiftRight"
  [t|Ptr CUChar -> Ptr CUChar -> CUInt -> CUChar -> IO CInt|]

liftF "shiftRightUInt" "SDL_imageFilterShiftRightUint"
  [t|Ptr CUChar -> Ptr CUChar -> CUInt -> CUChar -> IO CInt|]

liftF "multByByte" "SDL_imageFilterMultByByte"
  [t|Ptr CUChar -> Ptr CUChar -> CUInt -> CUChar -> IO CInt|]

liftF "shiftRightAndMultByByte" "SDL_imageFilterShiftRightAndMultByByte"
  [t|Ptr CUChar -> Ptr CUChar -> CUInt -> CUChar -> CUChar -> IO CInt|]

liftF "shiftLeftByte" "SDL_imageFilterLeftByte"
  [t|Ptr CUChar -> Ptr CUChar -> CUInt -> CUChar -> IO CInt|]

liftF "shiftLeftUInt" "SDL_imageFilterLeftUint"
  [t|Ptr CUChar -> Ptr CUChar -> CUInt -> CUChar -> IO CInt|]

liftF "shiftLeft" "SDL_imageFilterShiftLeft"
  [t|Ptr CUChar -> Ptr CUChar -> CUInt -> CUChar -> IO CInt|]

liftF "binarizeUsingThreshold" "SDL_imageFilterBinarizeUsingThreshold"
  [t|Ptr CUChar -> Ptr CUChar -> CUInt -> CUChar -> IO CInt|]

liftF "clipToRange" "SDL_imageFilterClipToRange"
  [t|Ptr CUChar -> Ptr CUChar -> CUInt -> CUChar -> CUChar -> IO CInt|]

liftF "normalizeLinear" "SDL_imageFilterNormalizeLinear"
  [t|Ptr CUChar -> Ptr CUChar -> CUInt -> CInt -> CInt -> CInt -> CInt -> IO CInt|]