direct11 将数据写入像素着色器中的缓冲区? (就像打开的 ssbo)

direct11 write data to buffer in pixel shader? (like ssbo in open)

我正在尝试将数据写入 hlsl 着色器中的缓冲区。我知道在opengl中你需要ssbo,但是在direct11中有相应的缓冲区类型吗?(我是新手)。

p.s。我正在使用 monogame,所以可用的最新着色器模型是 3.0。

谢谢!

Shader Model 3对应DirectX 9架构。该架构如下所示:


(来源:s-msft.com

(来源:https://msdn.microsoft.com/en-us/library/windows/desktop/bb219679(v=vs.85).aspx

如您所见,像素着色器只有一个输出。此输出可以是颜色或深度值,并将渲染到渲染目标。所以,DX9没办法。

在 DX10 (SM 4) 中,流水线如下所示:


(来源:s-msft.com

来源:https://msdn.microsoft.com/en-us/library/windows/desktop/bb205123(v=vs.85).aspx

同样,像素着色器的输出是颜色和深度。 DX10也没办法。

最后,DirectX 11 (SM 5):


(来源:s-msft.com

来源:https://msdn.microsoft.com/en-us/library/windows/desktop/ff476882(v=vs.85).aspx

现在有一种从像素着色器到内存资源的方法。您需要的缓冲区类型是 RWBuffer.