diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDhMetaRenderer.java b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDhMetaRenderer.java index d6d551539..003765afc 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDhMetaRenderer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/BlazeDhMetaRenderer.java @@ -6,6 +6,8 @@ public class BlazeDhMetaRenderer {} #else import com.mojang.blaze3d.textures.GpuTexture; +import com.seibel.distanthorizons.api.methods.events.abstractEvents.DhApiAfterColorDepthTextureCreatedEvent; +import com.seibel.distanthorizons.api.methods.events.sharedParameterObjects.DhApiTextureCreatedParam; import com.seibel.distanthorizons.common.render.blaze.apply.BlazeDhApplyRenderer; import com.seibel.distanthorizons.common.render.blaze.wrappers.texture.BlazeTextureWrapper; import com.seibel.distanthorizons.core.dependencyInjection.SingletonInjector; @@ -13,6 +15,7 @@ import com.seibel.distanthorizons.core.render.RenderParams; import com.seibel.distanthorizons.core.util.ColorUtil; import com.seibel.distanthorizons.core.wrapperInterfaces.minecraft.IMinecraftRenderWrapper; import com.seibel.distanthorizons.core.wrapperInterfaces.render.renderPass.IDhMetaRenderer; +import com.seibel.distanthorizons.coreapi.DependencyInjection.ApiEventInjector; import net.minecraft.client.Minecraft; import java.awt.*; @@ -57,9 +60,24 @@ public class BlazeDhMetaRenderer implements IDhMetaRenderer @Override public void runRenderPassSetup(RenderParams renderParams) { - // textures - this.dhDepthTextureWrapper.tryCreateOrResize(); - this.dhColorTextureWrapper.tryCreateOrResize(); + int oldWidth = this.dhDepthTextureWrapper.getWidth(); + int oldHeight = this.dhDepthTextureWrapper.getHeight(); + + boolean texturesChanged = false; + texturesChanged = this.dhDepthTextureWrapper.tryCreateOrResize() | texturesChanged; + texturesChanged = this.dhColorTextureWrapper.tryCreateOrResize() | texturesChanged; + + if (texturesChanged) + { + int newTextureWidth = MC_RENDER.getTargetFramebufferViewportWidth(); + int newTextureHeight = MC_RENDER.getTargetFramebufferViewportHeight(); + + DhApiTextureCreatedParam textureCreatedParam = new DhApiTextureCreatedParam( + oldWidth, oldHeight, + newTextureWidth, newTextureHeight + ); + ApiEventInjector.INSTANCE.fireAllEvents(DhApiAfterColorDepthTextureCreatedEvent.class, textureCreatedParam); + } } @Override diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/wrappers/texture/BlazeTextureWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/wrappers/texture/BlazeTextureWrapper.java index 03e65bb72..e42ea30b5 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/wrappers/texture/BlazeTextureWrapper.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/blaze/wrappers/texture/BlazeTextureWrapper.java @@ -79,42 +79,52 @@ public class BlazeTextureWrapper //=======// //region - /** does nothing if the texture is already created and the correct size */ - public void tryCreateOrResize() + /** + * does nothing if the texture is already created and the correct size + * @return true if the texture was (re)created + */ + public boolean tryCreateOrResize() { - this.tryCreateTexture(); + boolean textureChanged = this.tryCreateTexture(); this.tryCreateSampler(); + return textureChanged; } - private void tryCreateTexture() + private boolean tryCreateTexture() { int viewWidth = MC_RENDER.getTargetFramebufferViewportWidth(); int viewHeight = MC_RENDER.getTargetFramebufferViewportHeight(); - if (this.texture == null - || this.width != viewWidth - || this.height != viewHeight) + if (this.texture != null + && this.width == viewWidth + && this.height == viewHeight) { - if (this.texture != null) - { - this.texture.close(); - this.textureView.close(); - } - - this.width = viewWidth; - this.height = viewHeight; - - int usage = GpuTexture.USAGE_COPY_DST - | GpuTexture.USAGE_TEXTURE_BINDING - | GpuTexture.USAGE_COPY_SRC - | GpuTexture.USAGE_RENDER_ATTACHMENT; - this.texture = GPU_DEVICE.createTexture(this.name, - usage, - this.textureFormat, - viewWidth, viewHeight, - /*depthOrLayers*/ 1, /*mipLevels*/ 1 - ); - this.textureView = GPU_DEVICE.createTextureView(this.texture); + // no changes needed + return false; } + + + if (this.texture != null) + { + this.texture.close(); + this.textureView.close(); + } + + this.width = viewWidth; + this.height = viewHeight; + + int usage = GpuTexture.USAGE_COPY_DST + | GpuTexture.USAGE_TEXTURE_BINDING + | GpuTexture.USAGE_COPY_SRC + | GpuTexture.USAGE_RENDER_ATTACHMENT; + this.texture = GPU_DEVICE.createTexture(this.name, + usage, + this.textureFormat, + viewWidth, viewHeight, + /*depthOrLayers*/ 1, /*mipLevels*/ 1 + ); + this.textureView = GPU_DEVICE.createTextureView(this.texture); + + return true; } private void tryCreateSampler() { diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/GlDhMetaRenderer.java b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/GlDhMetaRenderer.java index 7ff5fccda..a2eb63640 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/GlDhMetaRenderer.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/GlDhMetaRenderer.java @@ -387,31 +387,26 @@ public class GlDhMetaRenderer implements IDhMetaRenderer - // needs to be fired after all the textures have been created/bound - boolean clearTextures = !ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeTextureClearEvent.class, renderParams); - if (clearTextures) + GL32.glClearDepth(1.0); + + float[] clearColorValues = new float[4]; + GL32.glGetFloatv(GL32.GL_COLOR_CLEAR_VALUE, clearColorValues); + GL32.glClearColor(clearColorValues[0], clearColorValues[1], clearColorValues[2], 1.0f); + + if (this.usingMcFramebuffer + && framebufferOverride == null) { - GL32.glClearDepth(1.0); + //// Due to using MC/Optifine's framebuffer we need to re-bind the depth texture, + //// otherwise we'll be writing to MC/Optifine's depth texture which causes rendering issues + //this.framebuffer.addDepthAttachment(this.depthTexture.getTextureId(), EDhDepthBufferFormat.DEPTH32F.isCombinedStencil()); - float[] clearColorValues = new float[4]; - GL32.glGetFloatv(GL32.GL_COLOR_CLEAR_VALUE, clearColorValues); - GL32.glClearColor(clearColorValues[0], clearColorValues[1], clearColorValues[2], 1.0f); - if (this.usingMcFramebuffer - && framebufferOverride == null) - { - //// Due to using MC/Optifine's framebuffer we need to re-bind the depth texture, - //// otherwise we'll be writing to MC/Optifine's depth texture which causes rendering issues - //this.framebuffer.addDepthAttachment(this.depthTexture.getTextureId(), EDhDepthBufferFormat.DEPTH32F.isCombinedStencil()); - - - // don't clear the color texture, that removes the sky - GL32.glClear(GL32.GL_DEPTH_BUFFER_BIT); - } - else if (firstPass) - { - GL32.glClear(GL32.GL_COLOR_BUFFER_BIT | GL32.GL_DEPTH_BUFFER_BIT); - } + // don't clear the color texture, that removes the sky + GL32.glClear(GL32.GL_DEPTH_BUFFER_BIT); + } + else if (firstPass) + { + GL32.glClear(GL32.GL_COLOR_BUFFER_BIT | GL32.GL_DEPTH_BUFFER_BIT); } } diff --git a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/terrain/GlDhTerrainShaderProgram.java b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/terrain/GlDhTerrainShaderProgram.java index ff84302f0..7dc7dd049 100644 --- a/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/terrain/GlDhTerrainShaderProgram.java +++ b/common/src/main/java/com/seibel/distanthorizons/common/render/openGl/terrain/GlDhTerrainShaderProgram.java @@ -296,8 +296,6 @@ public class GlDhTerrainShaderProgram extends GlShaderProgram implements IDhApiS // rendering // //===========// - ApiEventInjector.INSTANCE.fireAllEvents(DhApiBeforeRenderPassEvent.class, renderEventParam); - if (IRIS_ACCESSOR != null) { // done to fix a bug with Iris where face culling isn't properly set or reverted in the MC state manager diff --git a/coreSubProjects b/coreSubProjects index 2d878338c..9e65e2dd4 160000 --- a/coreSubProjects +++ b/coreSubProjects @@ -1 +1 @@ -Subproject commit 2d878338cb19caa9397998900a66669a5964fc28 +Subproject commit 9e65e2dd4ce2b4d35f3b969b22fc852238dc661b