mischief-render-0.1.0.0: src/Mischief/Render/Time.hs
module Mischief.Render.Time where
import Mischief.ECS
import Mischief.ECS.Time (Time (elapsed), elapsed, specToSecs, timeMaybe)
import Mischief.Materials.Time
import Mischief.Render.Buffer
import Mischief.Render.Core
data TimeMaterialPlugin
instance Plugin TimeMaterialPlugin where
init = do
runWhen
( do
device <- res @RenderDevice
queue <- res @RenderQueue
pure $ (,) <$> device <*> queue
)
$ \(device, queue) -> do
x <- createBuffer @TimeData device
uploadBuffer queue x (TimeData 0)
insertRes x
schedule @Update $ systems updateTime
updateTime :: System ()
updateTime = do
t <- timeMaybe
case t of
Nothing -> pure ()
Just t' -> do
let t = specToSecs t'.elapsed
query_ $ do
queue <- qres @RenderQueue
buffer <- qres @(Buffer TimeData)
qlift $ uploadBuffer queue buffer (TimeData t)