22
33import com .mojang .blaze3d .pipeline .RenderTarget ;
44import com .mojang .blaze3d .platform .GlStateManager ;
5- import com .mojang .blaze3d .platform .TextureUtil ;
65import com .mojang .blaze3d .systems .RenderSystem ;
76import net .vulkanmod .gl .GlFramebuffer ;
87import net .vulkanmod .gl .GlTexture ;
1413import net .vulkanmod .vulkan .util .DrawUtil ;
1514import org .lwjgl .opengl .GL30 ;
1615import org .lwjgl .system .MemoryStack ;
17- import org .spongepowered .asm .mixin .Final ;
18- import org .spongepowered .asm .mixin .Mixin ;
19- import org .spongepowered .asm .mixin .Overwrite ;
20- import org .spongepowered .asm .mixin .Shadow ;
16+ import org .spongepowered .asm .mixin .*;
2117import org .spongepowered .asm .mixin .injection .At ;
2218import org .spongepowered .asm .mixin .injection .Inject ;
2319import org .spongepowered .asm .mixin .injection .callback .CallbackInfo ;
20+ import org .spongepowered .asm .mixin .injection .callback .CallbackInfoReturnable ;
2421
2522@ Mixin (RenderTarget .class )
2623public abstract class RenderTargetMixin implements ExtendedRenderTarget {
@@ -74,6 +71,9 @@ public void clear(boolean getError) {
7471 @ Overwrite
7572 public void bindRead () {
7673 RenderSystem .assertOnRenderThread ();
74+
75+ applyClear ();
76+
7777 GlTexture .bindTexture (this .colorTextureId );
7878
7979 try (MemoryStack stack = MemoryStack .stackPush ()) {
@@ -137,6 +137,11 @@ private void _blitToScreen(int width, int height, boolean disableBlend, Callback
137137 ci .cancel ();
138138 }
139139
140+ @ Inject (method = "getColorTextureId" , at = @ At ("HEAD" ))
141+ private void injClear (CallbackInfoReturnable <Integer > cir ) {
142+ applyClear ();
143+ }
144+
140145 @ Override
141146 public boolean isBound () {
142147 return bound ;
@@ -146,4 +151,17 @@ public boolean isBound() {
146151 public RenderPass getRenderPass () {
147152 return GlFramebuffer .getFramebuffer (this .frameBufferId ).getRenderPass ();
148153 }
154+
155+ @ Unique
156+ private void applyClear () {
157+ if (this .needClear ) {
158+ GlFramebuffer currentFramebuffer = GlFramebuffer .getBoundFramebuffer ();
159+
160+ this ._bindWrite (false );
161+
162+ if (currentFramebuffer != null ) {
163+ GlFramebuffer .beginRendering (currentFramebuffer );
164+ }
165+ }
166+ }
149167}
0 commit comments