【问题标题】:MonoGame on linux failing to load effect assetslinux上的MonoGame无法加载效果资产
【发布时间】:2013-06-13 23:57:00
【问题描述】:

编辑:问题现已解决,我在此处包含详细信息以帮助遇到此问题的任何其他人,因为解决起来并不简单。

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

第一步是检查monogame开发分支,这不包括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 的属性,并且它具有正确的文件详细信息)。

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

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

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

【问题讨论】:

  • 通常不需要为内容添加文件扩展名,但如果添加 .png 对图像文件有帮助,也许在效果文件中添加 .fx 可以解决问题...
  • .png 使用或不使用扩展名都可以正常工作,如果我将效果指定为 .fx,它只会出现与以前相同的错误,如果我指定为 .xnb,它会显示“找不到匹配的内容类型的阅读器”。
  • 我希望 MS 不会解雇 XNA.. 一切都变得简单多了。考虑用 VS2013 刷新回到 XNA..msxna.codeplex.com/releases/view/117230

标签: c# linux xna mono monogame


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 显然我什至无法编译源代码.. 似乎有一些 openTK 问题。
  • 一些改进 - 编译了linux的monogame框架,现在错误是“错误的MGFX文件版本”,假设这意味着我需要编译最新的monogame.contentpipeline并在使用的VS2010项目中使用它创建 .xnb 文件
  • 对于任何有类似编译问题的人,您需要从存储库中签出第三方/libs 子模块以获取正确的 openTK dll。
  • 现在可以了,感谢您提供的信息 - 我将修改我的原始帖子,详细说明我所做的事情。
  • @GeorgeQuinn 很高兴你成功了。感谢您提供有关您如何完成此操作的详细信息。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-15
  • 2023-03-13
  • 1970-01-01
  • 2021-09-19
  • 2020-06-19
  • 1970-01-01
  • 2020-04-28
相关资源
最近更新 更多