Normal Debugging

prepare

  • loadAssets:加载模型
  • prepareUniformBuffers
    • createBuffer: VS
    • createBuffer: GS
    • updateUniformBuffers
  • setupDescriptorSetLayout
    • vkCreateDescriptorSetLayout
    • vkCreatePipelineLayout
  • preparePipelines
    • Rendering pipeline
      • vkCreateGraphicsPipelines: 计算法线阶段(带GS)
      • vkCreateGraphicsPipelines: 渲染模型阶段
  • setupDescriptorPool
    • vkCreateDescriptorPool
  • setupDescriptorSet
    • vkAllocateDescriptorSets
    • writeDescriptorSet
    • vkUpdateDescriptorSets
  • buildCommandBuffers
    • loop
      • vkBeginCommandBuffer
      • vkCmdBeginRenderPass
      • vkCmdSetViewport
      • vkCmdSetScissor
      • vkCmdSetLineWidth:设置线宽
      • vkCmdBindDescriptorSets
      • Solid shading
        • vkCmdBindPipeline
        • draw
      • Normal debugging
        • vkCmdBindPipeline
        • draw
      • drawUI
      • vkCmdEndRenderPass
      • vkEndCommandBuffer

render

  • draw
    • prepareFrame
    • vkQueueSubmit
    • submitFrame

shader

  • VS: 正常
  • GS: 正常渲染
    • layout (triangles) in;
    • layout (line_strip, max_vertices = 6) out;
    • layout (location = 0) in vec3 inNormal[];
  • FS: 正常渲染

小结

  几何着色器已经比较熟悉了, 这里注意一下Vulkan管线线宽的设置方法即可.

Viewport Arrays

prepare

  • loadAssets:加载模型
  • prepareUniformBuffers
    • createBuffer: GS
    • updateUniformBuffers
      • 这里设置两个视窗不用的MVP矩阵
  • setupDescriptorSetLayout
    • vkCreateDescriptorSetLayout
    • vkCreatePipelineLayout
  • preparePipelines
    - vkCreateGraphicsPipelines:
  • setupDescriptorPool
    • vkCreateDescriptorPool
  • setupDescriptorSet
    • vkAllocateDescriptorSets
    • writeDescriptorSet
    • vkUpdateDescriptorSets
  • buildCommandBuffers
    • loop
      • vkBeginCommandBuffer
      • vkCmdBeginRenderPass
      • vkCmdSetViewport:这里set两个视图
      • vkCmdSetScissor:两个裁剪视窗
      • vkCmdSetLineWidth:设置线宽
      • vkCmdBindDescriptorSets
      • vkCmdBindPipeline
      • draw
      • drawUI
      • vkCmdEndRenderPass
      • vkEndCommandBuffer

render

  • draw
    • prepareFrame
    • vkQueueSubmit
    • submitFrame

shader

  • VS: 正常
  • GS: 正常渲染
    • #extension GL_ARB_viewport_array : enable
      • 开启 viewport array
    • layout (triangles, invocations = 2) in;
      • invocations = 2 两次调用
    • gl_InvocationID
      • 本次调用的ID
    • main方法主要根据传入的MPV数组进行每个视窗的VS操作
  • FS: 正常渲染

小结

  本节主要讲多视口渲染。注意一下vulkan多视窗的配置。以及GS多次调用的配置。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐