Multithreading 多线程着色过程
我目前正在Vulkan中使用多线程实现一个基本的延迟渲染器。根据幻灯片44(第138页)上的演示,由于我的G缓冲区应具有与最终图像相同的分辨率,我希望在一次渲染过程中使用多个子过程来完成此操作。它说:Multithreading 多线程着色过程,multithreading,vulkan,Multithreading,Vulkan,我目前正在Vulkan中使用多线程实现一个基本的延迟渲染器。根据幻灯片44(第138页)上的演示,由于我的G缓冲区应具有与最终图像相同的分辨率,我希望在一次渲染过程中使用多个子过程来完成此操作。它说: vkCmdBeginCommandBuffer vkCmdBeginRenderPass vkCmdExecuteCommands vkCmdNextSubpass vkCmdExecuteCommands vkCmdEndRenderPass vkCmdEndCommandBuffer 在第
- vkCmdBeginCommandBuffer
- vkCmdBeginRenderPass
- vkCmdExecuteCommands
- vkCmdNextSubpass
- vkCmdExecuteCommands
- vkCmdEndRenderPass
- vkCmdEndCommandBuffer
第一步是让它发挥作用。使用例如这个。然后,将其优化为单个renderpass的下一步应该会更容易。对我来说,就像你说的,你可以为“构建g-buffer子类”使用多线程命令缓冲区。但是,对于着色过程,它必须取决于您如何操作。对我来说(再次),您不需要多线程着色子类。但是,您必须考虑到您可以有一个“按区域依赖关系” 所以,我鼓励你这样做。 在开始渲染过程之前,请使用计算着色器在屏幕上显示所有灯光(这里有一种“四边形”数组) 我指的是这种东西。如果有一个点光源(例如),其想法是计算受光源影响的屏幕空间中的四边形。这样,您就有4个顶点(表示一个四边形)放在SSBO中,可以将其用作着色子过程中的顶点缓冲区 现在开始渲染过程
因此,为了回答您关于着色子类的问题,我不会使用命令缓冲区,或者只使用很少的命令缓冲区(通过灯光(准时、定向))对我来说,就像您所说的,您可以为“building g-buffer子类”使用多线程命令缓冲区。但是,对于着色过程,它必须取决于您如何操作。对我来说(再次),您不需要多线程着色子类。但是,您必须考虑到您可以有一个“按区域依赖关系” 所以,我鼓励你这样做。 在开始渲染过程之前,请使用计算着色器在屏幕上显示所有灯光(这里有一种“四边形”数组) 我指的是这种东西。如果有一个点光源(例如),其想法是计算受光源影响的屏幕空间中的四边形。这样,您就有4个顶点(表示一个四边形)放在SSBO中,可以将其用作着色子过程中的顶点缓冲区 现在开始渲染过程
因此,为了回答您关于着色子类的问题,我不会使用命令缓冲区,也不会使用很少的缓冲区(通过灯光类型(准时、定向))我不太理解您所说的“全部拆分”是什么意思