博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DirectX11 动态缓存
阅读量:4087 次
发布时间:2019-05-25

本文共 1110 字,大约阅读时间需要 3 分钟。

动态缓存

1. 为什么需要动态缓存?

例如我们要在同一副精灵纹理中创建一套精灵动画,我们需要经常更改缓存中的顶点位置信息。动态缓存对于我们需要修改一块缓存中的内容的这种情况来说是很合适的。 不推荐多次创建和销毁静态缓存块,特别是逐帧这样做,你应该使用动态缓存来做这样的任务。

2. 如何创建动态顶点缓存?

我们可以通过调用设备的CreateBuffer函数来创建顶点缓存,该函数以前已经介绍过。不同的是,我们将子资源参数(第二个参数)设置为 NULL,因为我们会对顶点缓存的内容进行动态更新,从而在创建时不需要设置任何数据。当动态缓存创建后,我们能够在任何时候对它进行更新。

3. 动态缓存描述对象如何填充?

为了创建一块动态顶点缓存,我们首先需要填充缓存描述对象:

  • Usage:设置使用标识为 D3D11_USAGE_DYNAMIC 来允许我们的缓存能够通过 CPU 来动态更新。在之前的 Demo 中对于静态缓存我们设置的使用标识是 D3D11_USAGE_DEFAULT。
  • CPUAccessFlags:设置 CPU 访问标识为 D3D11_CPU_ACCESS_WRITE。这是为了让 CPU 能够对 GPU 中的资源进行写访问。其它的访问标识还有读访问和读写访问,但是在本 Demo 中我们不需要 CPU 读任何东西。
  • BindFlags:像以前那样设为D3D11_BIND_VERTEX_BUFFER就可以了。
  • ByteWidth:我们这个纹理有24帧,每帧有6个顶点,所以按实际顶点个数计算即可。

4. 动态缓存示例代码

D3D11_BUFFER_DESC vertexDesc;    ZeroMemory( &vertexDesc, sizeof( vertexDesc ) );    vertexDesc.Usage = D3D11_USAGE_DYNAMIC;    vertexDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;    vertexDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;    const int sizeOfSprite = sizeof( VertexPos ) * 6;    const int maxLetters = 24;    vertexDesc.ByteWidth = sizeOfSprite * maxLetters;    d3dResult = d3dDevice_->CreateBuffer( &vertexDesc, 0, &vertexBuffer_ );

转载地址:http://ojyii.baihongyu.com/

你可能感兴趣的文章
这些网站有一些嵌入式面试题合集
查看>>
我觉得刷题是有必要的,不然小心实际被问的时候懵逼,我觉得你需要刷个50份面试题。跟考研数学疯狂刷卷子一样!
查看>>
我觉得嵌入式面试三要素:基础吃透+项目+大量刷题,缺一不可。不刷题是不行的。而且得是大量刷,刷出感觉套路,别人做题都做得是固定题型套路条件反射了,你还在那慢慢理解慢慢推是不行的,也是考研的教训。
查看>>
相机标定的目的:获取摄像机的内参和外参矩阵(同时也会得到每一幅标定图像的选择和平移矩阵),内参和外参系数可以对之后相机拍摄的图像就进行矫正,得到畸变相对很小的图像。
查看>>
现在来看,做个普罗米修斯的docker镜像对我而言并不难,对PX4仿真环境配置也熟悉了。
查看>>
删除docker容器和镜像的命令
查看>>
VINS-Fusion Intel® RealSense™ Depth Camera D435i
查看>>
使用Realsense D435i运行VINS-Fusion并建图
查看>>
gazebo似乎就是在装ROS的时候一起装了,装ROS的时候选择的是ros-melodic-desktop-full的话。
查看>>
React + TypeScript 实现泛型组件
查看>>
TypeScript 完全手册
查看>>
React Native之原理浅析
查看>>
Git操作清单
查看>>
基础算法
查看>>
前端面试
查看>>
React Hooks 异步操作踩坑记
查看>>
聊聊编码那些事,顺带实现base64
查看>>
TypeScript for React (Native) 进阶
查看>>
React 和 ReactNative 的渲染机制/ ReactNative 与原生之间的通信 / 如何自定义封装原生组件/RN中的多线程
查看>>
JavaScript实现DOM树的深度优先遍历和广度优先遍历
查看>>