topkata-0.2.4: Topkata/Textures.hs
module Topkata.Textures (loadBrickTex, loadEyes) where
import Graphics.Rendering.OpenGL
import Data.Maybe
import Paths_topkata (getDataFileName)
import System.FilePath ( (</>) )
import ReadImage (readImageWithSize)
loadBrickTex = do
let brickSize = TextureSize2D 512 256
brickTex <- fmap listToMaybe $ genObjectNames 1
textureBinding Texture2D $= brickTex
textureWrapMode Texture2D S $= (Mirrored, Repeat)
textureWrapMode Texture2D T $= (Mirrored, Repeat)
textureFilter Texture2D $= ((Nearest, Just Nearest), Nearest)
sequence_ $ zipWith (mkTex "brick") [0..9] (reverse $ take 10 $ iterate (* 2) 1)
return brickTex
getDataFileName' fn = getDataFileName ("data" </> fn)
mkTex prefix lvl xsize = do
let fname = prefix ++ show xsize ++ ".rgb"
let ysize = max 1 (xsize `div` 2)
let size = TextureSize2D xsize ysize
path <- getDataFileName' fname
(_, bricksData) <- readImageWithSize path xsize ysize
texImage2D Texture2D NoProxy lvl RGBA' size 0 bricksData
loadEyes name = do
let eyeSize = TextureSize2D 256 256
eyeTex <- fmap listToMaybe $ genObjectNames 1
textureBinding Texture2D $= eyeTex
--textureFilter Texture2D $= ((Nearest, Just Nearest), Nearest)
textureWrapMode Texture2D S $= (Repeated, Clamp)
textureWrapMode Texture2D T $= (Repeated, Clamp)
textureFilter Texture2D $= ((Nearest, Nothing), Nearest)
mkTex name 0 256
return eyeTex