4

编辑:这个问题现在已经解决了,我在这里包括细节来帮助遇到这个问题的任何人,因为解决起来并不简单。

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

第一步是检查monogame开发分支,这将不包括thirdparty/libs子模块,因此您还需要更新它以便能够编译源代码。

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

这仍然不会加载效果文件,除非它们是使用最新版本的内容处理器创建的,因此您需要转到 Windows 计算机,检查开发分支(和库) - 或从您的 linux 复制它们system - 然后编译 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复制到“内容”文件夹(根目录已相应设置)并使用以下代码加载效果(与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 的属性,并且它具有正确的文件详细信息)。

转换着色器文件时我是否错过了某个步骤?有什么我没有看到的非常明显的东西吗?

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

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

4

1 回答 1

2

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

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

我自己从来没有真正做到这一点。从我的在线阅读来看,Monogame 框架的这个特定部分还没有为黄金时段做好准备。

这是有关它的一些信息。他们真的没有提供太多这方面的信息,因为我怀疑他们知道这是非常有问题的:

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

于 2013-06-13T12:39:52.437 回答