2012-09-24 63 views
1

我会问一个相对普遍的问题。HLSL代码没有注册?

我正在使用VC++ 2010,使用着色器组件编程Direct X9应用程序。该程序编译得很好,它绘制了一个点燃和质感的广场。问题在于,尽管程序的C++结束工作正常,并且更改(如更改照明颜色或纹理位置)可以正常工作,但忽略.fx文件的所有更改。实际上从指定目录中删除文件实际上对程序没有影响。

这是编译器问题吗? HLSL文件当然不是无用的,我的意思是我将变量传递给它,所以他们可以在哪里?

main.cpp中:mediafire.com/?9n4llrclcfohqfb

transform.fx:mediafire.com/?jqach463p2vcqhz

+2

在没有更多细节的情况下回答这个问题几乎是不可能的,比如:你如何加载着色器?你确定它不在可执行文件的同一目录中加载一个副本吗?你正在谈论的事情是在程序运行时发生的变化,还是在运行程序的不同实例之间? –

+0

http://www.mediafire.com/?9n4llrclcfohqfb http://www.mediafire.com/?jqach463p2vcqhz main.cpp and transform.fx; 不同的实例之间,我改变了代码,重新编译并且变化很明显; – HonestHeuristic

回答

0

哇这实际上很可耻,事实证明,我忘记编辑D3DXCreateEffectFromFile函数中的.fx文件的目录,所以我编辑的文件当然对应用程序没有影响。感谢大家的帮助。

0

着色器不重新编译的飞行,所以如果你修改shader代码,而你的程序正在运行,您需要再次调用D3DXCreateEffectFromFile来创建着色器的新编译实例。

+0

我不是那么新。在更改代码并运行新编译的可执行文件之前,我关闭了该程序。 – HonestHeuristic

+0

那么如果你删除了fx文件,重新编译并重新运行它仍然运行? – catflier

+0

也可能在Debug中检查ID3DXBuffer *错误中的内容。也在你的CPP代码mhTech = mFX-> GetTechniqueByName(“AmbientDiffuseSpecTech”);被评论但你仍然叫mFX-> SetTechnique(mhTech); 。并在您的着色器文件行83:float3 texColor = 0xfffffffftex2D(TexS,tex0).rgb;将确保着色器不编译 – catflier