packages feed

keid-render-basic-0.1.12.0: src/Resource/Font.hs

module Resource.Font
  ( collectionTextures

  , Font(..)
  , allocate
  ) where

import RIO

import GHC.Stack (withFrozenCallStack)
import RIO.Vector qualified as Vector
import UnliftIO.Resource qualified as Resource
import Vulkan.Core10 qualified as Vk

import Engine.Vulkan.Types (MonadVulkan, Queues)
import Resource.Font.Ktxf qualified as Ktxf
import Resource.Source (Source)
import Resource.Texture (Texture, Flat)
import Resource.Texture.Ktx2 qualified as Ktx2

-- * General collection tools

collectionTextures :: Foldable collection => collection Font -> Vector (Texture Flat)
collectionTextures = Vector.fromList . map texture . toList

-- * Individual fonts

data Font = Font
  { bundle :: Ktxf.Bundle
  , texture   :: Texture Flat
  }

allocate
  :: ( HasCallStack
     , MonadVulkan env m
     , HasLogFunc env
     , MonadThrow m
     , Resource.MonadResource m
     )
  => Queues Vk.CommandPool
  -> Source
  -> m Font
allocate pools source = do
  bundle <- withFrozenCallStack $ Ktxf.load source
  texture <- withFrozenCallStack $ Ktx2.load pools source
  pure Font{..}