目录

  • Conditional Rendering
    • prepare
    • render
    • shader
    • 小结
  • Debug Markers
  • Negative Viewport Height
    • prepare
    • render
    • shader
    • 小结
  • Variable Rate Shading
    • prepare
    • render
    • shader
    • 小结

Conditional Rendering

prepare

  • loadAssets:加载模型(有很多部件组成)\
  • prepareConditionalRendering: 条件渲染重点设置
    • vkCmdBeginConditionalRenderingEXT

      • 加载扩展
    • vkCmdEndConditionalRenderingEXT
      • 加载扩展
    • 创建 Conditional Rendering 使用的缓冲区, 条件数值类型为32 bits,如果为零,则放弃渲染命名.
      • createBuffer: std::vector<int32_t> conditionalVisibility;
      • loop: 初始化条件为true
        • conditionalVisibility[i] = 1;
      • updateConditionalBuffer
        • memcpy : 复制数据
  • prepareUniformBuffers
    • createBuffer
    • updateUniformBuffers
  • setupDescriptorSets
    • vkCreateDescriptorPool
    • vkCreatePipelineLayout
    • vkAllocateDescriptorSets
    • writeDescriptorSet
    • vkUpdateDescriptorSets
  • setupDescriptorSetLayout
    • descriptorSetLayoutBinding
    • vkCreateDescriptorSetLayout
    • vkCreatePipelineLayout
  • preparePipelines
    -vkCreateGraphicsPipelines
  • buildCommandBuffers
    • loop

      • vkBeginCommandBuffer
      • vkCmdBeginRenderPass
      • vkCmdSetViewport
      • vkCmdSetScissor
      • vkCmdBindDescriptorSets
      • vkCmdBindPipeline
      • vkCmdBindVertexBuffers
      • vkCmdBindIndexBuffer
      • renderNode: 本节重点, 设置条件渲染和常量
        • loop mesh

          • vkCmdBindDescriptorSets
          • vkCmdPushConstants
          • Setup the conditional rendering
            • VkConditionalRenderingBeginInfoEXT
            • vkCmdBeginConditionalRenderingEXT
            • vkCmdDrawIndexed
            • vkCmdEndConditionalRenderingEXT
      • drawUI
      • vkCmdEndRenderPass
      • vkEndCommandBuffer
    • 重写 OnUpdateUIOverlay
      • 修改conditionalVisibility[i] 的值
      • updateConditionalBuffer 即可

render

  • draw

    • prepareFrame
    • vkQueueSubmit
    • submitFrame
  • updateUniformBuffers

shader

  • 正常渲染模型即可, 注意常量的使用

小结

  本节主要讲 Conditional Rendering 扩展使用方法。 该参数在prepare中初始化, 在渲染循环中更新.

Debug Markers

接口弃用, 暂时忽略, 后期补充

Negative Viewport Height

prepare

  • loadAssets:加载两张贴图, 创建两个y值相反的四边形
  • setupDescriptors
    • descriptorSetLayoutBinding
    • vkCreateDescriptorSetLayout
    • vkCreatePipelineLayout
    • vkCreateDescriptorPool
    • vkAllocateDescriptorSets
    • writeDescriptorSet
    • vkUpdateDescriptorSets
  • preparePipelines
    -vkCreateGraphicsPipelines
  • buildCommandBuffers
    • loop

      • vkBeginCommandBuffer
      • vkCmdBeginRenderPass
      • Viewport setup: 本节重点
        • VkViewport viewport{}
        • if negativeViewport
          • yes

            • viewport.y = (float)height - offsety;
            • viewport.height = -(float)height;
          • no
            • viewport.y = offsety;
            • viewport.height = (float)height;
      • vkCmdSetViewport
      • vkCmdSetScissor
      • vkCmdBindDescriptorSets
      • vkCmdBindIndexBuffer
      • vkCmdBindVertexBuffers
      • vkCmdDrawIndexed
      • vkCmdBindDescriptorSets
      • vkCmdBindIndexBuffer
      • vkCmdDrawIndexed
      • drawUI
      • vkCmdEndRenderPass
      • vkEndCommandBuffer
    • 重写 OnUpdateUIOverlay
      • 根据界面选择渲染方式重写创建commandbuffer和pipeline

        • buildCommandBuffers
        • preparePipelines

render

  • draw

    • prepareFrame
    • vkQueueSubmit
    • submitFrame

shader

  • 正常渲染模型即可

小结

  本节主要讲兼容其他渲染管线的设置方法, 实际开发中经常遇到这种情况, vulkan建议的处理方式是, 重新创建commandbuffer 和 pipeline.

Variable Rate Shading

prepare

  • loadAssets:加载场景资源
  • 开启ShadingRate扩展
    • vkCmdBindShadingRateImageNV

      • vkGetDeviceProcAddr
    • vkGetPhysicalDeviceProperties2
  • prepareShadingRateImage: 本節重點
    • 着色率图像大小取决于着色率纹理大小
    • kExtent3D imageExtent
    • vkCreateImage
    • vkGetImageMemoryRequirements
    • vkAllocateMemory
    • vkBindImageMemory
    • vkCreateImageView
    • 使用尽可能低的着色速率填充图案
      • memset(shadingRatePatternData, val, bufferSize)
    • 创建一个向外降低采样率的圆形图案
      • std::map<float, VkShadingRatePaletteEntryNV> patternLookup
    • vkCreateBuffer: stagingBuffer
    • vkGetBufferMemoryRequirements
    • vkAllocateMemory
    • vkBindBufferMemory
    • vkMapMemory
    • memcpy
    • vkUnmapMemory
    • delete[] shadingRatePatternData
    • Upload
      • createCommandBuffer
      • vkCmdPipelineBarrier
      • vkCmdCopyBufferToImage
      • vkCmdPipelineBarrier
      • flushCommandBuffer
    • vkFreeMemory
    • vkDestroyBuffer
  • prepareUniformBuffers
    • updateUniformBuffers
  • setupDescriptors
    • descriptorSetLayoutBinding
    • vkCreateDescriptorSetLayout
    • vkCreatePipelineLayout
    • vkCreateDescriptorPool
    • vkAllocateDescriptorSets
    • writeDescriptorSet
    • vkUpdateDescriptorSets
  • preparePipelines
    • SpecializationData: 一個特殊的常量

      • specializationMapEntry:alphaMask
      • specializationMapEntry:alphaMaskCutoff
      • shaderStages[1].pSpecializationInfo = &specializationInfo
    • Create pipeline without shading rate
      • vkCreateGraphicsPipelines
      • vkCreateGraphicsPipelines
    • Create pipeline with shading rate enabled: 本節重點
      • const std::vector shadingRatePaletteEntries
      • VkShadingRatePaletteNV
      • VkPipelineViewportShadingRateImageStateCreateInfoNV
      • vkCreateGraphicsPipelines
      • vkCreateGraphicsPipelines
  • buildCommandBuffers
    • loop

      • vkBeginCommandBuffer
      • vkCmdBeginRenderPass
      • vkCmdSetViewport
      • vkCmdSetScissor
      • vkCmdBindDescriptorSets
      • Bind the image that contains the shading rate patterns
        • vkCmdBindShadingRateImageNV
      • Render the scene: enableShadingRate選擇pipeline
        • vkCmdBindPipeline
        • draw
        • vkCmdBindPipeline
        • draw
      • drawUI
      • vkCmdEndRenderPass
      • vkEndCommandBuffer
    • 重写 OnUpdateUIOverlay
      - buildCommandBuffers

render

  • renderFrame

    • prepareFrame
    • vkQueueSubmit
    • submitFrame
  • updateUniformBuffers

shader

  • VS: 正常渲染
  • FS:
    • 開啓采樣率擴展

      • #extension GL_NV_shading_rate_image : require
    • 常量的獲取
      • layout (constant_id = 0) const bool ALPHA_MASK = false;
      • layout (constant_id = 1) const float ALPHA_MASK_CUTOFF = 0.0f;
    • gl_FragmentSizeNV:读取以像素为单位的有效片段大小

小结

  本节主要讲Variable Rate Shading 设置方法, 自己的翻译可能不是很恰当, 但是感觉网络上的翻译也不是太合适, 这是一个近几年提出的概念. 从本节程序上看, 开启采样率扩展能提高渲染的性能. 同时渲染结果的质量会变差. 毕竟这有点像可控降采样.

Vulkan Samples 阅读 -- Extensions(二)相关推荐

  1. Vulkan Samples 阅读 -- Hardware Accelerated Ray Tracing(一) Basic Ray Tracing Ray Traced Shadows

    目录 Basic Ray Tracing prepare render shader 小结 Ray Traced Shadows prepare render shader 小结 Basic Ray ...

  2. 大型网站技术架构:核心原理与案例分析阅读笔记二

    大型网站技术架构:核心原理与案例分析阅读笔记二 网站架构设计时可能会存在误区,其实不必一味追随大公司的解决方案,也不必为了技术而技术,要根据本公司的实际情况,制定适合本公司发展的网站架构设计,否则会变 ...

  3. 【渝粤题库】陕西师范大学201661英语阅读(二)作业(高起专)

    陕西师范大学 内 部 题 库 教育 (yuyueshool) 编制 <阅读(二)>作业 I.Words DIRECTIONS: Read the sentence given with e ...

  4. Alibaba Druid 源码阅读(二) 数据库连接池实现初步探索

    Alibaba Druid 源码阅读(二) 数据库连接池实现初步探索 简介 在上篇文章中,了解了连接池的应用场景和本地运行了示例,本篇文章中,我们尝试来探索下Alibaba Druid数据库连接池的整 ...

  5. Soul 网关源码阅读(二)代码初步运行

    Soul 源码阅读(二)代码初步运行 简介     基于上篇:Soul 源码阅读(一) 概览,这部分跑一下Soul网关的示例 过程记录     现在我们可以根据地图,稍微探索一下周边,摸一摸      ...

  6. SURF C++代码 详细阅读(二)—— 极值点检测 确定极值点精确位置

    SURF C++代码详细阅读(二) 2.2.3 极值点检测 2.2.4 确定极值点精确位置 2.3 新建自定义Ipoint类获得特征点 阅读(一)进行到了 2.2.2 获取特征点 buildRespo ...

  7. 《挑战程序设计竞赛》阅读笔记二 之 ALDS1_2_C Stable Sort

    <挑战程序设计竞赛>阅读笔记二 之 ALDS1_2_C Stable Sort 第三章 Sort I ALDS1_2_C Stable Sort 这道题目,就是为了说明 冒泡排序是稳定排序 ...

  8. 【LeGO-LOAM论文阅读(二)--特征提取(二)】

    简介 上篇博客介绍了特征提取的原理以及坐标转化和插值的源码理解,这篇将介绍特征提取的后续算法模块. 源码 1.新数据进来进行坐标转换和插补等工作 见[LeGO-LOAM论文阅读(二)–特征提取(一)] ...

  9. 如何批量制作扫描后即可在线阅读的二维码

    由于二维码在日常生活中应用比较广泛,因此受到很多行业的青睐.随着手机功能的增强,我们平时会使用手机上网,甚至连一些报纸行业也开始进军互联网行业,而它们的媒介就是二维码.读者可以通过手机对报纸上的二维码 ...

最新文章

  1. jvm类加载过程_JVM知识点——深入理解JVM的类加载
  2. 动态配置页面 之 组件系统
  3. 本地jar文件中搜索class
  4. Internet Explorer 11:不要再叫我IE
  5. Java 8和Java 14之间的新功能
  6. [css] 为什么要使用css sprites?
  7. loadrunner学习记录一
  8. 动态代理Java实现
  9. 用友发布新一代价值分析型eHR软件
  10. 【API进阶之路】逆袭!用关键词抽取API搞定用户需求洞察
  11. CSDN中使用编辑器空格
  12. socket编程(五)
  13. UVA11968 In The Airport【最值】
  14. 绿色版飞信LibFetion提示用户密码错误的解决办法,直接改用飞信号登录即可
  15. 如何建立能力评估模型?
  16. ubuntu状态栏消失
  17. 秒杀脚本丨Python淘宝或京东等秒杀抢购脚本实现
  18. 数据科学库(HM)(Day2)——matplotlib常用统计图
  19. Vmware虚拟机ip为127.0.0.1的解决办法,修改虚拟机IP的详细步骤
  20. springboot项目docker部署(1) 基础:手动打包

热门文章

  1. component-kv设计与实现
  2. 超酷的摄像头魔法特效软件:ArcSoft Magic Visual Effects
  3. Leetcode算法Java全解答--41. 缺失的第一个正数
  4. native react 图片多选_react-native实现的多图片选择器
  5. 智能手机中图像处理的原理解析及 RGB 数值变化规律研究
  6. 基于Springboot的在线网络小说阅读网站的设计与实现
  7. 华为云携手鸿蒙,培养创新型开发者
  8. 场效应管(FET)分类、符号、特性曲线
  9. 16进制与10进制互转,16进制转10进制,10进制转16进制
  10. pycharm 新建文件后选错文件格式怎么改