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;
|
||||
|
||||
import net.minecraft.client.renderer.GameRenderer;
|
||||
import net.minecraft.server.packs.resources.ResourceProvider;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
import ru.dbotthepony.mc.otm.client.render.GlitchRenderer;
|
||||
import ru.dbotthepony.mc.otm.client.render.RenderHelperKt;
|
||||
|
||||
@Mixin(GameRenderer.class)
|
||||
public class MixinGameRenderer {
|
||||
@ -19,4 +21,12 @@ public class MixinGameRenderer {
|
||||
private void render(float p_109094_, long p_109095_, boolean p_109096_, CallbackInfo ci) {
|
||||
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.LineStateShard
|
||||
import net.minecraft.client.renderer.RenderType
|
||||
import net.minecraft.client.renderer.ShaderInstance
|
||||
import net.minecraft.client.renderer.texture.TextureAtlasSprite
|
||||
import net.minecraft.resources.ResourceLocation
|
||||
import net.minecraft.server.packs.resources.ResourceProvider
|
||||
import org.joml.Matrix4f
|
||||
import org.lwjgl.opengl.GL11.GL_ALWAYS
|
||||
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.core.math.RGBAColor
|
||||
import java.util.*
|
||||
@ -23,6 +26,7 @@ import kotlin.math.cos
|
||||
import kotlin.math.pow
|
||||
import kotlin.math.roundToInt
|
||||
import kotlin.math.sin
|
||||
import kotlin.properties.Delegates
|
||||
|
||||
var is3DContext = false
|
||||
|
||||
@ -35,6 +39,13 @@ var lockBlendFunc = false
|
||||
|
||||
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(
|
||||
matrix: Matrix4f,
|
||||
x: Float,
|
||||
@ -108,7 +119,7 @@ fun renderTexturedRect(
|
||||
if (color.isWhite)
|
||||
RenderSystem.setShader(GameRenderer::getPositionTexShader)
|
||||
else
|
||||
RenderSystem.setShader(GameRenderer::getPositionTexColorShader)
|
||||
RenderSystem.setShader { customTexColorShader }
|
||||
|
||||
if (texture != null)
|
||||
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