Fix android glitch cause horizon to render black

Fixes #162
This commit is contained in:
DBotThePony 2022-10-25 18:23:25 +07:00
parent 991972216e
commit 32b8215435
Signed by: DBot
GPG Key ID: DCC23B5715498507
2 changed files with 41 additions and 5 deletions

View File

@ -8,19 +8,23 @@ import com.mojang.blaze3d.systems.RenderSystem
import com.mojang.blaze3d.vertex.BufferBuilder import com.mojang.blaze3d.vertex.BufferBuilder
import com.mojang.blaze3d.vertex.BufferUploader import com.mojang.blaze3d.vertex.BufferUploader
import com.mojang.blaze3d.vertex.DefaultVertexFormat import com.mojang.blaze3d.vertex.DefaultVertexFormat
import com.mojang.blaze3d.vertex.Tesselator
import com.mojang.blaze3d.vertex.VertexBuffer import com.mojang.blaze3d.vertex.VertexBuffer
import com.mojang.blaze3d.vertex.VertexFormat import com.mojang.blaze3d.vertex.VertexFormat
import com.mojang.math.Matrix4f import com.mojang.math.Matrix4f
import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap import it.unimi.dsi.fastutil.ints.Int2ObjectArrayMap
import it.unimi.dsi.fastutil.ints.Int2ObjectFunction import it.unimi.dsi.fastutil.ints.Int2ObjectFunction
import net.minecraft.client.Minecraft import net.minecraft.client.Minecraft
import net.minecraft.client.renderer.FogRenderer
import net.minecraft.client.renderer.GameRenderer import net.minecraft.client.renderer.GameRenderer
import net.minecraft.core.Vec3i import net.minecraft.core.Vec3i
import net.minecraft.world.level.levelgen.XoroshiroRandomSource import net.minecraft.world.level.levelgen.XoroshiroRandomSource
import org.lwjgl.opengl.GL14
import ru.dbotthepony.mc.otm.ClientConfig import ru.dbotthepony.mc.otm.ClientConfig
import ru.dbotthepony.mc.otm.capability.MatteryPlayerCapability import ru.dbotthepony.mc.otm.capability.MatteryPlayerCapability
import ru.dbotthepony.mc.otm.capability.matteryPlayer import ru.dbotthepony.mc.otm.capability.matteryPlayer
import ru.dbotthepony.mc.otm.client.minecraft import ru.dbotthepony.mc.otm.client.minecraft
import ru.dbotthepony.mc.otm.core.RGBAColor
import ru.dbotthepony.mc.otm.core.component1 import ru.dbotthepony.mc.otm.core.component1
import ru.dbotthepony.mc.otm.core.component2 import ru.dbotthepony.mc.otm.core.component2
import ru.dbotthepony.mc.otm.core.component3 import ru.dbotthepony.mc.otm.core.component3
@ -453,10 +457,6 @@ object GlitchRenderer {
glitchBuffer.resize(minecraft.window.width, minecraft.window.height, Minecraft.ON_OSX) glitchBuffer.resize(minecraft.window.width, minecraft.window.height, Minecraft.ON_OSX)
} }
glitchBuffer.bindWrite(true)
RenderSystem.clearColor(0f, 0f, 0f, 1f)
RenderSystem.clear(GlConst.GL_COLOR_BUFFER_BIT, Minecraft.ON_OSX)
if (System.nanoTime() - lastGlitch >= nextGlitch) { if (System.nanoTime() - lastGlitch >= nextGlitch) {
makeGlitch() makeGlitch()
} }
@ -465,9 +465,41 @@ object GlitchRenderer {
makeColorGlitch() makeColorGlitch()
} }
if (!Minecraft.useShaderTransparency()) {
glitchBuffer.bindWrite(true)
RenderSystem.clearColor(FogRenderer.fogRed, FogRenderer.fogGreen, FogRenderer.fogBlue, 1f)
RenderSystem.clear(GlConst.GL_COLOR_BUFFER_BIT, Minecraft.ON_OSX)
// fix main rendertarget transparency (which is everything on screen that is not covered by anything, unless running Fabulous! graphics option)
// this is required because Minecraft's builtin fragement shaders are stupid
// and discard fully transparent fragments
// when, in fact, alpha channel is just another color channel, and it's meaning is dictated
// by render context, and it is not strictly "transparency"
// the downside of this is RGBA8888 texture double copy, requiring a lot of video memory bandwidth
// and no, trying to render "fog" solid color overlay quad over main rendertarget with proper blend mode
RenderSystem.setShaderTexture(0, minecraft.mainRenderTarget.colorTextureId)
RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ZERO, GlStateManager.DestFactor.ONE)
RenderSystem.setShader(GameRenderer::getPositionTexShader)
RenderSystem.setShaderColor(1f, 1f, 1f, 1f)
draw(0.0, 0.0)
minecraft.mainRenderTarget.bindWrite(true)
RenderSystem.setShader(GameRenderer::getPositionTexShader)
RenderSystem.blendFunc(GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO)
RenderSystem.setShaderColor(1f, 1f, 1f, 1f)
RenderSystem.setShaderTexture(0, glitchBuffer.colorTextureId)
draw(0.0, 0.0)
}
glitchBuffer.bindWrite(true)
RenderSystem.clearColor(0f, 0f, 0f, 1f)
RenderSystem.clear(GlConst.GL_COLOR_BUFFER_BIT, Minecraft.ON_OSX)
// distort colors by sampling main frame buffer (raw stage) // distort colors by sampling main frame buffer (raw stage)
RenderSystem.setShaderTexture(0, minecraft.mainRenderTarget.colorTextureId) RenderSystem.setShaderTexture(0, minecraft.mainRenderTarget.colorTextureId)
RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_DST_ALPHA) RenderSystem.blendFuncSeparate(GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ONE, GlStateManager.SourceFactor.ZERO, GlStateManager.DestFactor.ONE)
RenderSystem.setShader(GameRenderer::getPositionTexShader) RenderSystem.setShader(GameRenderer::getPositionTexShader)

View File

@ -174,3 +174,7 @@ public net.minecraft.client.renderer.RenderStateShard f_110127_ # WEATHER_TARGET
public net.minecraft.client.renderer.RenderStateShard$LineStateShard public net.minecraft.client.renderer.RenderStateShard$LineStateShard
public net.minecraft.world.inventory.AbstractContainerMenu m_38897_(Lnet/minecraft/world/inventory/Slot;)Lnet/minecraft/world/inventory/Slot; # addSlot public net.minecraft.world.inventory.AbstractContainerMenu m_38897_(Lnet/minecraft/world/inventory/Slot;)Lnet/minecraft/world/inventory/Slot; # addSlot
public net.minecraft.client.renderer.FogRenderer f_109012_ # fogBlue
public net.minecraft.client.renderer.FogRenderer f_109011_ # fogGreen
public net.minecraft.client.renderer.FogRenderer f_109010_ # fogRed