我正在为游戏制作.NET 3D库。 D3D9,D3D10,OpenGL和DSP之间的跨平台工具XNA将在Windows,XBOX,Phone7,MacOSX& Linux(也许是iPhone和Android)。
所以我的问题是......,我希望能够像在XNA 3.1中一样在XNA 4.0中编译效果文件... 微软用于取消此功能的借口并不合法,因为它会杀死XNA用于为您的游戏制作工具(如效果编辑器)。
如果有人知道为此而努力解决这个问题。可以发布一些代码或指向我正确的方向将是很好的tnx。
答案 0 :(得分:5)
此功能已被用于保持Xbox和Windows游戏之间的一致性。 Xbox无法在运行时编译着色器,但在XNA 3.1中,Effect.CompileFromX方法包含在Xbox和Windows共有的运行时中。
作为Shawn Hargreaves explained in his blog,仍然有几种方法可以在运行时编译效果内容(或任何其他类型的内容),但仅限于Windows游戏。
我个人发现Shawn的第四种方法是易于实现和健壮;您可以在运行时导入任何类型的内容,而不必为设置任何MSBuild项目而烦恼。
修改强> 我注意到这篇文章的答案中列出的所有方法(截至2011年1月23日14:50-7UTC)都需要引用一些XNA内容管道库,这意味着用户可能必须安装XNA才能能够使用你的产品...
答案 1 :(得分:4)
我还在App Hub上发布了这个问题。 http://forums.create.msdn.com/forums/p/70737/431600.aspx#431600
这个问题的答案是使用命令行实用程序(CompileEffect),该实用程序使用内容管道将.fx源文件编译为可以直接传递给XNA Framework Effect类构造函数的二进制blob。
这是为任何人寻找回答此问题的链接 http://create.msdn.com/en-US/education/catalog/sample/stock_effects
编辑(更好的链接):要编译着色器,您需要查看FX编译器的文档。 链接:https://msdn.microsoft.com/en-us/library/windows/desktop/bb232919(v=vs.85).aspx
LINK2:https://msdn.microsoft.com/en-us/library/windows/desktop/bb509710(v=vs.85).aspx