package net.vulkanmod.mixin.render.target;

import com.mojang.blaze3d.systems.RenderPass;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.textures.GpuTexture;
import com.mojang.blaze3d.textures.GpuTextureView;
import java.util.OptionalInt;
import net.minecraft.class_10799;
import net.minecraft.class_276;
import net.vulkanmod.render.engine.VkFbo;
import net.vulkanmod.render.engine.VkGpuTexture;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Overwrite;
import org.spongepowered.asm.mixin.Shadow;

@Mixin({class_276.class})
public abstract class RenderTargetMixin {
   @Shadow
   public int field_1482;
   @Shadow
   public int field_1481;
   @Shadow
   protected @Nullable GpuTexture field_1475;
   @Shadow
   protected @Nullable GpuTexture field_56739;
   @Shadow
   protected @Nullable GpuTextureView field_60567;

   @Overwrite
   public void method_68445(GpuTextureView gpuTextureView) {
      RenderSystem.assertOnRenderThread();
      VkFbo fbo = ((VkGpuTexture)this.field_1475).getFbo(this.field_56739);
      if (!fbo.needsClear()) {
         RenderPass renderPass = RenderSystem.getDevice().createCommandEncoder().createRenderPass(() -> "Blit render target", gpuTextureView, OptionalInt.empty());

         try {
            renderPass.setPipeline(class_10799.field_56840);
            RenderSystem.bindDefaultUniforms(renderPass);
            renderPass.bindSampler("InSampler", this.field_60567);
            renderPass.draw(0, 3);
         } catch (Throwable var7) {
            if (renderPass != null) {
               try {
                  renderPass.close();
               } catch (Throwable var6) {
                  var7.addSuppressed(var6);
               }
            }

            throw var7;
         }

         if (renderPass != null) {
            renderPass.close();
         }

      }
   }
}
