VulkanShader_1.21.10-0.0.4-alpha.jar

Download file
    package net.vulkanmod.vulkan.pass;

import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.textures.GpuTexture;
import com.mojang.blaze3d.textures.GpuTextureView;
import java.util.List;
import net.vulkanmod.render.engine.VkGpuDevice;
import net.vulkanmod.render.engine.VkGpuTexture;
import net.vulkanmod.vulkan.Renderer;
import net.vulkanmod.vulkan.framebuffer.Framebuffer;
import net.vulkanmod.vulkan.framebuffer.RenderPass;
import net.vulkanmod.vulkan.framebuffer.SwapChain;
import net.vulkanmod.vulkan.texture.VTextureSelector;
import net.vulkanmod.vulkan.texture.VulkanImage;
import org.lwjgl.system.MemoryStack;
import org.lwjgl.vulkan.VK10;
import org.lwjgl.vulkan.VkCommandBuffer;
import org.lwjgl.vulkan.VkRect2D;

public class DefaultMainPass implements MainPass {
   private final Framebuffer mainFramebuffer = Renderer.getInstance().getSwapChain();
   private RenderPass mainRenderPass;
   private RenderPass auxRenderPass;
   private GpuTexture[] colorAttachmentTextures;
   private GpuTextureView[] colorAttachmentTextureViews;
   private GpuTexture depthAttachmentTexture;

   public static DefaultMainPass create() {
      return new DefaultMainPass();
   }

   DefaultMainPass() {
      this.createRenderPasses();
      this.createAttachmentTextures();
   }

   private void createRenderPasses() {
      RenderPass.Builder builder = RenderPass.builder(this.mainFramebuffer);
      builder.getColorAttachmentInfo().setFinalLayout(2);
      builder.getColorAttachmentInfo().setOps(2, 0);
      builder.getDepthAttachmentInfo().setOps(2, 0);
      this.mainRenderPass = builder.build();
      builder = RenderPass.builder(this.mainFramebuffer);
      builder.getColorAttachmentInfo().setOps(0, 0);
      builder.getDepthAttachmentInfo().setOps(0, 0);
      builder.getColorAttachmentInfo().setFinalLayout(2);
      this.auxRenderPass = builder.build();
   }

   public void begin(VkCommandBuffer commandBuffer, MemoryStack stack) {
      SwapChain framebuffer = Renderer.getInstance().getSwapChain();
      VulkanImage colorAttachment = framebuffer.getColorAttachment();
      colorAttachment.transitionImageLayout(stack, commandBuffer, 2);
      Renderer.getInstance().beginRenderPass(this.mainRenderPass, framebuffer);
      Renderer.setViewport(0, 0, framebuffer.getWidth(), framebuffer.getHeight(), stack);
      VkRect2D.Buffer pScissor = framebuffer.scissor(stack);
      VK10.vkCmdSetScissor(commandBuffer, 0, pScissor);
   }

   public void end(VkCommandBuffer commandBuffer) {
      Renderer.getInstance().endRenderPass(commandBuffer);
      MemoryStack stack = MemoryStack.stackPush();

      try {
         SwapChain framebuffer = Renderer.getInstance().getSwapChain();
         framebuffer.getColorAttachment().transitionImageLayout(stack, commandBuffer, 1000001002);
      } catch (Throwable var6) {
         if (stack != null) {
            try {
               stack.close();
            } catch (Throwable var5) {
               var6.addSuppressed(var5);
            }
         }

         throw var6;
      }

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

      int result = VK10.vkEndCommandBuffer(commandBuffer);
      if (result != 0) {
         throw new RuntimeException("Failed to record command buffer:" + result);
      }
   }

   public void cleanUp() {
      this.mainRenderPass.cleanUp();
      this.auxRenderPass.cleanUp();
   }

   public void onResize() {
      this.createAttachmentTextures();
   }

   public void rebindMainTarget() {
      SwapChain swapChain = Renderer.getInstance().getSwapChain();
      VkCommandBuffer commandBuffer = Renderer.getCommandBuffer();
      RenderPass boundRenderPass = Renderer.getInstance().getBoundRenderPass();
      if (boundRenderPass != this.mainRenderPass && boundRenderPass != this.auxRenderPass) {
         Renderer.getInstance().endRenderPass(commandBuffer);
         Renderer.getInstance().beginRenderPass(this.auxRenderPass, swapChain);
      }
   }

   public void bindAsTexture() {
      SwapChain swapChain = Renderer.getInstance().getSwapChain();
      VkCommandBuffer commandBuffer = Renderer.getCommandBuffer();
      RenderPass boundRenderPass = Renderer.getInstance().getBoundRenderPass();
      if (boundRenderPass == this.mainRenderPass || boundRenderPass == this.auxRenderPass) {
         Renderer.getInstance().endRenderPass(commandBuffer);
      }

      MemoryStack stack = MemoryStack.stackPush();

      try {
         swapChain.getColorAttachment().transitionImageLayout(stack, commandBuffer, 5);
      } catch (Throwable var8) {
         if (stack != null) {
            try {
               stack.close();
            } catch (Throwable var7) {
               var8.addSuppressed(var7);
            }
         }

         throw var8;
      }

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

      VTextureSelector.bindTexture(swapChain.getColorAttachment());
   }

   public GpuTexture getColorAttachment() {
      return this.colorAttachmentTextures[Renderer.getCurrentImage()];
   }

   public GpuTextureView getColorAttachmentView() {
      return this.colorAttachmentTextureViews[Renderer.getCurrentImage()];
   }

   public GpuTexture getDepthAttachment() {
      return this.depthAttachmentTexture;
   }

   private void createAttachmentTextures() {
      VkGpuDevice device = (VkGpuDevice)RenderSystem.getDevice();
      SwapChain swapChain = Renderer.getInstance().getSwapChain();
      List<VulkanImage> swapChainImages = swapChain.getImages();
      if (swapChain.getWidth() != 0 || swapChain.getHeight() != 0) {
         int imageCount = swapChainImages.size();
         this.colorAttachmentTextures = new GpuTexture[imageCount];
         this.colorAttachmentTextureViews = new GpuTextureView[imageCount];

         for(int i = 0; i < imageCount; ++i) {
            VkGpuTexture attachmentTexture = device.gpuTextureFromVulkanImage((VulkanImage)swapChainImages.get(i));
            GpuTextureView attachmentTextureView = device.createTextureView(attachmentTexture);
            this.colorAttachmentTextures[i] = attachmentTexture;
            this.colorAttachmentTextureViews[i] = attachmentTextureView;
         }

         this.depthAttachmentTexture = device.gpuTextureFromVulkanImage(swapChain.getDepthAttachment());
      }
   }
}
    
Download file