{-# OPTIONS_GHC -fplugin Foreign.Storable.Generic.Plugin #-} module Resource.Mesh.Lit ( MaterialNodes , MaterialNode(..) ) where import RIO import Foreign.Storable.Generic (GStorable) import RIO.Vector.Storable qualified as Storable import Render.Lit.Material (Material) import Resource.Mesh.Types (HasRange(..), Node) type MaterialNodes = Storable.Vector MaterialNode data MaterialNode = MaterialNode { MaterialNode -> Node mnNode :: Node , MaterialNode -> Int mnMaterialIx :: Int , MaterialNode -> Material mnMaterial :: Material } deriving (MaterialNode -> MaterialNode -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: MaterialNode -> MaterialNode -> Bool $c/= :: MaterialNode -> MaterialNode -> Bool == :: MaterialNode -> MaterialNode -> Bool $c== :: MaterialNode -> MaterialNode -> Bool Eq, Int -> MaterialNode -> ShowS [MaterialNode] -> ShowS MaterialNode -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [MaterialNode] -> ShowS $cshowList :: [MaterialNode] -> ShowS show :: MaterialNode -> String $cshow :: MaterialNode -> String showsPrec :: Int -> MaterialNode -> ShowS $cshowsPrec :: Int -> MaterialNode -> ShowS Show, forall x. Rep MaterialNode x -> MaterialNode forall x. MaterialNode -> Rep MaterialNode x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cto :: forall x. Rep MaterialNode x -> MaterialNode $cfrom :: forall x. MaterialNode -> Rep MaterialNode x Generic) instance GStorable MaterialNode instance HasRange MaterialNode where {-# INLINE getRange #-} getRange :: MaterialNode -> IndexRange getRange = forall a. HasRange a => a -> IndexRange getRange forall b c a. (b -> c) -> (a -> b) -> a -> c . MaterialNode -> Node mnNode {-# INLINE adjustRange #-} adjustRange :: MaterialNode -> Word32 -> MaterialNode adjustRange mn :: MaterialNode mn@MaterialNode{Node mnNode :: Node $sel:mnNode:MaterialNode :: MaterialNode -> Node mnNode} Word32 newFirstIndex = MaterialNode mn { $sel:mnNode:MaterialNode :: Node mnNode = forall a. HasRange a => a -> Word32 -> a adjustRange Node mnNode Word32 newFirstIndex }