module Render.ShadowMap.Code
  ( vert
  ) where

import RIO

import Render.Code (Code, glsl)
import Render.Code.Lit (structLight)
import Render.DescSets.Sun (pattern MAX_VIEWS)

vert :: Code
vert :: Code
vert = String -> Code
forall a. IsString a => String -> a
fromString
  [glsl|
    #version 450
    #extension GL_EXT_multiview : enable

    ${structLight}

    layout(set=0, binding=0, std140) uniform Globals {
      Light lights[${MAX_VIEWS}];
    };

    layout(location = 0) in vec3 vPosition;

    layout(location = 1) in mat4 iModel;

    void main() {
      gl_Position
        = lights[gl_ViewIndex].viewProjection
        * iModel
        * vec4(vPosition, 1.0);
    }
  |]