gpt4 book ai didi

c++ - 这是 DirectX9 Effect Compiler 中的错误吗? "Invalid input semantics - POSITIONT0"

转载 作者:行者123 更新时间:2023-11-28 02:22:46 25 4
gpt4 key购买 nike

我正在尝试针对 DirectX9 和着色器模型 2 编译一个非常简单的效果着色器。我正在尝试直接传递顶点位置的屏幕坐标,而不是乘以世界、 View 和投影矩阵,所以我使用VertexShaderInput 结构中的 POSITIONT 语义而不是 POSTION0 语义。但是,当我尝试使用

编译着色器时
fxc.exe /Od /Zi /T fx_2_0 /Fo simple.fxo simple.fx

我收到以下错误:“错误 X4502:输入语义无效 - POSITIONT0”

它似乎出于某种原因自动在语义末尾添加了一个 0。这似乎是我的错误,因为 POSITIONT 在这里被清楚地描述为有效的输入语义: https://msdn.microsoft.com/en-us/library/windows/desktop/bb509647(v=vs.85).aspx#PS

并且它是唯一一个不允许在语义末尾附加额外整数的。

编辑:我刚刚发现,如果我将 POSITIONT 更改为 POSITIONT1,它会正常工作。这似乎与上面的文档描述的内容相反。

simple.fx 的内容:

struct VertexShaderInput
{
float4 Position : POSITIONT;
float4 Color : COLOR0;
};

struct VertexShaderOutput
{
float4 Position : POSITION0;
float4 Color : COLOR0;
};

VertexShaderOutput VertexShaderFunction(VertexShaderInput input)
{
VertexShaderOutput output;
output.Position = input.Position;
output.Color = input.Color;
return output;
}


float4 PixelShaderFunction(VertexShaderOutput input) : COLOR0
{
return input.Color;
}

technique Ambient
{
pass Pass1
{
VertexShader = compile vs_2_0 VertexShaderFunction();
PixelShader = compile ps_2_0 PixelShaderFunction();
}
}

最佳答案

对于旧版 Direct3D9,有一个特殊的 D3DDECLUSAGE_POSITIONT,这意味着只跳过顶点处理。因此,您只能在 PIXEL SHADER 输入中使用 POSITIONT——即它根本不能用于 VERTEX SHADER。

将着色器更改为使用 POSITIONPOSITION0

关于c++ - 这是 DirectX9 Effect Compiler 中的错误吗? "Invalid input semantics - POSITIONT0",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31796875/

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