Graphics 错误';重叠寄存器语义尚未实现';在顶点着色器中
我正在尝试在hlsl中执行漫反射。目前我正在研究顶点着色器。不幸的是,在尝试使用Graphics 错误';重叠寄存器语义尚未实现';在顶点着色器中,graphics,directx,hlsl,pixel-shading,Graphics,Directx,Hlsl,Pixel Shading,我正在尝试在hlsl中执行漫反射。目前我正在研究顶点着色器。不幸的是,在尝试使用fxc.exe编译时,我遇到了以下错误: C:\Users\BBaczek\Projects\MyApp\VertexShader.vs.hlsl(2,10-25) : error X4500: overlapping register semantics not yet implemented 'c1' C:\Users\BBaczek\Projects\MyApp\VertexShader.vs.hlsl(2,1
fxc.exe
编译时,我遇到了以下错误:
C:\Users\BBaczek\Projects\MyApp\VertexShader.vs.hlsl(2,10-25)
: error X4500: overlapping register semantics not yet implemented 'c1'
C:\Users\BBaczek\Projects\MyApp\VertexShader.vs.hlsl(2,10-25)
: error X4500: overlapping register semantics not yet implemented 'c2'
C:\Users\BBaczek\Projects\MyApp\VertexShader.vs.hlsl(2,10-25)
: error X4500: overlapping register semantics not yet implemented 'c3'
顶点着色器代码:
float4x4 WorldViewProj : register(c0);
float4x4 inv_world_matrix : register(c1);
float4 LightAmbient;
float4 LightPosition;
struct VertexData
{
float4 Position : POSITION;
float4 Normal : NORMAL;
float3 UV : TEXCOORD;
};
struct VertexShaderOutput
{
float4 Position : POSITION;
float3 Color: COLOR;
};
VertexShaderOutput main(VertexData vertex)
{
VertexShaderOutput output;
vertex.Normal = normalize(vertex.Normal);
float4 newColor = LightAmbient;
vector obj_light = mul(LightPosition, inv_world_matrix);
vector LightDir = normalize(obj_light - vertex.Position);
float DiffuseAttn = max(0, dot(vertex.Normal, LightDir));
vector light = { 0.8, 0.8, 0.8, 1 };
newColor += light * DiffuseAttn;
output.Position = mul(vertex.Position, WorldViewProj);
output.Color = float3(newColor.r, newColor.g, newColor.b);
return output;
}
和用于执行编译的命令:
fxc /T vs_2_0 /O3 /Zpr /Fo VertexShader.vs VertexShader.vs.hlsl
为什么我会犯这个错误?我能做些什么来防止这种情况发生?发现了它-我不会删除这个问题,因为有人可能会发现它很有用 你需要做的是改变
float4x4 WorldViewProj : register(c0);
float4x4 inv_world_matrix : register(c1);
到
我不确定什么是好的,但我假设float4x4将在该缓冲区中占用更多的空间(4x4-因此需要4个位置)。我认为这个解释有点傻,但它是有效的。其实没那么傻。本例中的“寄存器”是单个浮点4,因此由浮点4组成的矩阵将消耗4个寄存器。因此,第二个矩阵必须从第5个寄存器开始。
float4x4 WorldViewProj : register(c0);
float4x4 inv_world_matrix : register(c4);