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{..}