目前,我正在为 Windows 8 商店、Windows 8 桌面和 Windows 7 开发应用程序。该应用程序应该在平板电脑和“普通”Windows 7/8 设备上顺利运行。所以,我从工作中得到了一台平板电脑并在上面安装了 Windows 8,只是为了意识到令人毛骨悚然的英特尔图形媒体加速器 (600) 只支持 DirectX 9.0c。
所以,我现在尝试了几个小时让我的 DirectX10/11 效果/着色器在 DirectX9 上运行,但似乎没有任何效果。使用 NVidia 的 FxComposer 进行的测试显示,DirectX9 效果运行良好。
我正在使用 SharpDX / C# 进行编程,并且技术 10 和技术 11 都是有效的(MyTechnique.IsValid == true)。要加载效果,我使用这些代码行:
var EffectByteCode = ShaderBytecode.CompileFromFile("DirectX/Shaders/"+FxFile, "fx_5_0", ShaderFlags.None, EffectFlags.None);
var Effect = new Effect(GraphicsProvider.Device, EffectByteCode, EffectFlags.None);
mEffect = FxEffect;
mTechnique11 = mEffect.GetTechniqueByName("main_11"); //works
mTechnique10 = mEffect.GetTechniqueByName("main_10"); //works
mTechnique9 = mEffect.GetTechniqueByName("main_9"); //doesn't work
我在这里粘贴了效果源代码:http: //pastebin.com/KPxBN1DD ..排除了“main_11”和“main_10”,在我的测试中,我将它们注释掉了,所以我只是删除了那些评论块..我认为dx9应该理解这个非常简单的代码..
所以我的最后一个问题是: - 参数“fx_5_0”对于加载技术、技术 10 和技术 11 是否有效?- 我的着色器代码正确吗?还是我做错了什么?- 我是否必须指定任何其他/附加信息/功能/参数来加载 DX9 技术?- 也许它是SharpDX的一个错误?我现在想看看这个代码..
编辑:试图使问题更清楚一点..