gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:00:24 24 4
gpt4 key购买 nike

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

最佳答案

欢迎使用 stackoverflow :)

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

他们宣布了一个RWTexture2D<float4> frameBuffer他们在函数中访问 SortAndRenderCSOIT_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;

如您所见,他们有 r0 , r1r2 uint实际上是 RGBA 颜色的值(每个 channel 一个字节),他们使用移位和掩码提取每个 channel 并对其进行归一化。

如果您已经float4,则无需这样做当然是值(value)观。然后他们做那些 lerps(用于插值)。同样,您不需要这样做。你感兴趣的是他们访问frameBuffer使用数组符号和 uint2坐标。

关于c++ - 如何使用 directX 11 计算着色器显示内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3172160/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com