From 4527929442e9850426c5e9fa41c775922a2adde8 Mon Sep 17 00:00:00 2001 From: Silverlan Date: Sun, 3 Nov 2024 11:06:16 +0100 Subject: [PATCH] feat: add black-and-white shader --- .../lua/autorun/client/cl_bw_shader.lua | 9 +++++++++ .../addons/bw_shader/lua/shaders/bw/shader.lua | 16 ++++++++++++++++ .../scripts/localization/en/texts/bw_shader.txt | 1 + .../bw_shader/shaders/programs/scene/bw.frag | 17 +++++++++++++++++ 4 files changed, 43 insertions(+) create mode 100644 assets/addons/bw_shader/lua/autorun/client/cl_bw_shader.lua create mode 100644 assets/addons/bw_shader/lua/shaders/bw/shader.lua create mode 100644 assets/addons/bw_shader/scripts/localization/en/texts/bw_shader.txt create mode 100644 assets/addons/bw_shader/shaders/programs/scene/bw.frag diff --git a/assets/addons/bw_shader/lua/autorun/client/cl_bw_shader.lua b/assets/addons/bw_shader/lua/autorun/client/cl_bw_shader.lua new file mode 100644 index 000000000..671171f31 --- /dev/null +++ b/assets/addons/bw_shader/lua/autorun/client/cl_bw_shader.lua @@ -0,0 +1,9 @@ +--[[ + Copyright (C) 2024 Silverlan + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. +]] + +include("/shaders/bw/shader.lua") diff --git a/assets/addons/bw_shader/lua/shaders/bw/shader.lua b/assets/addons/bw_shader/lua/shaders/bw/shader.lua new file mode 100644 index 000000000..208d9b5f0 --- /dev/null +++ b/assets/addons/bw_shader/lua/shaders/bw/shader.lua @@ -0,0 +1,16 @@ +--[[ + Copyright (C) 2024 Silverlan + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at http://mozilla.org/MPL/2.0/. +]] + +local Shader = util.register_class("shader.BwShader", shader.BasePbr) + +Shader.FragmentShader = "programs/scene/bw" +Shader.VertexShader = "programs/scene/textured" +function Shader:InitializePipeline(pipelineInfo, pipelineIdx) + shader.BasePbr.InitializePipeline(self, pipelineInfo, pipelineIdx) +end +shader.register("bw", Shader) diff --git a/assets/addons/bw_shader/scripts/localization/en/texts/bw_shader.txt b/assets/addons/bw_shader/scripts/localization/en/texts/bw_shader.txt new file mode 100644 index 000000000..e38150b50 --- /dev/null +++ b/assets/addons/bw_shader/scripts/localization/en/texts/bw_shader.txt @@ -0,0 +1 @@ +c_bw = "Black and White" \ No newline at end of file diff --git a/assets/addons/bw_shader/shaders/programs/scene/bw.frag b/assets/addons/bw_shader/shaders/programs/scene/bw.frag new file mode 100644 index 000000000..980e28087 --- /dev/null +++ b/assets/addons/bw_shader/shaders/programs/scene/bw.frag @@ -0,0 +1,17 @@ +#version 440 + +#extension GL_ARB_separate_shader_objects : enable +#extension GL_ARB_shading_language_420pack : enable + +#include "/programs/scene/pbr/fs_core.glsl" + +void main() +{ + vec2 uv = get_uv_coordinates(); + vec4 albedoColor = fetch_albedo_map(uv, get_instance_color()); + fs_color = calc_pbr(albedoColor, uv, u_pushConstants.debugMode); + float luminance = calc_luminance(fs_color.rgb); + fs_color.rgb = vec3(luminance, luminance, luminance); + if(CSPEC_BLOOM_OUTPUT_ENABLED == 1) + extract_bright_color(fs_color, u_renderer.bloomThreshold); +}