avoid 'glGet's at all costs

This commit is contained in:
JozsefA 2021-02-13 16:26:34 -08:00
parent 951a0c4769
commit 11616a0b16
5 changed files with 54 additions and 6 deletions

View file

@ -0,0 +1,20 @@
package com.simibubi.create.foundation.mixin;
import com.mojang.blaze3d.platform.GlStateManager;
import com.simibubi.create.foundation.render.backend.gl.GlFog;
import org.lwjgl.opengl.GL11;
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;
@Mixin(GlStateManager.class)
public class FogColorTrackerMixin {
@Inject(at = @At("TAIL"), method = "fog")
private static void copyFogColor(int pname, float[] params, CallbackInfo ci) {
if (pname == GL11.GL_FOG_COLOR) {
GlFog.FOG_COLOR = params;
}
}
}

View file

@ -47,8 +47,7 @@ public class BasicProgram extends GlProgram {
GL20.glUniform3f(uCameraPos, camX, camY, camZ); GL20.glUniform3f(uCameraPos, camX, camY, camZ);
GL20.glUniform2f(uFogRange, GlFog.getFogStart(), GlFog.getFogEnd()); GL20.glUniform2f(uFogRange, GlFog.getFogStart(), GlFog.getFogEnd());
GL20.glGetFloatv(GL20.GL_FOG_COLOR, Backend.VEC4_BUFFER); GL20.glUniform4fv(uFogColor, GlFog.FOG_COLOR);
GL20.glUniform4fv(uFogColor, Backend.VEC4_BUFFER);
} }
protected static void uploadMatrixUniform(int uniform, Matrix4f mat) { protected static void uploadMatrixUniform(int uniform, Matrix4f mat) {

View file

@ -1,13 +1,29 @@
package com.simibubi.create.foundation.render.backend.gl; package com.simibubi.create.foundation.render.backend.gl;
import com.mojang.blaze3d.platform.GlStateManager;
import org.lwjgl.opengl.GL15;
import org.lwjgl.opengl.GL20; import org.lwjgl.opengl.GL20;
public class GlFog { public class GlFog {
public static float[] FOG_COLOR = new float[] {0, 0, 0, 0};
public static boolean fogEnabled() {
return GlStateManager.FOG.field_179049_a.field_179201_b;
}
public static int getFogMode() {
return GlStateManager.FOG.field_179047_b;
}
public static float getFogDensity() {
return GlStateManager.FOG.field_179048_c;
}
public static float getFogEnd() { public static float getFogEnd() {
return GL20.glGetFloat(GL20.GL_FOG_END); return GlStateManager.FOG.field_179046_e;
} }
public static float getFogStart() { public static float getFogStart() {
return GL20.glGetFloat(GL20.GL_FOG_START); return GlStateManager.FOG.field_179045_d;
} }
} }

View file

@ -32,4 +32,10 @@ public net.minecraft.client.Minecraft field_193996_ah #renderPartialTicksPaused
# Functions needed to setup a projection matrix # Functions needed to setup a projection matrix
public net.minecraft.client.renderer.GameRenderer field_78529_t #rendererUpdateCount public net.minecraft.client.renderer.GameRenderer field_78529_t #rendererUpdateCount
public net.minecraft.client.renderer.GameRenderer func_228380_a_(Lcom/mojang/blaze3d/matrix/MatrixStack;F)V #bobViewWhenHurt public net.minecraft.client.renderer.GameRenderer func_228380_a_(Lcom/mojang/blaze3d/matrix/MatrixStack;F)V #bobViewWhenHurt
public net.minecraft.client.renderer.GameRenderer func_228383_b_(Lcom/mojang/blaze3d/matrix/MatrixStack;F)V #bobView public net.minecraft.client.renderer.GameRenderer func_228383_b_(Lcom/mojang/blaze3d/matrix/MatrixStack;F)V #bobView
# Expose fog state to the public
public com.mojang.blaze3d.platform.GlStateManager$FogState
public com.mojang.blaze3d.platform.GlStateManager field_225663_h_ #FOG
public com.mojang.blaze3d.platform.GlStateManager$BooleanState
public com.mojang.blaze3d.platform.GlStateManager$BooleanState field_179201_b #field_179201_b

View file

@ -3,7 +3,14 @@
"package": "com.simibubi.create.foundation.mixin", "package": "com.simibubi.create.foundation.mixin",
"compatibilityLevel": "JAVA_8", "compatibilityLevel": "JAVA_8",
"refmap": "create.refmap.json", "refmap": "create.refmap.json",
"client": ["OnRemoveTileMixin", "ShaderCloseMixin", "CancelTileEntityRenderMixin", "LightUpdateMixin", "RenderHooksMixin"], "client": [
"OnRemoveTileMixin",
"ShaderCloseMixin",
"CancelTileEntityRenderMixin",
"LightUpdateMixin",
"RenderHooksMixin",
"FogColorTrackerMixin"
],
"injectors": { "injectors": {
"defaultRequire": 1 "defaultRequire": 1
}, },