packages feed

keid-render-basic-0.1.12.0: src/Global/Resource/Texture/Base.hs

{-# LANGUAGE DeriveAnyClass #-}

module Global.Resource.Texture.Base
  ( Collection(..)
  , Textures
  , sources
  , indices
  ) where

import RIO

import GHC.Generics (Generic1)
import Resource.Collection (Generically1(..))
import Resource.Collection qualified as Collection
import Resource.Source (Source)
import Resource.Source qualified as Source
import Resource.Texture (Texture, Flat)

import Global.Resource.Texture.Base.Paths qualified as Paths

data Collection a = Collection
  { black        :: a -- ^ pure black / fallback texture at index 0
  , flat         :: a -- ^ normal fallback texture
  , ibl_brdf_lut :: a -- ^ BRDF LUT for PBR shaders
  , white        :: a -- ^ pure white
  }
  deriving stock (Show, Functor, Foldable, Traversable, Generic1)
  deriving Applicative via Generically1 Collection

type Textures = Collection (Texture Flat)

sources :: Collection Source
sources = Collection
  { black        = $(Source.embedFile Paths.BLACK_KTX2)
  , flat         = $(Source.embedFile Paths.FLAT_KTX2)
  , ibl_brdf_lut = $(Source.embedFile Paths.IBL_BRDF_LUT_KTX2)
  , white        = $(Source.embedFile Paths.WHITE_KTX2)
  }

indices :: Collection Int32
indices = fmap fst $ Collection.enumerate sources