{-# LANGUAGE TypeSynonymInstances #-}
module Graphics.Rendering.OpenGL.GL.PixelRectangles.PixelMap (
PixelMapTarget(..), PixelMapComponent, PixelMap(..), GLpixelmap,
maxPixelMapTable, pixelMap, pixelMapIToRGBA, pixelMapRGBAToRGBA,
) where
import Data.List
import Data.StateVar
import Foreign.ForeignPtr
import Foreign.Marshal.Array
import Foreign.Ptr
import Foreign.Storable
import Graphics.Rendering.OpenGL.GL.QueryUtils
import Graphics.Rendering.OpenGL.GL.VertexSpec
import Graphics.GL
data PixelMapTarget =
IToI
| SToS
| IToR
| IToG
| IToB
| IToA
| RToR
| GToG
| BToB
| AToA
deriving ( PixelMapTarget -> PixelMapTarget -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PixelMapTarget -> PixelMapTarget -> Bool
$c/= :: PixelMapTarget -> PixelMapTarget -> Bool
== :: PixelMapTarget -> PixelMapTarget -> Bool
$c== :: PixelMapTarget -> PixelMapTarget -> Bool
Eq, Eq PixelMapTarget
PixelMapTarget -> PixelMapTarget -> Bool
PixelMapTarget -> PixelMapTarget -> Ordering
PixelMapTarget -> PixelMapTarget -> PixelMapTarget
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 :: PixelMapTarget -> PixelMapTarget -> PixelMapTarget
$cmin :: PixelMapTarget -> PixelMapTarget -> PixelMapTarget
max :: PixelMapTarget -> PixelMapTarget -> PixelMapTarget
$cmax :: PixelMapTarget -> PixelMapTarget -> PixelMapTarget
>= :: PixelMapTarget -> PixelMapTarget -> Bool
$c>= :: PixelMapTarget -> PixelMapTarget -> Bool
> :: PixelMapTarget -> PixelMapTarget -> Bool
$c> :: PixelMapTarget -> PixelMapTarget -> Bool
<= :: PixelMapTarget -> PixelMapTarget -> Bool
$c<= :: PixelMapTarget -> PixelMapTarget -> Bool
< :: PixelMapTarget -> PixelMapTarget -> Bool
$c< :: PixelMapTarget -> PixelMapTarget -> Bool
compare :: PixelMapTarget -> PixelMapTarget -> Ordering
$ccompare :: PixelMapTarget -> PixelMapTarget -> Ordering
Ord, Int -> PixelMapTarget -> ShowS
[PixelMapTarget] -> ShowS
PixelMapTarget -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PixelMapTarget] -> ShowS
$cshowList :: [PixelMapTarget] -> ShowS
show :: PixelMapTarget -> String
$cshow :: PixelMapTarget -> String
showsPrec :: Int -> PixelMapTarget -> ShowS
$cshowsPrec :: Int -> PixelMapTarget -> ShowS
Show )
marshalPixelMapTarget :: PixelMapTarget -> GLenum
marshalPixelMapTarget :: PixelMapTarget -> GLenum
marshalPixelMapTarget PixelMapTarget
x = case PixelMapTarget
x of
PixelMapTarget
IToI -> GLenum
GL_PIXEL_MAP_I_TO_I
PixelMapTarget
SToS -> GLenum
GL_PIXEL_MAP_S_TO_S
PixelMapTarget
IToR -> GLenum
GL_PIXEL_MAP_I_TO_R
PixelMapTarget
IToG -> GLenum
GL_PIXEL_MAP_I_TO_G
PixelMapTarget
IToB -> GLenum
GL_PIXEL_MAP_I_TO_B
PixelMapTarget
IToA -> GLenum
GL_PIXEL_MAP_I_TO_A
PixelMapTarget
RToR -> GLenum
GL_PIXEL_MAP_R_TO_R
PixelMapTarget
GToG -> GLenum
GL_PIXEL_MAP_G_TO_G
PixelMapTarget
BToB -> GLenum
GL_PIXEL_MAP_B_TO_B
PixelMapTarget
AToA -> GLenum
GL_PIXEL_MAP_A_TO_A
pixelMapTargetToGetPName :: PixelMapTarget -> PName1I
pixelMapTargetToGetPName :: PixelMapTarget -> PName1I
pixelMapTargetToGetPName PixelMapTarget
x = case PixelMapTarget
x of
PixelMapTarget
IToI -> PName1I
GetPixelMapIToISize
PixelMapTarget
SToS -> PName1I
GetPixelMapSToSSize
PixelMapTarget
IToR -> PName1I
GetPixelMapIToRSize
PixelMapTarget
IToG -> PName1I
GetPixelMapIToGSize
PixelMapTarget
IToB -> PName1I
GetPixelMapIToBSize
PixelMapTarget
IToA -> PName1I
GetPixelMapIToASize
PixelMapTarget
RToR -> PName1I
GetPixelMapRToRSize
PixelMapTarget
GToG -> PName1I
GetPixelMapGToGSize
PixelMapTarget
BToB -> PName1I
GetPixelMapBToBSize
PixelMapTarget
AToA -> PName1I
GetPixelMapAToASize
maxPixelMapTable :: GettableStateVar GLsizei
maxPixelMapTable :: GettableStateVar GLint
maxPixelMapTable = forall a. IO a -> IO a
makeGettableStateVar forall a b. (a -> b) -> a -> b
$ forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
getSizei1 forall a. a -> a
id PName1I
GetMaxPixelMapTable
class Storable c => PixelMapComponent c where
getPixelMapv :: GLenum -> Ptr c -> IO ()
pixelMapv :: GLenum -> GLsizei -> Ptr c -> IO ()
instance PixelMapComponent GLushort where
getPixelMapv :: GLenum -> Ptr GLushort -> IO ()
getPixelMapv = forall (m :: * -> *). MonadIO m => GLenum -> Ptr GLushort -> m ()
glGetPixelMapusv
pixelMapv :: GLenum -> GLint -> Ptr GLushort -> IO ()
pixelMapv = forall (m :: * -> *).
MonadIO m =>
GLenum -> GLint -> Ptr GLushort -> m ()
glPixelMapusv
instance PixelMapComponent GLuint where
getPixelMapv :: GLenum -> Ptr GLenum -> IO ()
getPixelMapv = forall (m :: * -> *). MonadIO m => GLenum -> Ptr GLenum -> m ()
glGetPixelMapuiv
pixelMapv :: GLenum -> GLint -> Ptr GLenum -> IO ()
pixelMapv = forall (m :: * -> *).
MonadIO m =>
GLenum -> GLint -> Ptr GLenum -> m ()
glPixelMapuiv
instance PixelMapComponent GLfloat where
getPixelMapv :: GLenum -> Ptr GLfloat -> IO ()
getPixelMapv = forall (m :: * -> *). MonadIO m => GLenum -> Ptr GLfloat -> m ()
glGetPixelMapfv
pixelMapv :: GLenum -> GLint -> Ptr GLfloat -> IO ()
pixelMapv = forall (m :: * -> *).
MonadIO m =>
GLenum -> GLint -> Ptr GLfloat -> m ()
glPixelMapfv
class PixelMap m where
withNewPixelMap ::
PixelMapComponent c => Int -> (Ptr c -> IO ()) -> IO (m c)
withPixelMap ::
PixelMapComponent c => m c -> (Int -> Ptr c -> IO a) -> IO a
newPixelMap :: PixelMapComponent c => [c] -> IO (m c)
getPixelMapComponents :: PixelMapComponent c => m c -> IO [c]
withNewPixelMap Int
size Ptr c -> IO ()
act =
forall a b. Storable a => Int -> (Ptr a -> IO b) -> IO b
allocaArray Int
size forall a b. (a -> b) -> a -> b
$ \Ptr c
p -> do
Ptr c -> IO ()
act Ptr c
p
[c]
components <- forall a. Storable a => Int -> Ptr a -> IO [a]
peekArray Int
size Ptr c
p
forall (m :: * -> *) c.
(PixelMap m, PixelMapComponent c) =>
[c] -> IO (m c)
newPixelMap [c]
components
withPixelMap m c
m Int -> Ptr c -> IO a
act = do
[c]
components <- forall (m :: * -> *) c.
(PixelMap m, PixelMapComponent c) =>
m c -> IO [c]
getPixelMapComponents m c
m
forall a b. Storable a => [a] -> (Int -> Ptr a -> IO b) -> IO b
withArrayLen [c]
components Int -> Ptr c -> IO a
act
newPixelMap [c]
elements =
forall (m :: * -> *) c.
(PixelMap m, PixelMapComponent c) =>
Int -> (Ptr c -> IO ()) -> IO (m c)
withNewPixelMap (forall (t :: * -> *) a. Foldable t => t a -> Int
length [c]
elements) forall a b. (a -> b) -> a -> b
$ forall a b c. (a -> b -> c) -> b -> a -> c
flip forall a. Storable a => Ptr a -> [a] -> IO ()
pokeArray [c]
elements
getPixelMapComponents m c
m =
forall (m :: * -> *) c a.
(PixelMap m, PixelMapComponent c) =>
m c -> (Int -> Ptr c -> IO a) -> IO a
withPixelMap m c
m forall a. Storable a => Int -> Ptr a -> IO [a]
peekArray
data GLpixelmap a = GLpixelmap Int (ForeignPtr a)
deriving ( GLpixelmap a -> GLpixelmap a -> Bool
forall a. GLpixelmap a -> GLpixelmap a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: GLpixelmap a -> GLpixelmap a -> Bool
$c/= :: forall a. GLpixelmap a -> GLpixelmap a -> Bool
== :: GLpixelmap a -> GLpixelmap a -> Bool
$c== :: forall a. GLpixelmap a -> GLpixelmap a -> Bool
Eq, GLpixelmap a -> GLpixelmap a -> Bool
GLpixelmap a -> GLpixelmap a -> Ordering
forall a. Eq (GLpixelmap a)
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
forall a. GLpixelmap a -> GLpixelmap a -> Bool
forall a. GLpixelmap a -> GLpixelmap a -> Ordering
forall a. GLpixelmap a -> GLpixelmap a -> GLpixelmap a
min :: GLpixelmap a -> GLpixelmap a -> GLpixelmap a
$cmin :: forall a. GLpixelmap a -> GLpixelmap a -> GLpixelmap a
max :: GLpixelmap a -> GLpixelmap a -> GLpixelmap a
$cmax :: forall a. GLpixelmap a -> GLpixelmap a -> GLpixelmap a
>= :: GLpixelmap a -> GLpixelmap a -> Bool
$c>= :: forall a. GLpixelmap a -> GLpixelmap a -> Bool
> :: GLpixelmap a -> GLpixelmap a -> Bool
$c> :: forall a. GLpixelmap a -> GLpixelmap a -> Bool
<= :: GLpixelmap a -> GLpixelmap a -> Bool
$c<= :: forall a. GLpixelmap a -> GLpixelmap a -> Bool
< :: GLpixelmap a -> GLpixelmap a -> Bool
$c< :: forall a. GLpixelmap a -> GLpixelmap a -> Bool
compare :: GLpixelmap a -> GLpixelmap a -> Ordering
$ccompare :: forall a. GLpixelmap a -> GLpixelmap a -> Ordering
Ord, Int -> GLpixelmap a -> ShowS
forall a. Int -> GLpixelmap a -> ShowS
forall a. [GLpixelmap a] -> ShowS
forall a. GLpixelmap a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [GLpixelmap a] -> ShowS
$cshowList :: forall a. [GLpixelmap a] -> ShowS
show :: GLpixelmap a -> String
$cshow :: forall a. GLpixelmap a -> String
showsPrec :: Int -> GLpixelmap a -> ShowS
$cshowsPrec :: forall a. Int -> GLpixelmap a -> ShowS
Show )
instance PixelMap GLpixelmap where
withNewPixelMap :: forall c.
PixelMapComponent c =>
Int -> (Ptr c -> IO ()) -> IO (GLpixelmap c)
withNewPixelMap Int
size Ptr c -> IO ()
f = do
ForeignPtr c
fp <- forall a. Storable a => Int -> IO (ForeignPtr a)
mallocForeignPtrArray Int
size
forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr c
fp Ptr c -> IO ()
f
forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ forall a. Int -> ForeignPtr a -> GLpixelmap a
GLpixelmap Int
size ForeignPtr c
fp
withPixelMap :: forall c a.
PixelMapComponent c =>
GLpixelmap c -> (Int -> Ptr c -> IO a) -> IO a
withPixelMap (GLpixelmap Int
size ForeignPtr c
fp) Int -> Ptr c -> IO a
f = forall a b. ForeignPtr a -> (Ptr a -> IO b) -> IO b
withForeignPtr ForeignPtr c
fp (Int -> Ptr c -> IO a
f Int
size)
pixelMap :: (PixelMap m, PixelMapComponent c) => PixelMapTarget -> StateVar (m c)
pixelMap :: forall (m :: * -> *) c.
(PixelMap m, PixelMapComponent c) =>
PixelMapTarget -> StateVar (m c)
pixelMap PixelMapTarget
pm =
forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar
(do Int
size <- PixelMapTarget -> IO Int
pixelMapSize PixelMapTarget
pm
forall (m :: * -> *) c.
(PixelMap m, PixelMapComponent c) =>
Int -> (Ptr c -> IO ()) -> IO (m c)
withNewPixelMap Int
size forall a b. (a -> b) -> a -> b
$ forall c. PixelMapComponent c => GLenum -> Ptr c -> IO ()
getPixelMapv (PixelMapTarget -> GLenum
marshalPixelMapTarget PixelMapTarget
pm))
(\m c
theMap -> forall (m :: * -> *) c a.
(PixelMap m, PixelMapComponent c) =>
m c -> (Int -> Ptr c -> IO a) -> IO a
withPixelMap m c
theMap forall a b. (a -> b) -> a -> b
$ forall c. PixelMapComponent c => GLenum -> GLint -> Ptr c -> IO ()
pixelMapv (PixelMapTarget -> GLenum
marshalPixelMapTarget PixelMapTarget
pm) forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall a b. (Integral a, Num b) => a -> b
fromIntegral)
pixelMapSize :: PixelMapTarget -> IO Int
pixelMapSize :: PixelMapTarget -> IO Int
pixelMapSize = forall p a. GetPName1I p => (GLint -> a) -> p -> IO a
getInteger1 forall a b. (Integral a, Num b) => a -> b
fromIntegral forall b c a. (b -> c) -> (a -> b) -> a -> c
. PixelMapTarget -> PName1I
pixelMapTargetToGetPName
pixelMapIToRGBA :: PixelMapComponent c => StateVar [Color4 c]
pixelMapIToRGBA :: forall c. PixelMapComponent c => StateVar [Color4 c]
pixelMapIToRGBA = forall c.
PixelMapComponent c =>
(PixelMapTarget, PixelMapTarget, PixelMapTarget, PixelMapTarget)
-> StateVar [Color4 c]
pixelMapXToY (PixelMapTarget
IToR, PixelMapTarget
IToG, PixelMapTarget
IToB, PixelMapTarget
IToA)
pixelMapRGBAToRGBA :: PixelMapComponent c => StateVar [Color4 c]
pixelMapRGBAToRGBA :: forall c. PixelMapComponent c => StateVar [Color4 c]
pixelMapRGBAToRGBA = forall c.
PixelMapComponent c =>
(PixelMapTarget, PixelMapTarget, PixelMapTarget, PixelMapTarget)
-> StateVar [Color4 c]
pixelMapXToY (PixelMapTarget
RToR, PixelMapTarget
GToG, PixelMapTarget
BToB, PixelMapTarget
AToA)
pixelMapXToY :: PixelMapComponent c =>
(PixelMapTarget, PixelMapTarget, PixelMapTarget, PixelMapTarget)
-> StateVar [Color4 c]
pixelMapXToY :: forall c.
PixelMapComponent c =>
(PixelMapTarget, PixelMapTarget, PixelMapTarget, PixelMapTarget)
-> StateVar [Color4 c]
pixelMapXToY (PixelMapTarget, PixelMapTarget, PixelMapTarget, PixelMapTarget)
targets =
forall a. IO a -> (a -> IO ()) -> StateVar a
makeStateVar (forall c.
PixelMapComponent c =>
(PixelMapTarget, PixelMapTarget, PixelMapTarget, PixelMapTarget)
-> IO [Color4 c]
getPixelMapXToY (PixelMapTarget, PixelMapTarget, PixelMapTarget, PixelMapTarget)
targets) (forall c.
PixelMapComponent c =>
(PixelMapTarget, PixelMapTarget, PixelMapTarget, PixelMapTarget)
-> [Color4 c] -> IO ()
setPixelMapXToY (PixelMapTarget, PixelMapTarget, PixelMapTarget, PixelMapTarget)
targets)
getPixelMapXToY :: PixelMapComponent c
=> (PixelMapTarget, PixelMapTarget, PixelMapTarget, PixelMapTarget)
-> IO [Color4 c]
getPixelMapXToY :: forall c.
PixelMapComponent c =>
(PixelMapTarget, PixelMapTarget, PixelMapTarget, PixelMapTarget)
-> IO [Color4 c]
getPixelMapXToY (PixelMapTarget
toR, PixelMapTarget
toG, PixelMapTarget
toB, PixelMapTarget
toA) = do
forall c a.
PixelMapComponent c =>
PixelMapTarget -> (Int -> Ptr c -> IO a) -> IO a
withPixelMapFor PixelMapTarget
toR forall a b. (a -> b) -> a -> b
$ \Int
sizeR Ptr c
bufR ->
forall c a.
PixelMapComponent c =>
PixelMapTarget -> (Int -> Ptr c -> IO a) -> IO a
withPixelMapFor PixelMapTarget
toG forall a b. (a -> b) -> a -> b
$ \Int
sizeG Ptr c
bufG ->
forall c a.
PixelMapComponent c =>
PixelMapTarget -> (Int -> Ptr c -> IO a) -> IO a
withPixelMapFor PixelMapTarget
toB forall a b. (a -> b) -> a -> b
$ \Int
sizeB Ptr c
bufB ->
forall c a.
PixelMapComponent c =>
PixelMapTarget -> (Int -> Ptr c -> IO a) -> IO a
withPixelMapFor PixelMapTarget
toA forall a b. (a -> b) -> a -> b
$ \Int
sizeA Ptr c
bufA -> do
let maxSize :: Int
maxSize = Int
sizeR forall a. Ord a => a -> a -> a
`max` Int
sizeG forall a. Ord a => a -> a -> a
`max` Int
sizeB forall a. Ord a => a -> a -> a
`max` Int
sizeA
[c]
r <- forall a. Storable a => Int -> Ptr a -> Int -> IO [a]
sample Int
sizeR Ptr c
bufR Int
maxSize
[c]
g <- forall a. Storable a => Int -> Ptr a -> Int -> IO [a]
sample Int
sizeR Ptr c
bufG Int
maxSize
[c]
b <- forall a. Storable a => Int -> Ptr a -> Int -> IO [a]
sample Int
sizeR Ptr c
bufB Int
maxSize
[c]
a <- forall a. Storable a => Int -> Ptr a -> Int -> IO [a]
sample Int
sizeR Ptr c
bufA Int
maxSize
forall (m :: * -> *) a. Monad m => a -> m a
return forall a b. (a -> b) -> a -> b
$ forall a b c d e.
(a -> b -> c -> d -> e) -> [a] -> [b] -> [c] -> [d] -> [e]
zipWith4 forall a. a -> a -> a -> a -> Color4 a
Color4 [c]
r [c]
g [c]
b [c]
a
withPixelMapFor ::
PixelMapComponent c => PixelMapTarget -> (Int -> Ptr c -> IO a) -> IO a
withPixelMapFor :: forall c a.
PixelMapComponent c =>
PixelMapTarget -> (Int -> Ptr c -> IO a) -> IO a
withPixelMapFor PixelMapTarget
target Int -> Ptr c -> IO a
f = do
GLpixelmap c
theMap <- forall t a (m :: * -> *). (HasGetter t a, MonadIO m) => t -> m a
get (forall (m :: * -> *) c.
(PixelMap m, PixelMapComponent c) =>
PixelMapTarget -> StateVar (m c)
pixelMap PixelMapTarget
target)
forall c a.
PixelMapComponent c =>
GLpixelmap c -> (Int -> Ptr c -> IO a) -> IO a
withGLpixelmap GLpixelmap c
theMap Int -> Ptr c -> IO a
f
withGLpixelmap :: PixelMapComponent c
=> GLpixelmap c -> (Int -> Ptr c -> IO a) -> IO a
withGLpixelmap :: forall c a.
PixelMapComponent c =>
GLpixelmap c -> (Int -> Ptr c -> IO a) -> IO a
withGLpixelmap = forall (m :: * -> *) c a.
(PixelMap m, PixelMapComponent c) =>
m c -> (Int -> Ptr c -> IO a) -> IO a
withPixelMap
sample :: Storable a => Int -> Ptr a -> Int -> IO [a]
sample :: forall a. Storable a => Int -> Ptr a -> Int -> IO [a]
sample Int
len Ptr a
ptr Int
newLen = GLfloat -> [a] -> IO [a]
f (forall a b. (Integral a, Num b) => a -> b
fromIntegral (Int
newLen forall a. Num a => a -> a -> a
- Int
1)) []
where scale :: Float
scale :: GLfloat
scale = forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
len forall a. Fractional a => a -> a -> a
/ forall a b. (Integral a, Num b) => a -> b
fromIntegral Int
newLen
f :: GLfloat -> [a] -> IO [a]
f GLfloat
l [a]
acc | GLfloat
l forall a. Ord a => a -> a -> Bool
< GLfloat
0 = forall (m :: * -> *) a. Monad m => a -> m a
return [a]
acc
| Bool
otherwise = do a
e <- forall a. Storable a => Ptr a -> Int -> IO a
peekElemOff Ptr a
ptr (forall a b. (RealFrac a, Integral b) => a -> b
truncate (GLfloat
l forall a. Num a => a -> a -> a
* GLfloat
scale))
GLfloat -> [a] -> IO [a]
f (GLfloat
l forall a. Num a => a -> a -> a
- GLfloat
1) (a
e forall a. a -> [a] -> [a]
: [a]
acc)
setPixelMapXToY :: PixelMapComponent c
=> (PixelMapTarget, PixelMapTarget, PixelMapTarget, PixelMapTarget)
-> [Color4 c] -> IO ()
setPixelMapXToY :: forall c.
PixelMapComponent c =>
(PixelMapTarget, PixelMapTarget, PixelMapTarget, PixelMapTarget)
-> [Color4 c] -> IO ()
setPixelMapXToY (PixelMapTarget
toR, PixelMapTarget
toG, PixelMapTarget
toB, PixelMapTarget
toA) [Color4 c]
colors = do
(forall (m :: * -> *) c.
(PixelMap m, PixelMapComponent c) =>
PixelMapTarget -> StateVar (m c)
pixelMap PixelMapTarget
toR forall t a (m :: * -> *).
(HasSetter t a, MonadIO m) =>
t -> a -> m ()
$=) forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< forall c. PixelMapComponent c => [c] -> IO (GLpixelmap c)
newGLpixelmap [ c
r | Color4 c
r c
_ c
_ c
_ <- [Color4 c]
colors ]
(forall (m :: * -> *) c.
(PixelMap m, PixelMapComponent c) =>
PixelMapTarget -> StateVar (m c)
pixelMap PixelMapTarget
toG forall t a (m :: * -> *).
(HasSetter t a, MonadIO m) =>
t -> a -> m ()
$=) forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< forall c. PixelMapComponent c => [c] -> IO (GLpixelmap c)
newGLpixelmap [ c
g | Color4 c
_ c
g c
_ c
_ <- [Color4 c]
colors ]
(forall (m :: * -> *) c.
(PixelMap m, PixelMapComponent c) =>
PixelMapTarget -> StateVar (m c)
pixelMap PixelMapTarget
toB forall t a (m :: * -> *).
(HasSetter t a, MonadIO m) =>
t -> a -> m ()
$=) forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< forall c. PixelMapComponent c => [c] -> IO (GLpixelmap c)
newGLpixelmap [ c
b | Color4 c
_ c
_ c
b c
_ <- [Color4 c]
colors ]
(forall (m :: * -> *) c.
(PixelMap m, PixelMapComponent c) =>
PixelMapTarget -> StateVar (m c)
pixelMap PixelMapTarget
toA forall t a (m :: * -> *).
(HasSetter t a, MonadIO m) =>
t -> a -> m ()
$=) forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<< forall c. PixelMapComponent c => [c] -> IO (GLpixelmap c)
newGLpixelmap [ c
a | Color4 c
_ c
_ c
_ c
a <- [Color4 c]
colors ]
newGLpixelmap :: PixelMapComponent c => [c] -> IO (GLpixelmap c)
newGLpixelmap :: forall c. PixelMapComponent c => [c] -> IO (GLpixelmap c)
newGLpixelmap = forall (m :: * -> *) c.
(PixelMap m, PixelMapComponent c) =>
[c] -> IO (m c)
newPixelMap