Forráskód Böngészése

feat: 添加资源转换

nicetry12138 1 éve
szülő
commit
f02659059d
1 módosított fájl, 18 hozzáadás és 0 törlés
  1. 18 0
      图形学/DirectX学习/README.md

+ 18 - 0
图形学/DirectX学习/README.md

@@ -667,6 +667,23 @@ HRESULT CreateFence(
 
 使用描述符来表示资源是因为 GPU 资源实际上都是一些普通的内存块,很多时候只希望将部分数据绑定到渲染流水线,那么从整个资源中将其选出?或者内存块如何使用?这些都是记录在描述符中的
 
+#### 资源转换
+
+为了实现常见的渲染效果,经常会通过 GPU 对某个资源 R 按顺序进行先写后读两种操作
+
+当 GPU 的写操作还没完成或者甚至没开始的时候,却开始读取资源,便会导致**资源冒险**
+
+`Direct3D` 专门针对资源提供了一组相关状态,资源最开始处于默认状态,该状态会一直持续到应用程序通过 `Direct3D` 将其转换(`transition`)为另一中状态为止
+
+比如如果要对某个纹理资源执行写操作,需要先将其设置为渲染目标状态;如果对纹理进行读操作,需要将其转换为着色器资源状态
+
+通过命令列表设置**转换资源屏障**数组,即可执行资源的转换
+
+```cpp
+mCommandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(mDepthStencilBuffer.Get(),
+		D3D12_RESOURCE_STATE_COMMON, D3D12_RESOURCE_STATE_DEPTH_WRITE));
+```
+
 #### 资源驻留
 
 对于复杂场景,一些资源并不需要一开始就加载在显存中
@@ -679,6 +696,7 @@ HRESULT ID3D12Device::MakeResident
 HRESULT ID3D12Device::Evict
 ```
 
+
 ### 初始化项目
 
 封装报错宏