目录

  • Texture Arrays
    • prepare
    • render
    • 小结
  • Cube Map Textures
    • prepare
    • render
    • 小结
  • 3D Textures
    • prepare
    • render
    • 小结

Texture Arrays

prepare

  • loadAssets: 加载纹理

    • ktx_uint8_t *textureData 从读图API中将纹理读入
    • vkCreateBuffer: 创建stagingBuffer
    • vkGetBufferMemoryRequirements: 申请buffer使用的内存
    • vkAllocateMemory: 分配内存
    • vkBindBufferMemory: 绑定内存
    • vkMapMemory – memcpy – vkUnmapMemory: 将纹理信息复制到 host local staging buffer (specific layout)
    • std::vector bufferCopyRegions: 这里上节是绑定 mipmap 的, 这里 Texture Arrays 也是根据 layerCount 写入vector中.
    • vkCreateImage: Create optimal tiled target image on the device
      • 其中主要的是 imageCreateInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
    • vkGetImageMemoryRequirements: 申请内存
    • vkAllocateMemory: 分配内存
    • vkBindImageMemory: 绑定资源
    • createCommandBuffer:创建复制命令
    • VkImageSubresourceRange: layerCount 定义为数组的个数
    • setImageLayout: 即 imageMemoryBarrier
    • vkCmdCopyBufferToImage:Copy mip levels from staging buffer
    • setImageLayout:从TRANSFER Barrier 到 FRAGMENT_SHADER
    • flushCommandBuffer
    • vkCreateSampler
    • vkCreateImageView
    • vkFreeMemory:Clean up staging resources
    • vkDestroyBuffer:Clean up staging resources
    • ktxTexture_Destroy:释放从磁盘读取图片的内存
  • generateCube:创建一个立方体
  • prepareUniformBuffers
    • createBuffer

      • 创建 UniformBuffer: 根据纹理数组个数申请 buffer size
      • vkMapMemory – memcpy – vkUnmapMemory: 更新 buffer 中数据
    • updateUniformBuffersCamera
  • setupDescriptorSetLayout
  • preparePipelines
  • setupDescriptorPool
  • setupDescriptorSet: 这里需要对纹理数据描述符进行绑定
       // Image descriptor for the texture arrayVkDescriptorImageInfo textureDescriptor =vks::initializers::descriptorImageInfo(textureArray.sampler,textureArray.view,textureArray.imageLayout);
    
  • buildCommandBuffers
  • shader 中获取Texture Array
    layout (binding = 1) uniform sampler2DArray samplerArray;
    -------------------------
    outFragColor = texture(samplerArray, inUV);
    

render

  • draw
  • updateUniformBuffersCamera

小结

   Texture Array 与 mipmap 绑定相似。不同的是Texture Array 还需在setupDescriptorSet 中进行设置。这样 shader 才能使用 sampler2DArray 获取纹理。

Cube Map Textures

prepare

  • loadAssets:

    • 加载模型
    • 加载cubmap
      • ktx_uint8_t *textureData 从读图API中将纹理读入
      • 创建 staging buffer:步骤都一样这里不重复了
      • std::vector bufferCopyRegions: 这里上节是绑定 mipmap 的, 这里 Texture Arrays 也是根据 layerCount 写入vector中.
      • vkCreateImage: Create optimal tiled target image on the device
        • 其中主要的是 imageCreateInfo.arrayLayers = 6;
        • imageCreateInfo.flags = VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT;
      • vkGetImageMemoryRequirements - vkAllocateMemory - vkBindImageMemory
      • createCommandBuffer:创建复制命令
      • bufferCopyRegion:中需要cub的6个纹理以及它的mipmap
      • VkImageSubresourceRange: layerCount 定义为6
      • setImageLayout: 即 imageMemoryBarrier
      • vkCmdCopyBufferToImage:Copy mip levels from staging buffer
      • setImageLayout:从TRANSFER Barrier 到 FRAGMENT_SHADER
      • flushCommandBuffer
      • vkCreateSampler
      • vkCreateImageView
        • view.viewType = VK_IMAGE_VIEW_TYPE_CUBE;
        • view.subresourceRange.layerCount = 6;
        • view.subresourceRange.levelCount = cubeMap.mipLevels;
      • vkFreeMemory:Clean up staging resources
      • vkDestroyBuffer:Clean up staging resources
      • ktxTexture_Destroy:释放从磁盘读取图片的内存
  • prepareUniformBuffers
    • createBuffer
    • updateUniformBuffers
  • setupDescriptorSetLayout
  • preparePipelines
    • 需要多加一个 渲染 CUBMAP Pipeline
  • setupDescriptorPool
  • setupDescriptorSet: 这里需要对纹理数据描述符进行绑定
       // Image descriptor for the cube map textureVkDescriptorImageInfo textureDescriptor =vks::initializers::descriptorImageInfo(cubeMap.sampler,cubeMap.view,cubeMap.imageLayout);
    
  • buildCommandBuffers
  • shader 中获取Texture Array
    layout (binding = 1) uniform samplerCube samplerCubeMap;;
    -------------------------
    outFragColor = texture(samplerCubeMap, inUVW);
    

render

  • draw

小结

   Cube Map Textures 其实就是 6个纹理组成的Texture Array, shader 使用 samplerCube 获取纹理。

3D Textures

prepare

  • generateQuad
  • setupVertexDescriptions
  • prepareUniformBuffers
    • createBuffer
    • updateUniformBuffers
  • prepareNoiseTexture
    • VkImageCreateInfo: .imageType = VK_IMAGE_TYPE_3D
    • vkCreateImage
    • vkGetImageMemoryRequirements-vkAllocateMemory-vkBindImageMemory
    • vkCreateSampler
    • VkImageViewCreateInfo: view.viewType = VK_IMAGE_VIEW_TYPE_3D
    • vkCreateImageView
    • updateNoiseTexture: 就是向纹理写入随机数据
      • stagingBuffer

        • vkCreateBuffer-vkGetBufferMemoryRequirements-vkAllocateMemory-vkBindBufferMemory
        • vkMapMemory-memcpy-vkUnmapMemory
        • createCommandBuffer
        • setImageLayout-vkCmdCopyBufferToImage-setImageLayout
        • flushCommandBuffer
    • vkFreeMemory
    • vkDestroyBuffer
  • setupDescriptorSetLayout
  • preparePipelines
  • setupDescriptorPool
  • setupDescriptorSet
  • buildCommandBuffers
  • shader 中获取Texture Array
    layout (binding = 1) uniform sampler3D samplerColor;
    -------------------------
    vec4 color = texture(samplerColor, inUV);
    

render

  • draw
  • updateUniformBuffers

小结

  3D Textures 很像Texture Array, shader 使用 sampler3D 获取纹理。

Vulkan Samples 阅读 -- Basics(四): Texture Arrays Cube Map Textures 3D Textures相关推荐

  1. Vulkan Samples 阅读 -- Extensions(二)

    目录 Conditional Rendering prepare render shader 小结 Debug Markers Negative Viewport Height prepare ren ...

  2. 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 ...

  3. 深度学习论文阅读(四):GoogLeNet《Going Deeper with Convolutions》

    深度学习论文阅读(四):GoogLeNet<Going Deeper with Convolutions> Abstract 摘要 1.Introduction 引言 2. Related ...

  4. ExtJS4 API文档阅读(四)——Data

    2019独角兽企业重金招聘Python工程师标准>>> ExtJS4 API文档阅读(四)--Data 数据 Data包负责加载和保存你应用程序中的所有数据,由41个类构成,其中有三 ...

  5. Alibaba Druid 源码阅读(四) 数据库连接池中连接获取探索

    Alibaba Druid 源码阅读(四) 数据库连接池中连接获取探索 简介 上文中分析了数据库连接池的初始化部分,接下来我们来看看获取连接部分的代码 数据库连接池中连接获取 下面的相关的代码,在代码 ...

  6. Soul 网关源码阅读(四)Dubbo请求概览

    Soul 网关源码阅读(四)Dubbo请求概览 简介     本次启动一个dubbo服务示例,初步探索Soul网关源码的Dubbo请求处理流程 示例运行 环境配置     在Soul源码clone下来 ...

  7. 语文阅读教学“四何”问题设计

    转:https://www.fx361.com/page/2019/0916/5548386.shtml "四何"问题是"是何""为何"&q ...

  8. JS高级程序设计——阅读笔记四

    JS高级程序设计--阅读笔记四 第六章 集合引用类型 6.1 Object 6.2 Array 6.2.1 创建数组 from()函数 6.2.2 数组空位 6.2.3 数组索引 6.2.4 检测数组 ...

  9. Cube Map 系列之:手把手教你 实现天空盒(Sky Box)

    什么是天空盒 An skybox is a box with textures on it to look like the sky in all directions or rather to lo ...

  10. 四种方法使Map线程安全

    四种方法使Map线程安全 如果需要使 Map 线程安全,大致有这么四种方法: 1.使用 synchronized 关键字,这也是最原始的方法.代码如下 synchronized(anObject) { ...

最新文章

  1. NOIP2018TG 初赛复习
  2. 第四章:Spring项目文件上传两种方式(全解析)
  3. linux c 字符串查找函数 strstr strcasestr
  4. Android 实现简单的插件化模块化
  5. phpcmsv9mysql扩展_phpcmsV9升级到php7.1+mysql5.6+nginx1.9迁移步骤nginx中文伪静态rewrite配置...
  6. 一般控制矩阵转能控标准型
  7. 浅谈 MySQL 中优化 SQL 语句查询常用的 30 种方法
  8. Ubuntu下使用UFW配置防火墙(简化iptables的操作)
  9. 华为MDC调试工具使用介绍
  10. 添加负载机_从 Coco 转向 Koko,Jumpserver 堡垒机 V1.5.3 发布
  11. python3语法学习第四天--字符串
  12. 怎么用计算机知道密码,如何用电脑看到自家路由器的密码
  13. [转] React之Immutable学习记录
  14. requests库手工识别验证码登录超星泛雅
  15. 测试分析报告(GB8567——88)基于协同的在线表格forture-sheet
  16. 北京计算机游戏专业排名2015,2015大学专业排行榜_大学最佳专业排行榜_游戏专业怎么样_52PK游戏网...
  17. Python BDD 框架之lettuce
  18. 自考那些事儿(五):软件开发工具(实践篇)
  19. java lodop打印_[Java教程]LODOP打印插件
  20. android banner 广告,Android convinientbanner顶部广告轮播控件使用详解

热门文章

  1. Hive—日期格式使用总结
  2. 超强,废弃手机用来做服务器,不用root,外网可访问!
  3. Pandas 筛选数据的 8 个神操作
  4. python - 1024 Spider
  5. gggggggggggggggggdsfdsf
  6. 芯片自主注释流程代码
  7. 深度精简版XP如何安装IIS
  8. mysql数据库增加一行_在数据库中添加一行的SQL语句怎么写?
  9. 多重if-else的精简方式
  10. 18年NDVI斜率图生成