packages feed

keid-render-basic-0.1.8.0: src/Render/Lit/Material/Model.hs

{-# LANGUAGE DeriveAnyClass #-}

module Render.Lit.Material.Model
  ( Model
  , Vertex
  , VertexAttrs(..)
  , InstanceAttrs
  , Material
  ) where

import RIO

import Geomancy (Transform, Vec2)
import Geomancy.Vec3 qualified as Vec3
import Geomancy.Gl.Block (Block)
import Geomancy.Gl.Block qualified as Block

import Engine.Vulkan.Format (HasVkFormat)
import Render.Lit.Material (Material)
import Resource.Model qualified as Model

type Model buf = Model.Indexed buf Vec3.Packed VertexAttrs
type Vertex = Model.Vertex3d VertexAttrs

data VertexAttrs = VertexAttrs
  { vaTexCoord0 :: Vec2
  , vaTexCoord1 :: Vec2
  , vaNormal    :: Vec3.Packed
  , vaTangent   :: Vec3.Packed
  , vaMaterial  :: Word32
  }
  deriving (Eq, Ord, Show, Generic, Block, HasVkFormat)
  deriving Storable via (Block.Packed VertexAttrs)

type InstanceAttrs = Transform