Renderer class progress
This commit is contained in:
parent
ff35846afa
commit
504e7d0c4b
1 changed files with 66 additions and 0 deletions
|
|
@ -8,7 +8,17 @@ import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.GPUSynchro
|
|||
import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.GPUSynchronisation.Semaphore;
|
||||
import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DeviceLayers.Queues.Queue;
|
||||
import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.SceneRender;
|
||||
import net.halbear.Terrain4J.EngineCore.Vulkan.Structure.DisplayToScreen.SwapChain;
|
||||
import net.halbear.Terrain4J.EngineCore.Vulkan.Util.VulkanUtils;
|
||||
import org.lwjgl.system.MemoryStack;
|
||||
import org.lwjgl.vulkan.VkCommandBufferSubmitInfo;
|
||||
import org.lwjgl.vulkan.VkSemaphoreSubmitInfo;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.Arrays;
|
||||
|
||||
import static org.lwjgl.vulkan.VK13.VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT;
|
||||
import static org.lwjgl.vulkan.VK13.VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT;
|
||||
|
||||
public class Render {
|
||||
|
||||
|
|
@ -45,10 +55,66 @@ public class Render {
|
|||
}
|
||||
sceneRender = new SceneRender();
|
||||
}
|
||||
|
||||
private void RecordingStart(CommandPool commandPool, CommandBuffer commandBuffer){
|
||||
commandPool.Reset(RendererContext);
|
||||
commandBuffer.BeginRecording();
|
||||
}
|
||||
|
||||
private void RecordingStop(CommandBuffer commandBuffer){
|
||||
commandBuffer.EndRecording();
|
||||
}
|
||||
|
||||
public void cleanup() {
|
||||
RendererContext.WaitIdle();
|
||||
sceneRender.cleanup();
|
||||
Arrays.asList(RenderCompleteSemaphores).forEach(i->i.cleanup(RendererContext));
|
||||
Arrays.asList(PresentCompleteSemaphores).forEach(i->i.cleanup(RendererContext));
|
||||
Arrays.asList(Fences).forEach(i->i.cleanup(RendererContext));
|
||||
for(int i = 0; i < CommandPools.length; i++){
|
||||
CommandBuffers[i].cleanup(RendererContext, CommandPools[i]);
|
||||
CommandPools[i].cleanup(RendererContext);
|
||||
}
|
||||
RendererContext.cleanup();
|
||||
}
|
||||
public void render(EngineInstance engineInstance){
|
||||
SwapChain swapChain = RendererContext.GetSwapChain();
|
||||
WaitForFence(CurrentFrame);
|
||||
var CommandPool = CommandPools[CurrentFrame];
|
||||
var CommandBuffer = CommandBuffers[CurrentFrame];
|
||||
RecordingStart(CommandPool, CommandBuffer);
|
||||
int ImageIndex = swapChain.FetchNextImage(RendererContext.GetDevice(), PresentCompleteSemaphores[CurrentFrame]);
|
||||
if (ImageIndex < 0){
|
||||
return;
|
||||
}
|
||||
sceneRender.render(RendererContext,CommandBuffer,ImageIndex);
|
||||
RecordingStop(CommandBuffer);
|
||||
Submit(CommandBuffer, CurrentFrame, ImageIndex);
|
||||
swapChain.PresentImage(PresentQueue, RenderCompleteSemaphores[ImageIndex],ImageIndex);
|
||||
CurrentFrame = (CurrentFrame + 1) % VulkanUtils.MAX_IN_FLIGHT;
|
||||
}
|
||||
|
||||
private void WaitForFence(int currentFrame){
|
||||
var fence = Fences[currentFrame];
|
||||
fence.FenceWait(RendererContext);
|
||||
}
|
||||
|
||||
public void Submit(CommandBuffer commandBuffer, int currentFrame, int ImageIndex){
|
||||
try(var MemStack = MemoryStack.stackPush()){
|
||||
var fence = Fences[currentFrame];
|
||||
fence.Reset(RendererContext);
|
||||
var Commands = VkCommandBufferSubmitInfo.calloc(1,MemStack)
|
||||
.sType$Default()
|
||||
.commandBuffer(commandBuffer.GetVulkanCommandBuffer());
|
||||
VkSemaphoreSubmitInfo.Buffer SemaphoreWait = VkSemaphoreSubmitInfo.calloc(1,MemStack)
|
||||
.sType$Default()
|
||||
.stageMask(VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT)
|
||||
.semaphore(PresentCompleteSemaphores[currentFrame].GetSemaphore());
|
||||
VkSemaphoreSubmitInfo.Buffer SemaphoreSignals = VkSemaphoreSubmitInfo.calloc(1, MemStack)
|
||||
.sType$Default()
|
||||
.stageMask(VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT)
|
||||
.semaphore(RenderCompleteSemaphores[currentFrame].GetSemaphore());
|
||||
GraphicsQueue.Sumbit(Commands, SemaphoreWait, SemaphoreSignals, fence);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue