Add custom position/tex/color shader without fragment discarding
This commit is contained in:
parent
f5a9e98c6f
commit
57b2b64ff9
@ -1,11 +1,13 @@
|
|||||||
package ru.dbotthepony.mc.otm.mixin;
|
package ru.dbotthepony.mc.otm.mixin;
|
||||||
|
|
||||||
import net.minecraft.client.renderer.GameRenderer;
|
import net.minecraft.client.renderer.GameRenderer;
|
||||||
|
import net.minecraft.server.packs.resources.ResourceProvider;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
import ru.dbotthepony.mc.otm.client.render.GlitchRenderer;
|
import ru.dbotthepony.mc.otm.client.render.GlitchRenderer;
|
||||||
|
import ru.dbotthepony.mc.otm.client.render.RenderHelperKt;
|
||||||
|
|
||||||
@Mixin(GameRenderer.class)
|
@Mixin(GameRenderer.class)
|
||||||
public class MixinGameRenderer {
|
public class MixinGameRenderer {
|
||||||
@ -19,4 +21,12 @@ public class MixinGameRenderer {
|
|||||||
private void render(float p_109094_, long p_109095_, boolean p_109096_, CallbackInfo ci) {
|
private void render(float p_109094_, long p_109095_, boolean p_109096_, CallbackInfo ci) {
|
||||||
GlitchRenderer.render();
|
GlitchRenderer.render();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Inject(
|
||||||
|
method = "reloadShaders(Lnet/minecraft/server/packs/resources/ResourceProvider;)V",
|
||||||
|
at = @At("HEAD")
|
||||||
|
)
|
||||||
|
private void reloadShaders(ResourceProvider p_250719_, CallbackInfo ci) {
|
||||||
|
RenderHelperKt.reloadShaders(p_250719_);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,11 +8,14 @@ import net.minecraft.client.renderer.GameRenderer
|
|||||||
import net.minecraft.client.renderer.RenderStateShard
|
import net.minecraft.client.renderer.RenderStateShard
|
||||||
import net.minecraft.client.renderer.RenderStateShard.LineStateShard
|
import net.minecraft.client.renderer.RenderStateShard.LineStateShard
|
||||||
import net.minecraft.client.renderer.RenderType
|
import net.minecraft.client.renderer.RenderType
|
||||||
|
import net.minecraft.client.renderer.ShaderInstance
|
||||||
import net.minecraft.client.renderer.texture.TextureAtlasSprite
|
import net.minecraft.client.renderer.texture.TextureAtlasSprite
|
||||||
import net.minecraft.resources.ResourceLocation
|
import net.minecraft.resources.ResourceLocation
|
||||||
|
import net.minecraft.server.packs.resources.ResourceProvider
|
||||||
import org.joml.Matrix4f
|
import org.joml.Matrix4f
|
||||||
import org.lwjgl.opengl.GL11.GL_ALWAYS
|
import org.lwjgl.opengl.GL11.GL_ALWAYS
|
||||||
import org.lwjgl.opengl.GL11.GL_LESS
|
import org.lwjgl.opengl.GL11.GL_LESS
|
||||||
|
import ru.dbotthepony.mc.otm.OverdriveThatMatters
|
||||||
import ru.dbotthepony.mc.otm.client.minecraft
|
import ru.dbotthepony.mc.otm.client.minecraft
|
||||||
import ru.dbotthepony.mc.otm.core.math.RGBAColor
|
import ru.dbotthepony.mc.otm.core.math.RGBAColor
|
||||||
import java.util.*
|
import java.util.*
|
||||||
@ -23,6 +26,7 @@ import kotlin.math.cos
|
|||||||
import kotlin.math.pow
|
import kotlin.math.pow
|
||||||
import kotlin.math.roundToInt
|
import kotlin.math.roundToInt
|
||||||
import kotlin.math.sin
|
import kotlin.math.sin
|
||||||
|
import kotlin.properties.Delegates
|
||||||
|
|
||||||
var is3DContext = false
|
var is3DContext = false
|
||||||
|
|
||||||
@ -35,6 +39,13 @@ var lockBlendFunc = false
|
|||||||
|
|
||||||
private val defaultUV = UVCoords(0f, 0f, 1f, 1f)
|
private val defaultUV = UVCoords(0f, 0f, 1f, 1f)
|
||||||
|
|
||||||
|
var customTexColorShader: ShaderInstance by Delegates.notNull()
|
||||||
|
private set
|
||||||
|
|
||||||
|
fun reloadShaders(provider: ResourceProvider) {
|
||||||
|
customTexColorShader = ShaderInstance(provider, ResourceLocation(OverdriveThatMatters.MOD_ID, "position_tex_color"), DefaultVertexFormat.POSITION_TEX_COLOR)
|
||||||
|
}
|
||||||
|
|
||||||
fun renderRect(
|
fun renderRect(
|
||||||
matrix: Matrix4f,
|
matrix: Matrix4f,
|
||||||
x: Float,
|
x: Float,
|
||||||
@ -108,7 +119,7 @@ fun renderTexturedRect(
|
|||||||
if (color.isWhite)
|
if (color.isWhite)
|
||||||
RenderSystem.setShader(GameRenderer::getPositionTexShader)
|
RenderSystem.setShader(GameRenderer::getPositionTexShader)
|
||||||
else
|
else
|
||||||
RenderSystem.setShader(GameRenderer::getPositionTexColorShader)
|
RenderSystem.setShader { customTexColorShader }
|
||||||
|
|
||||||
if (texture != null)
|
if (texture != null)
|
||||||
RenderSystem.setShaderTexture(0, texture)
|
RenderSystem.setShaderTexture(0, texture)
|
||||||
|
@ -0,0 +1,14 @@
|
|||||||
|
#version 150
|
||||||
|
|
||||||
|
uniform sampler2D Sampler0;
|
||||||
|
|
||||||
|
uniform vec4 ColorModulator;
|
||||||
|
|
||||||
|
in vec2 texCoord0;
|
||||||
|
in vec4 vertexColor;
|
||||||
|
|
||||||
|
out vec4 fragColor;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
fragColor = texture(Sampler0, texCoord0) * vertexColor * ColorModulator;
|
||||||
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
{
|
||||||
|
"blend": {
|
||||||
|
"func": "add",
|
||||||
|
"srcrgb": "srcalpha",
|
||||||
|
"dstrgb": "1-srcalpha"
|
||||||
|
},
|
||||||
|
"vertex": "overdrive_that_matters:position_tex_color",
|
||||||
|
"fragment": "overdrive_that_matters:position_tex_color",
|
||||||
|
"attributes": [
|
||||||
|
"Position",
|
||||||
|
"UV0",
|
||||||
|
"Color"
|
||||||
|
],
|
||||||
|
"samplers": [
|
||||||
|
{ "name": "Sampler0" }
|
||||||
|
],
|
||||||
|
"uniforms": [
|
||||||
|
{ "name": "ModelViewMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
|
||||||
|
{ "name": "ProjMat", "type": "matrix4x4", "count": 16, "values": [ 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0 ] },
|
||||||
|
{ "name": "ColorModulator", "type": "float", "count": 4, "values": [ 1.0, 1.0, 1.0, 1.0 ] }
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,18 @@
|
|||||||
|
#version 150
|
||||||
|
|
||||||
|
in vec3 Position;
|
||||||
|
in vec2 UV0;
|
||||||
|
in vec4 Color;
|
||||||
|
|
||||||
|
uniform mat4 ModelViewMat;
|
||||||
|
uniform mat4 ProjMat;
|
||||||
|
|
||||||
|
out vec2 texCoord0;
|
||||||
|
out vec4 vertexColor;
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
gl_Position = ProjMat * ModelViewMat * vec4(Position, 1.0);
|
||||||
|
|
||||||
|
texCoord0 = UV0;
|
||||||
|
vertexColor = Color;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user