shaders/deferredShading/deferredShading.tstypescript
import { ShaderProgram } from "../../webgl/ShaderProgram";
import { cascadeShadowUniforms, shadowMapUniforms } from "../common/uniforms";

import deferred_vert from "./deferredShading.vert.glsl";
import deferred_frag from "./deferredShading.frag.glsl";

export function deferredShading(): ShaderProgram {
    return new ShaderProgram("deferredShading", {
        uniforms: {
            normalMatrix: "mat3",
            baseTexture: "sampler2d",
            materialsTexture: "sampler2d",
            normalTexture: "sampler2d",
            viewPositionTexture: "sampler2d",
            lightPosition: "vec3",
            lightAmbient: "vec3",
            lightDiffuse: "vec3",
            lightSpecular: "vec4",
            frameOpacity: "float",
            ...shadowMapUniforms,
            ...cascadeShadowUniforms
        },
        attributes: {
            corners: "vec3"
        },
        vertexShader: deferred_vert,
        fragmentShader: deferred_frag
    });
}