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.
我正在尝试将数据写入 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.