From 46619c5e93a96864048d0ba83cdbfaaa9c46e44b Mon Sep 17 00:00:00 2001 From: Bixilon Date: Thu, 6 Jan 2022 11:35:16 +0100 Subject: [PATCH] fun effect: invert --- .../world/fun/DefaultFunEffects.kt | 2 ++ .../framebuffer/world/fun/effects/Invert.kt | 35 +++++++++++++++++++ .../framebuffer/world/fun/invert/invert.fsh | 28 +++++++++++++++ 3 files changed, 65 insertions(+) create mode 100644 src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/world/fun/effects/Invert.kt create mode 100644 src/main/resources/assets/minosoft/rendering/shader/framebuffer/world/fun/invert/invert.fsh diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/world/fun/DefaultFunEffects.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/world/fun/DefaultFunEffects.kt index 29877a42b..0b0040323 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/world/fun/DefaultFunEffects.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/world/fun/DefaultFunEffects.kt @@ -16,8 +16,10 @@ package de.bixilon.minosoft.gui.rendering.framebuffer.world.`fun` import de.bixilon.minosoft.data.registries.factory.DefaultFactory import de.bixilon.minosoft.gui.rendering.framebuffer.world.`fun`.effects.BlackWhite import de.bixilon.minosoft.gui.rendering.framebuffer.world.`fun`.effects.Flip +import de.bixilon.minosoft.gui.rendering.framebuffer.world.`fun`.effects.Invert object DefaultFunEffects : DefaultFactory>( BlackWhite, Flip, + Invert, ) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/world/fun/effects/Invert.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/world/fun/effects/Invert.kt new file mode 100644 index 000000000..d2a31a157 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/framebuffer/world/fun/effects/Invert.kt @@ -0,0 +1,35 @@ +/* + * Minosoft + * Copyright (C) 2020-2022 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.gui.rendering.framebuffer.world.`fun`.effects + +import de.bixilon.minosoft.data.registries.ResourceLocation +import de.bixilon.minosoft.gui.rendering.RenderWindow +import de.bixilon.minosoft.gui.rendering.framebuffer.world.`fun`.FunEffect +import de.bixilon.minosoft.gui.rendering.framebuffer.world.`fun`.FunEffectFactory +import de.bixilon.minosoft.gui.rendering.system.base.shader.Shader +import de.bixilon.minosoft.util.KUtil.toResourceLocation + +class Invert(override val renderWindow: RenderWindow) : FunEffect { + override val resourceLocation: ResourceLocation get() = RESOURCE_LOCATION + override val shader: Shader = createShader(fragment = "minosoft:framebuffer/world/fun/invert.fsh".toResourceLocation()) + + + companion object : FunEffectFactory { + override val RESOURCE_LOCATION: ResourceLocation = "minosoft:invert".toResourceLocation() + + override fun build(renderWindow: RenderWindow): Invert { + return Invert(renderWindow) + } + } +} diff --git a/src/main/resources/assets/minosoft/rendering/shader/framebuffer/world/fun/invert/invert.fsh b/src/main/resources/assets/minosoft/rendering/shader/framebuffer/world/fun/invert/invert.fsh new file mode 100644 index 000000000..37998b6a0 --- /dev/null +++ b/src/main/resources/assets/minosoft/rendering/shader/framebuffer/world/fun/invert/invert.fsh @@ -0,0 +1,28 @@ +/* + * Minosoft + * Copyright (C) 2020 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +#version 330 core + +in vec2 finUV; + +out vec4 foutColor; + +uniform sampler2D uColor; + +#include "minosoft:alpha" + +void main() { + foutColor = texture(uColor, vec2(finUV.x, finUV.y)); + foutColor.rgb = 1.0f - foutColor.rgb; + discard_alpha(); +}