Linux上的MonoGame无法加载效果资产

时间:2013-06-12 13:38:35

标签: c# linux xna mono monogame

编辑:问题现在已经解决了,我在这里详细介绍了其他任何遇到此问题的人,因为解决这个问题并不是那么简单。

基本上,它归结为使用develop分支进行更新。

第一步是签出monogame develop分支,这将不包括thirdparty / libs子模块,因此你需要更新它以便能够编译源代码。

在此之后,您可以编译MonoGame.Framework.Linux.sln,并更新项目中的引用以指向新的dll文件。

这仍然不会加载效果文件,除非它们是使用最新版本的内容处理器创建的,因此您需要转到Windows计算机,检查开发分支(和库) - 或复制它们从您的Linux系统 - 然后编译MonoGame.ContentPipeline / ContentProcessors / MonoGameContentProcessors.sln

您需要更新内容项目中对MonoGameContentProcessors.dll的引用,还需要将MonoGame.ContentPipeline \ ContentProcessors \ bin \ Release \ libmojoshader_32.dll文件重命名为libmojoshader.dll。

完成所有这些后,您最终可以按预期使用它 - 从.fx文件构建.xnb文件并将它们添加到Linux项目中。

希望这些信息对某人有用。

=============================================== == 原帖:

我刚刚开始使用MonoGame,并且我试图让一个非常简单的应用程序(旋转立方体)在Windows和Linux上工作 - Windows并不是一个问题,但是我无法获取我的.fx文件在Linux上工作。

我已经设置了一个“MonoGame内容项目”,将.fx文件添加到其中,选择了“MonoGame Effect”处理器,将构建配置设置为Linux - 这一切似乎都有效,我得到一个.xnb文件输出目录。

当我设置Linux项目时,我将.xnb复制到“Content”文件夹(相应地设置了根目录)并使用以下代码加载效果(与Windows上的代码相同):

CubeEffect = Content.Load<Effect>("Effect1");
CubeEffect.CurrentTechnique = CubeEffect.Techniques["Technique1"];

这会导致应用程序因此错误而崩溃:

Microsoft.Xna.Framework.Content.ContentLoadException: Could not load Effect1 asset!

最初我认为这是文件名,目录名或某些不正确设置的问题。但是,我尝试将.png文件添加到内容文件夹并加载:

Texture2D Tex = Content.Load<Texture2D>("bg.png");

这非常有效(在调试器中检查了Texture2D的属性,并且它具有正确的文件详细信息)。

转换着色器文件时,我错过了某个步骤吗?我有没有看到一些非常明显的事情?

如果没有,有没有人知道为什么会这样做,或者某种方式从中得到更详细的错误,比如它无法加载资产的实际原因?

编辑:看了它实际抛出错误的反汇编中的点,它似乎找到了文件,但没有将其识别为任何有效的资源类型 - 这可能是某种版本/兼容性问题?

1 个答案:

答案 0 :(得分:2)

尝试将着色器加载到Monogame时,这是一个非常常见的问题。 我尝试过,无法将自定义着色器加载到Monogame框架中。

您需要从develop3d分支编译,而不是正式版本。您还需要将HLSL着色器转换为MojoShader兼容语法。然后,您需要从Monogame Content导入器加载效果(需要手动配置),或者将着色器添加为嵌入式资源并将其加载到项目中以便使用它。

我自己从来没有能够实现这一目标。从我的在线阅读材料来看,Monogame框架的这一特定部分还没有为黄金时段做好准备。

以下是有关它的一些信息。他们确实没有提供太多关于此的信息,因为我怀疑他们知道这是非常有问题的:

https://github.com/mono/MonoGame/wiki/Effects-And-Shaders