{-# 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
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
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
Ord, Int -> Material -> ShowS
[Material] -> ShowS
Material -> String
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. 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
{ $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
{ $sel:mBaseColorTex:Material :: Int32
mBaseColorTex =
if Int32
mBaseColorTex forall a. Ord a => a -> a -> Bool
> -Int32
1 then
Int32
mBaseColorTex forall a. Num a => a -> a -> a
+ Int32
offset
else
Int32
mBaseColorTex
, $sel:mMetallicRoughnessTex:Material :: Int32
mMetallicRoughnessTex =
if Int32
mMetallicRoughnessTex forall a. Ord a => a -> a -> Bool
> -Int32
1 then
Int32
mMetallicRoughnessTex forall a. Num a => a -> a -> a
+ Int32
offset
else
Int32
mMetallicRoughnessTex
, $sel:mEmissiveTex:Material :: Int32
mEmissiveTex =
if Int32
mEmissiveTex forall a. Ord a => a -> a -> Bool
> -Int32
1 then
Int32
mEmissiveTex forall a. Num a => a -> a -> a
+ Int32
offset
else
Int32
mEmissiveTex
, $sel:mNormalTex:Material :: Int32
mNormalTex =
if Int32
mNormalTex forall a. Ord a => a -> a -> Bool
> -Int32
1 then
Int32
mNormalTex forall a. Num a => a -> a -> a
+ Int32
offset
else
Int32
mNormalTex
, $sel:mAmbientOcclusionTex:Material :: Int32
mAmbientOcclusionTex =
if Int32
mAmbientOcclusionTex forall a. Ord a => a -> a -> Bool
> -Int32
1 then
Int32
mAmbientOcclusionTex 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
..
}