【发布时间】: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