Vulkan Samples 阅读 -- User Interface(一) Text Rendering & Distance Field Fonts & ImGui Overlay

Text Rendering

prepare

  • loadAssets: 加载立方体
  • prepareUniformBuffers
    • createBuffer
    • updateUniformBuffers
  • setupDescriptorSetLayout
    • descriptorSetLayoutBinding
    • vkCreateDescriptorSetLayout
    • vkCreatePipelineLayout
  • preparePipelines
    • vkCreateGraphicsPipelines:mesh
  • setupDescriptorPool
    • vkCreateDescriptorPool
  • setupDescriptorSet
    • vkAllocateDescriptorSets
    • writeDescriptorSet
    • vkUpdateDescriptorSets
  • buildCommandBuffers
    • loop
      • vkBeginCommandBuffer
      • vkCmdBeginRenderPass
      • vkCmdSetViewport
      • vkCmdSetScissor
      • vkCmdBindPipeline
      • vkCmdBindDescriptorSets
      • draw
      • vkCmdEndRenderPass
      • vkEndCommandBuffer
    • vkQueueWaitIdle
  • prepareTextOverlay: 本节重点
    • shaderStages: 保存渲染字体的shader
    • new TextOverlay
      • 初始化成员变量
      • prepareResources
        • stb_font_consolas_24_latin1
          • 获取字体信息
        • vkCreateCommandPool
        • vkAllocateCommandBuffers
        • vkCreateBuffer
        • vkGetBufferMemoryRequirements
        • vkAllocateMemory
        • vkBindBufferMemory
        • vkCreateImage: 字体纹理
        • vkGetImageMemoryRequirements
        • vkAllocateMemory
        • vkBindImageMemory
        • Staging
          • vkCreateBuffer
          • vkGetBufferMemoryRequirements
          • vkAllocateMemory
          • vkBindBufferMemory
          • vkMapMemory
          • memcpy
          • vkUnmapMemory
        • Copy to image
          • vkAllocateCommandBuffers
          • vkBeginCommandBuffer
          • setImageLayout
          • vkCmdCopyBufferToImage
          • setImageLayout
          • vkEndCommandBuffer
        • vkQueueSubmit
        • vkQueueWaitIdle
        • vkFreeCommandBuffers
        • vkFreeMemory
        • vkDestroyBuffer
        • vkCreateImageView
        • vkCreateSampler
        • vkCreateDescriptorPool
        • vkCreateDescriptorSetLayout
        • vkCreatePipelineLayout
        • vkAllocateDescriptorSets
        • writeDescriptorSet
        • vkUpdateDescriptorSets
        • vkCreatePipelineCache
      • prepareRenderPass
        • vkCreateRenderPass
      • vkCreateGraphicsPipelines
    • updateTextOverlay
      • textOverlay->beginTextUpdate()
        • vkMapMemory
      • textOverlay->addText(包括位置信息)
      • textOverlay->endTextUpdate()
        • vkUnmapMemory
        • updateCommandBuffers
          • loop
            • vkBeginCommandBuffer
            • vkCmdBeginRenderPass
            • vkCmdSetViewport
            • vkCmdSetScissor
            • vkCmdBindPipeline
            • vkCmdBindDescriptorSets
            • vkCmdBindVertexBuffers
            • vkCmdBindVertexBuffers
            • vkCmdDraw
            • vkCmdEndRenderPass
            • vkEndCommandBuffer

render

  • draw
    • prepareFrame
    • commandBuffers.push_back(textOverlay->cmdBuffers[currentBuffer])
    • vkQueueSubmit
    • submitFrame
  • vkDeviceWaitIdle
  • updateTextOverlay

shader

  • VS: 正常渲染三角形
  • FS: 正常渲染(使用texture获取字体)

小结

  本节主要讲字体渲染方法。vulkan管线设置没有新东西。注意字体资源的加载流程,以及字体渲染的方法即可。

Distance Field Fonts

prepare

  • parsebmFont: 加载字体
  • loadAssets: 加载字体sdf&bitmap
  • generateText: 创建四边形作为字符的画板
    • VBO, IBO
  • setupVertexDescriptions
    • 设置VAO的Description
  • prepareUniformBuffers
    • createBuffer
    • updateUniformBuffers
    • updateFontSettings
      • memcpy(uniformBuffers.fs.mapped, &uboFS, sizeof(uboFS));
  • setupDescriptorSetLayout
    • descriptorSetLayoutBinding
    • vkCreateDescriptorSetLayout
    • vkCreatePipelineLayout
  • preparePipelines
    • vkCreateGraphicsPipelines:mesh
    • vkCreateGraphicsPipelines: 字体
  • setupDescriptorPool
    • vkCreateDescriptorPool
  • setupDescriptorSet
    • vkAllocateDescriptorSets
    • writeDescriptorSet
    • vkUpdateDescriptorSets
  • buildCommandBuffers
    • loop
      • vkBeginCommandBuffer
      • vkCmdBeginRenderPass
      • vkCmdSetViewport
      • vkCmdSetScissor
      • vkCmdBindPipeline
      • vkCmdBindVertexBuffers
      • vkCmdBindIndexBuffer
      • vkCmdDrawIndexed
      • Linear filtered bitmap font
        • vkCmdSetViewport
        • vkCmdBindDescriptorSets
        • vkCmdBindPipeline
        • vkCmdDrawIndexed
      • drawUI
      • vkCmdEndRenderPass
      • vkEndCommandBuffer

render

  • draw
    • prepareFrame
    • vkQueueSubmit
    • submitFrame

shader

  • bitmap: VS&FS 正常
  • sdf:
    • VS: 正常
    • FS:
      • fwidth = abs(dFdx§)+ abs(dFdy§)
      • smoothstep: 可以用来生成0到1的平滑过渡值,

小结

  本节主要讲Distance Field Fonts 的使用, vulkan管线设置没有新东西。 感觉Distance Field Fonts字体渲染其实就是将一个四边形按照字体保存的距离场计算透明度. outline 也是根据这个场生成的(这里可以借鉴一下outline方法).

ImGui Overlay

   本节忽略掉, 应该不会使用到

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
realesrgan-ncnn-vulkan-20211212-windows是一个基于ncnn框架和Vulkan图形API开发的图像超分辨率增强模型。它是由GitHub用户realsrgan开发的最新版本,最新发布日期为2021年12月12日,专为Windows操作系统而设计。 该模型的主要应用是图像超分辨率增强,通过提高图像的分辨率和细节,使图像看起来更加清晰和真实。它采用深度学习和卷积神经网络等先进的技术,能够将低分辨率的图像转换成高分辨率的图像,从而提升图像的质量和视觉效果。 realesrgan-ncnn-vulkan-20211212-windows的开发使用了ncnn框架和Vulkan图形API,这使得它能够在Windows系统上实现快速且高效的图像处理。ncnn是一个轻量级的深度学习框架,专注于在移动平台和嵌入式设备上实现高性能和低延迟的推理。而Vulkan图形API是一种跨平台的图形渲染和计算API,可以充分利用计算设备的性能,提供高效的图像处理和渲染能力。 realesrgan-ncnn-vulkan-20211212-windows的使用可以通过命令行或者图形界面进行,用户可以根据自己的需求和偏好选择适合的方式。该模型提供了训练好的权重参数,用户可以直接加载这些参数并进行图像超分辨率增强。此外,该模型还支持批量处理和视频处理,方便用户对多个图像进行处理。 总之,realesrgan-ncnn-vulkan-20211212-windows是一个高效、快速且易于使用的图像超分辨率增强模型,适用于Windows系统,并利用了ncnn框架和Vulkan图形API的优势,为用户提供了出色的图像处理效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值