我最近开始使用Nvidia Cg
着色器,如果我在Nvidia GPU
(GTS250
在我的情况下)上这样做,一切看起来和工作都很好。
我尝试启动相同的(我自己的测试应用程序),ATI HD4650
但没有看到任何输出。在那之后,我开始尝试测试示例(提供Nvidia Cg 3.0
)和 6/7 工作,但第一个(似乎是最简单的)没有。
这是着色器代码:
// This is C2E1v_green from "The Cg Tutorial" (Addison-Wesley, ISBN
// 0321194969) by Randima Fernando and Mark J. Kilgard. See page 38.
struct C2E1v_Output {
float4 position : POSITION;
float3 color : COLOR;
};
C2E1v_Output C2E1v_green(float2 position : POSITION)
{
C2E1v_Output OUT;
OUT.position = float4(position,0,1);
OUT.color = float3(0,1,0);
return OUT;
}
我不知道为什么这个简单的着色器不起作用,而例如与以下 passthru-shader配对Nvidia Cg SDK
的相同着色器确实起作用(来自 的示例 2 ):
// This is C2E2f_passthru from "The Cg Tutorial" (Addison-Wesley, ISBN
// 0321194969) by Randima Fernando and Mark J. Kilgard. See page 53.
struct C2E2f_Output {
float4 color : COLOR;
};
C2E2f_Output C2E2f_passthru(float4 color : COLOR)
{
C2E2f_Output OUT;
OUT.color = color;
return OUT;
}
有人遇到过同样的麻烦吗?有任何想法吗?
谢谢你。
在此处更新:打开最大调试输出使问题变得明显:
vs_3_0 shader executed in hardware vertex processing mode can only be paired
with at least a ps_3_0 shader
该包中的第一个示例是唯一一个只有顶点着色器的示例,没有任何(甚至是简单的直通)像素着色器。我不知道为什么 Nvidia Cg 运行时会在这种情况下生成不兼容的着色器,但它显然只在有点旧的 GPU ( ATI HD4650
) 上失败了。
无论如何,我很愚蠢,可以在不打开调试输出的情况下工作。
2 Alex Farber:我想你可以发布一个虚拟答案,这样我就可以奖励你,因为你帮助我意识到我忘了打开调试。谢谢你。