如何使用directX 11计算着色器显示内容?

时间:2010-07-03 16:58:39

标签: c++ graphics hlsl directx-11 compute-shader

我想从directX 11计算着色器写入纹理。但是我不知道如何将它显示在屏幕上,也不确定我应该使用什么样的缓冲区来执行此操作。

1 个答案:

答案 0 :(得分:2)

欢迎来到stackoverflow:)

要选择的资源类型为RWTexture2D<float4>,因为您可以通过交换链直接在屏幕上打印。 您可以查看DirectX SDK OIT示例:

他们已声明RWTexture2D<float4> frameBuffer他们在SortAndRenderCS的{​​{1}}函数中访问。

OIT_CS.hlsl

正如您所看到的,他们的// convert the color to floats float4 color[3]; color[0].r = (r0 >> 0 & 0xFF) / 255.0f; color[0].g = (r0 >> 8 & 0xFF) / 255.0f; color[0].b = (r0 >> 16 & 0xFF) / 255.0f; color[0].a = (r0 >> 24 & 0xFF) / 255.0f; color[1].r = (r1 >> 0 & 0xFF) / 255.0f; color[1].g = (r1 >> 8 & 0xFF) / 255.0f; color[1].b = (r1 >> 16 & 0xFF) / 255.0f; color[1].a = (r1 >> 24 & 0xFF) / 255.0f; color[2].r = (r2 >> 0 & 0xFF) / 255.0f; color[2].g = (r2 >> 8 & 0xFF) / 255.0f; color[2].b = (r2 >> 16 & 0xFF) / 255.0f; color[2].a = (r2 >> 24 & 0xFF) / 255.0f; float4 result = lerp(lerp(lerp(0, color[2], color[2].a), color[1], color[1].a), color[0], color[0].a); result.a = 1.0f; frameBuffer[nDTid.xy] = result; r0r1 r2值实际上是RGBA颜色(每个频道一个字节),他们会使用转移和掩盖并将其标准化。

如果您当然已经有uint个值,则不需要这样做。 然后他们做那些lerps(用于插值)。你不应该再这样做了。 您感兴趣的是他们使用数组表示法访问float4而坐标使用frameBuffer