linux上的一夫一妻游戏无法加载效果资产

本文关键字:加载 游戏 linux | 更新日期: 2023-09-27 18:18:15

编辑:这个问题现在已经解决了,我在这里包括细节来帮助其他遇到这个问题的人,因为它不是那么容易解决的。

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

第一步是签出一夫一妻制开发分支,这将不包括第三方/lib子模块,所以你还需要更新它,以便能够编译源代码。

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

这仍然不会加载效果文件,除非它们是使用最新版本的内容处理器创建的,所以你需要去一台windows电脑,签出开发分支(和库)-或者从你的linux系统复制它们-然后编译MonoGame.ContentPipeline/ContentProcessors/MonoGameContentProcessors.sln

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

一旦所有这些都完成了,您就可以按预期使用它了——从您的.fx文件构建.xnb文件并将它们添加到linux项目中。

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

=================================================原来的帖子:

我刚刚开始与一夫一妻制,我试图得到一个非常简单的应用程序(旋转立方体)在Windows和Linux上工作- Windows并没有被证明是一个问题,但我有麻烦让我的。fx文件在Linux上工作。

我已经建立了一个"一夫一妻内容项目",将。fx文件添加到其中,选择"一夫一妻效果"处理器,将构建配置设置为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文件到content文件夹并加载:

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

这工作得很好(在调试器中检查了Texture2D的属性,它有正确的文件细节)。

在转换着色器文件时,我是否错过了一个步骤?是不是有什么很明显的事我没看到?

如果没有,有没有人有任何线索,为什么它会这样做,或者某种方式得到一个更详细的错误,像一个实际的原因,它不能加载资产?

编辑:在反汇编中它实际上抛出错误,似乎它找到了文件,但不承认它是任何有效的资源类型-这可能是某种版本/兼容性问题吗?

linux上的一夫一妻游戏无法加载效果资产

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

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

我从来没能真正做到这一点。从我在网上的阅读来看,一夫一妻制框架的这一部分还没有完全准备好。

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

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