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