{-# 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
$c== :: Material -> Material -> Bool
== :: Material -> Material -> Bool
$c/= :: Material -> Material -> Bool
/= :: 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
$ccompare :: Material -> Material -> Ordering
compare :: Material -> Material -> Ordering
$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
>= :: Material -> Material -> Bool
$cmax :: Material -> Material -> Material
max :: Material -> Material -> Material
$cmin :: Material -> Material -> Material
min :: Material -> Material -> 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
$cshowsPrec :: Int -> Material -> ShowS
showsPrec :: Int -> Material -> ShowS
$cshow :: Material -> String
show :: Material -> String
$cshowList :: [Material] -> ShowS
showList :: [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
$cfrom :: forall x. Material -> Rep Material x
from :: forall x. Material -> Rep Material x
$cto :: forall x. Rep Material x -> Material
to :: forall x. Rep Material x -> Material
Generic)
instance GStorable Material
instance Zero Material where
zero :: Material
zero = 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
$sel:mBaseColor:Material :: Material -> Vec4
$sel:mMetallicRoughness:Material :: Material -> Vec2
$sel:mEmissive:Material :: Material -> Vec4
$sel:mNormalScale:Material :: Material -> Float
$sel:mAlphaCutoff:Material :: Material -> Float
$sel:mBaseColorTex:Material :: Material -> Int32
$sel:mMetallicRoughnessTex:Material :: Material -> Int32
$sel:mEmissiveTex:Material :: Material -> Int32
$sel:mNormalTex:Material :: Material -> Int32
$sel:mAmbientOcclusionTex:Material :: Material -> Int32
mBaseColor :: Vec4
mMetallicRoughness :: Vec2
mEmissive :: Vec4
mNormalScale :: Float
mAlphaCutoff :: Float
mBaseColorTex :: Int32
mMetallicRoughnessTex :: Int32
mEmissiveTex :: Int32
mNormalTex :: Int32
mAmbientOcclusionTex :: Int32
..} = 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
$sel:mBaseColor:Material :: Vec4
$sel:mMetallicRoughness:Material :: Vec2
$sel:mEmissive:Material :: Vec4
$sel:mNormalScale:Material :: Float
$sel:mAlphaCutoff:Material :: Float
mBaseColor :: Vec4
mMetallicRoughness :: Vec2
mEmissive :: Vec4
mNormalScale :: Float
mAlphaCutoff :: Float
..
}