fix light map update being done on non-light-map textures
This commit is contained in:
+13
-4
@@ -6,29 +6,33 @@ import com.seibel.distanthorizons.common.wrappers.minecraft.MinecraftRenderWrapp
|
||||
import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector;
|
||||
import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftClientWrapper;
|
||||
import com.seibel.distanthorizons.core.wrapperInterfaces.world.IClientLevelWrapper;
|
||||
import com.seibel.distanthorizons.core.wrapperInterfaces.world.ILevelWrapper;
|
||||
import net.minecraft.client.renderer.LightTexture;
|
||||
import com.seibel.distanthorizons.common.util.LightTextureMarker;
|
||||
import net.minecraft.client.renderer.texture.DynamicTexture;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(DynamicTexture.class)
|
||||
public class MixinLightmap
|
||||
public class MixinLightmap implements LightTextureMarker
|
||||
{
|
||||
@Unique
|
||||
private boolean isLightTexture = false;
|
||||
|
||||
@Shadow
|
||||
@Final
|
||||
private NativeImage pixels;
|
||||
|
||||
@Inject(method = "Lnet/minecraft/client/renderer/texture/DynamicTexture;upload()V", at = @At("HEAD"), cancellable = true)
|
||||
@Inject(method = "upload()V", at = @At("HEAD"))
|
||||
public void updateLightTexture(CallbackInfo ci)
|
||||
{
|
||||
// since the light map is always updated on the client render thread we should be able to access the client level at the same time
|
||||
IMinecraftClientWrapper mc = SingletonInjector.INSTANCE.get(IMinecraftClientWrapper.class);
|
||||
if (
|
||||
!isLightTexture ||
|
||||
mc == null ||
|
||||
mc.getWrappedClientLevel() == null
|
||||
)
|
||||
@@ -39,4 +43,9 @@ public class MixinLightmap
|
||||
MinecraftRenderWrapper.INSTANCE.updateLightmap(this.pixels, clientLevel);
|
||||
}
|
||||
|
||||
public void markLightTexture()
|
||||
{
|
||||
isLightTexture = true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+27
@@ -0,0 +1,27 @@
|
||||
package com.seibel.distanthorizons.fabric.mixins.client;
|
||||
|
||||
|
||||
import com.seibel.distanthorizons.common.util.LightTextureMarker;
|
||||
import net.minecraft.client.renderer.LightTexture;
|
||||
import net.minecraft.client.renderer.texture.DynamicTexture;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(LightTexture.class)
|
||||
public class MixinLightmap2
|
||||
{
|
||||
@Shadow
|
||||
@Final
|
||||
private DynamicTexture lightTexture;
|
||||
|
||||
@Inject(method = "<init>", at = @At("RETURN"))
|
||||
public void markLightTexture(CallbackInfo ci)
|
||||
{
|
||||
((LightTextureMarker) lightTexture).markLightTexture();
|
||||
}
|
||||
|
||||
}
|
||||
@@ -16,6 +16,7 @@
|
||||
"client.MixinGameRenderer",
|
||||
"client.MixinLevelRenderer",
|
||||
"client.MixinLightmap",
|
||||
"client.MixinLightmap2",
|
||||
"client.MixinOptionsScreen",
|
||||
"client.MixinMinecraft",
|
||||
"client.MixinTextureUtil"
|
||||
|
||||
Reference in New Issue
Block a user