gpu-curtains
Version:
gpu-curtains is a 3D WebGPU rendering engine. It can be used as a standalone 3D engine, but also includes extra classes focused on mapping 3d objects to DOM elements; It allows users to synchronize values such as position, sizing, or scale between them.
35 lines (34 loc) • 1.15 kB
JavaScript
//#region src/core/shaders/chunks/fragment/body/apply-tone-mapping.ts
/**
* Apply the corresponding tone mapping to our `outputColor` (`vec4f`).
* @param parameters - Parameters to use for applying tone mapping.
* @param parameters.toneMapping - {@link ToneMappings} to apply if any. Default to `'Khronos'`.
*/
const applyToneMapping = ({ toneMapping = "Khronos", outputColorSpace = "srgb" } = {}) => {
let toneMappingOutput = `
let exposure: f32 = 1.0; // TODO?
outputColor *= exposure;
`;
toneMappingOutput += (() => {
switch (toneMapping) {
case "Khronos": return `
outputColor = vec4(KhronosToneMapping(outputColor.rgb), outputColor.a);
`;
case "Reinhard": return `
outputColor = vec4(ReinhardToneMapping(outputColor.rgb), outputColor.a);
`;
case "Cineon": return `
outputColor = vec4(CineonToneMapping(outputColor.rgb), outputColor.a);
`;
default: return `
outputColor = saturate(outputColor);
`;
}
})();
if (outputColorSpace === "srgb") toneMappingOutput += `
outputColor = linearTosRGB_4(outputColor);
`;
return toneMappingOutput;
};
//#endregion
export { applyToneMapping };