packages feed

mischief-render-0.1.0.0: src/Mischief/Materials/Time.hs

module Mischief.Materials.Time where

import Mischief.Materials
import Mischief.Render.Material.Definition
import Prelude ()
import Prelude qualified

data TimeMaterial

newtype TimeData f = TimeData (Field f Float)
  deriving stock (Generic)
  deriving anyclass (Bufferable)

newtype Bindings f = Bindings {x :: Uniform f (TimeData f)}
  deriving stock (Generic)
  deriving anyclass (Bindable)

instance Material TimeMaterial where
  type VI TimeMaterial = DefaultVI
  type VO TimeMaterial = DefaultVO

  type IsPhantom TimeMaterial = Prelude.True

  type B TimeMaterial = Bindings

  fetch =
    FetchBindings
      { camera = \_ -> qres @(Buffer TimeData),
        mesh = \_ -> pure (),
        result = \t _ -> Bindings t
      }

getTime :: Shader TimeMaterial Float
getTime = do
  Bindings (TimeData t) <- bindings
  pure t