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