{-# LANGUAGE CPP        #-}
{-# LANGUAGE RankNTypes #-}

module Graphics.Gloss.Accelerate.Render
  where

import Data.Array.Accelerate
#ifdef ACCELERATE_CUDA_BACKEND
import Data.Array.Accelerate.CUDA
#else
import Data.Array.Accelerate.Interpreter
#endif


-- | The type of executing Accelerate computations. The CUDA and Interpreter
--   backends both provide a function 'run1' that can be used.
--
--   Some variants of the display functions take an argument of this type, which
--   determine how computations are executed.
--
type Render = forall a b. (Arrays a, Arrays b) => (Acc a -> Acc b) -> a -> b


-- | The set of backends available to execute Accelerate programs. The default
--   chooses the fastest available, which is currently the CUDA backend. This is
--   controlled via the import statements.
--
defaultRender :: Render
defaultRender =  run1