keid-core-0.1.8.0: src/Resource/Model/Observer/Example.hs
{-# LANGUAGE DeriveAnyClass #-}
module Resource.Model.Observer.Example where
import RIO
import Control.Monad.Trans.Resource (ResourceT)
import Data.Vector.Storable qualified as Storable
import Engine.Types (HKD, StageRIO)
import Engine.Vulkan.Types (MonadVulkan)
import Engine.Worker qualified as Worker
import Resource.Buffer qualified as Buffer
import Resource.Model.Observer qualified as Observer
data ExampleF f = Example
{ x :: HKD f Float
, y :: HKD f Float
}
deriving (Generic)
type Example = ExampleF Identity
deriving instance Show Example
{- DON'T: instance GStorable Example.
Vertex attributes are packed while GStorable gives something like std140.
-}
type ExampleStores = ExampleF Storable.Vector
deriving instance Show ExampleStores
type ExampleBuffers = ExampleF (Buffer.Allocated 'Buffer.Coherent)
deriving instance Show ExampleBuffers
instance Observer.VertexBuffers ExampleBuffers
instance Observer.UpdateCoherent ExampleBuffers ExampleStores
{-# DEPRECATED new "Just use Observer.newCoherent" #-}
new :: ResourceT (StageRIO st) (Worker.ObserverIO ExampleBuffers)
new = Observer.newCoherent 1 "SomeExample"
{-# DEPRECATED update "Just use Observer.updateCoherent" #-}
update :: MonadVulkan env m => ExampleBuffers -> ExampleStores -> m ExampleBuffers
update = Observer.updateCoherent