packages feed

keid-render-basic-0.1.8.0: src/Stage/Loader/Scene.hs

module Stage.Loader.Scene
  ( Process
  , spawn
  ) where

import RIO

import UnliftIO.Resource (MonadResource)

import Engine.Camera qualified as Camera
import Engine.Worker qualified as Worker
import Render.DescSets.Set0 (Scene(..), emptyScene)

type Process = Worker.Merge Scene

spawn
  :: ( MonadResource m
     , MonadUnliftIO m
     , Worker.HasOutput projection
     , Worker.GetOutput projection ~ Camera.Projection 'Camera.Orthographic
     )
  => projection
  -> m Process
spawn = Worker.spawnMerge1 mkScene

mkScene :: Camera.Projection 'Camera.Orthographic -> Scene
mkScene Camera.Projection{..} =
  emptyScene
    { sceneProjection    = projectionTransform
    , sceneInvProjection = projectionInverse
    }