shaders/tone_mapping/toneMapping.tstypescript
import { ShaderProgram } from "../../webgl/ShaderProgram";
import { stringTemplate2 } from "../../utils/shared";

import tone_mapping_vert from "./tone_mapping.vert.glsl";
import tone_mapping_frag from "./tone_mapping.frag.glsl";

export function toneMappingProgram(operator: string = "TONE_MAPPING_REINHARD_WHITE"): ShaderProgram {
    const uniforms: Record<string, string> = {
        hdrBuffer: "sampler2d",
        exposure: "float",
        gamma: "float"
    };

    if (operator === "TONE_MAPPING_REINHARD_WHITE" || operator === "TONE_MAPPING_UNCHARTED2") {
        uniforms.whitepoint = "float";
    }

    return new ShaderProgram("toneMapping", {
        uniforms,
        attributes: {
            corners: "vec3"
        },
        vertexShader: tone_mapping_vert,
        fragmentShader: stringTemplate2(tone_mapping_frag, { operator })
    });
}