packages feed

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