如何解决尝试在 hlsl 中分配值时我做错了什么?
我在几何着色器中有这个
cbuffer cbFixed
{
float2 TexC[4] =
{
float2(0.0f,1.0f),float2(0.0f,0.0f),float2(1.0f,0.0f)
};
};
struct PS_INPUT
{
float4 Pos : SV_POSITION;
float4 PosWorld : POSITION;
float4 Norm : NORMAL;
float2 Tex : TEXCOORD;
uint PrimID: SV_PrimitiveID;
};
以后……
PS_INPUT gout;
for (int i = 0; i < 4; i++)
{
// other stuff
gout.Tex = TexC[i];
// other stuff
}
但是,由于某种原因,这并没有按预期工作,我的意思是没有应用纹理,而这样做:
for (int i = 0; i < 4; i++)
{
if (i == 0) gout.Tex = float2(0.0f,1.0f);
if (i == 1) gout.Tex = float2(0.0f,0.0f);
if (i == 2) gout.Tex = float2(1.0f,1.0f);
if (i == 3) gout.Tex = float2(1.0f,0.0f);
}
知道为什么吗?我不想把这篇文章写得很长,所以尽量减少细节。
解决方法
您的 TexC 值被忽略,因为 cbuffer 中的变量必须通过调用 *SetConstantBuffers 设置,并且像您这样的默认初始值设定项将被忽略,如果您不这样做,您将获得未定义的行为(在大多数情况下,您将阅读零值)。你想要的是写这样的东西:
static const float2 TexC[4] =
{
float2(0.0f,1.0f),float2(0.0f,0.0f),float2(1.0f,0.0f)
};
而不是 cbuffer。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。