{-# OPTIONS_GHC -fplugin Foreign.Storable.Generic.Plugin #-} module Render.Lit.Material ( Material(..) , shiftTextures ) where import RIO import Foreign.Storable.Generic (GStorable) import Geomancy (Vec2, Vec4, vec2, vec4) import Vulkan.Zero (Zero(..)) data Material = Material { Material -> Vec4 mBaseColor :: Vec4 , Material -> Vec2 mMetallicRoughness :: Vec2 , Material -> Vec4 mEmissive :: Vec4 , Material -> Float mNormalScale :: Float , Material -> Float mAlphaCutoff :: Float , Material -> Int32 mBaseColorTex :: Int32 , Material -> Int32 mMetallicRoughnessTex :: Int32 , Material -> Int32 mEmissiveTex :: Int32 , Material -> Int32 mNormalTex :: Int32 , Material -> Int32 mAmbientOcclusionTex :: Int32 } deriving (Material -> Material -> Bool (Material -> Material -> Bool) -> (Material -> Material -> Bool) -> Eq Material forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: Material -> Material -> Bool $c/= :: Material -> Material -> Bool == :: Material -> Material -> Bool $c== :: Material -> Material -> Bool Eq, Eq Material Eq Material -> (Material -> Material -> Ordering) -> (Material -> Material -> Bool) -> (Material -> Material -> Bool) -> (Material -> Material -> Bool) -> (Material -> Material -> Bool) -> (Material -> Material -> Material) -> (Material -> Material -> Material) -> Ord Material Material -> Material -> Bool Material -> Material -> Ordering Material -> Material -> Material forall a. Eq a -> (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a min :: Material -> Material -> Material $cmin :: Material -> Material -> Material max :: Material -> Material -> Material $cmax :: Material -> Material -> Material >= :: Material -> Material -> Bool $c>= :: Material -> Material -> Bool > :: Material -> Material -> Bool $c> :: Material -> Material -> Bool <= :: Material -> Material -> Bool $c<= :: Material -> Material -> Bool < :: Material -> Material -> Bool $c< :: Material -> Material -> Bool compare :: Material -> Material -> Ordering $ccompare :: Material -> Material -> Ordering $cp1Ord :: Eq Material Ord, Int -> Material -> ShowS [Material] -> ShowS Material -> String (Int -> Material -> ShowS) -> (Material -> String) -> ([Material] -> ShowS) -> Show Material forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [Material] -> ShowS $cshowList :: [Material] -> ShowS show :: Material -> String $cshow :: Material -> String showsPrec :: Int -> Material -> ShowS $cshowsPrec :: Int -> Material -> ShowS Show, (forall x. Material -> Rep Material x) -> (forall x. Rep Material x -> Material) -> Generic Material forall x. Rep Material x -> Material forall x. Material -> Rep Material x forall a. (forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a $cto :: forall x. Rep Material x -> Material $cfrom :: forall x. Material -> Rep Material x Generic) instance GStorable Material instance Zero Material where zero :: Material zero = Material :: Vec4 -> Vec2 -> Vec4 -> Float -> Float -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Material Material { $sel:mBaseColor:Material :: Vec4 mBaseColor = Float -> Float -> Float -> Float -> Vec4 vec4 Float 1.0 Float 1.0 Float 1.0 Float 1.0 , $sel:mMetallicRoughness:Material :: Vec2 mMetallicRoughness = Float -> Float -> Vec2 vec2 Float 0 Float 0.6 , $sel:mEmissive:Material :: Vec4 mEmissive = Float -> Float -> Float -> Float -> Vec4 vec4 Float 0 Float 0 Float 0 Float 0 , $sel:mNormalScale:Material :: Float mNormalScale = Float 1.0 , $sel:mAlphaCutoff:Material :: Float mAlphaCutoff = Float 0.5 , $sel:mBaseColorTex:Material :: Int32 mBaseColorTex = -Int32 1 , $sel:mMetallicRoughnessTex:Material :: Int32 mMetallicRoughnessTex = -Int32 1 , $sel:mNormalTex:Material :: Int32 mNormalTex = -Int32 1 , $sel:mEmissiveTex:Material :: Int32 mEmissiveTex = -Int32 1 , $sel:mAmbientOcclusionTex:Material :: Int32 mAmbientOcclusionTex = -Int32 1 } shiftTextures :: Int32 -> Material -> Material shiftTextures :: Int32 -> Material -> Material shiftTextures Int32 offset Material{Float Int32 Vec2 Vec4 mAmbientOcclusionTex :: Int32 mNormalTex :: Int32 mEmissiveTex :: Int32 mMetallicRoughnessTex :: Int32 mBaseColorTex :: Int32 mAlphaCutoff :: Float mNormalScale :: Float mEmissive :: Vec4 mMetallicRoughness :: Vec2 mBaseColor :: Vec4 $sel:mAmbientOcclusionTex:Material :: Material -> Int32 $sel:mNormalTex:Material :: Material -> Int32 $sel:mEmissiveTex:Material :: Material -> Int32 $sel:mMetallicRoughnessTex:Material :: Material -> Int32 $sel:mBaseColorTex:Material :: Material -> Int32 $sel:mAlphaCutoff:Material :: Material -> Float $sel:mNormalScale:Material :: Material -> Float $sel:mEmissive:Material :: Material -> Vec4 $sel:mMetallicRoughness:Material :: Material -> Vec2 $sel:mBaseColor:Material :: Material -> Vec4 ..} = Material :: Vec4 -> Vec2 -> Vec4 -> Float -> Float -> Int32 -> Int32 -> Int32 -> Int32 -> Int32 -> Material Material { $sel:mBaseColorTex:Material :: Int32 mBaseColorTex = if Int32 mBaseColorTex Int32 -> Int32 -> Bool forall a. Ord a => a -> a -> Bool > -Int32 1 then Int32 mBaseColorTex Int32 -> Int32 -> Int32 forall a. Num a => a -> a -> a + Int32 offset else Int32 mBaseColorTex , $sel:mMetallicRoughnessTex:Material :: Int32 mMetallicRoughnessTex = if Int32 mMetallicRoughnessTex Int32 -> Int32 -> Bool forall a. Ord a => a -> a -> Bool > -Int32 1 then Int32 mMetallicRoughnessTex Int32 -> Int32 -> Int32 forall a. Num a => a -> a -> a + Int32 offset else Int32 mMetallicRoughnessTex , $sel:mEmissiveTex:Material :: Int32 mEmissiveTex = if Int32 mEmissiveTex Int32 -> Int32 -> Bool forall a. Ord a => a -> a -> Bool > -Int32 1 then Int32 mEmissiveTex Int32 -> Int32 -> Int32 forall a. Num a => a -> a -> a + Int32 offset else Int32 mEmissiveTex , $sel:mNormalTex:Material :: Int32 mNormalTex = if Int32 mNormalTex Int32 -> Int32 -> Bool forall a. Ord a => a -> a -> Bool > -Int32 1 then Int32 mNormalTex Int32 -> Int32 -> Int32 forall a. Num a => a -> a -> a + Int32 offset else Int32 mNormalTex , $sel:mAmbientOcclusionTex:Material :: Int32 mAmbientOcclusionTex = if Int32 mAmbientOcclusionTex Int32 -> Int32 -> Bool forall a. Ord a => a -> a -> Bool > -Int32 1 then Int32 mAmbientOcclusionTex Int32 -> Int32 -> Int32 forall a. Num a => a -> a -> a + Int32 offset else Int32 mAmbientOcclusionTex , Float Vec2 Vec4 mAlphaCutoff :: Float mNormalScale :: Float mEmissive :: Vec4 mMetallicRoughness :: Vec2 mBaseColor :: Vec4 $sel:mAlphaCutoff:Material :: Float $sel:mNormalScale:Material :: Float $sel:mEmissive:Material :: Vec4 $sel:mMetallicRoughness:Material :: Vec2 $sel:mBaseColor:Material :: Vec4 .. }