Vulkan Samples 阅读 -- Geometry Shader(一) Normal Debugging & Viewport Arrays

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多次调用的配置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值