MonoGame на linux не успява да зареди активи с ефект

РЕДАКТИРАНЕ: Проблемът вече е решен, включвам подробностите тук, за да помогна на всеки друг, който се сблъска с това, тъй като не е толкова лесно за решаване.

По принцип се свежда до актуализиране с помощта на клона за разработка.

Първата стъпка е да проверите клона за разработка на моноигра, това няма да включва подмодула 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.

След като всичко това е направено, най-накрая можете да го използвате по предназначение - създайте .xnb файловете от вашите .fx файлове и ги добавете към 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 в програмата за отстраняване на грешки и има правилни подробности за файла).

Пропуснал ли съм някъде стъпка при конвертирането на шейдър файла? Има ли нещо наистина очевидно, което не виждам?

Ако не, някой има ли представа защо би действал така или някакъв начин да получи по-подробна грешка от него, като действителна причина да не може да зареди актива?

РЕДАКТИРАНЕ: След като разгледах точката в разглобяването, където всъщност извежда грешката, изглежда, че намира файла, но не го разпознава като валиден тип ресурс - може ли това да е някакъв проблем с версия/съвместимост?


person George Quinn    schedule 12.06.2013    source източник
comment
Обикновено не е необходимо да добавяте файловото разширение за съдържание, но ако добавянето на .png е помогнало за файла с изображение, може би добавянето на .fx към файла с ефекта ще разреши проблема...   -  person gareththegeek    schedule 12.06.2013
comment
.png работи добре със или без разширението, ако посоча ефекта като .fx, той просто има същата грешка като преди, ако посоча като .xnb, вместо това пише Не може да се намери съвпадащ четец на съдържание от тип.   -  person George Quinn    schedule 12.06.2013
comment
Иска ми се MS да не беше уволнила XNA.. всичко беше много по-просто. Мисля да се върна към XNA с опресняването на VS2013.. msxna.codeplex.com/releases/view/ 117230   -  person JensB    schedule 31.08.2014


Отговори (1)


Това е много често срещан проблем, когато се опитвате да заредите шейдъри в Monogame. Опитах и ​​не успях да заредя персонализирания си шейдър в рамката на Monogame.

Трябва да компилирате от клона на develop3d, а не от официалното издание. Трябва също така да конвертирате вашия HLSL шейдър в синтаксис, съвместим с MojoShader. След това трябва или да заредите ефекта от инструмента за импортиране на съдържание на Monogame (който трябва да бъде конфигуриран ръчно), или да добавите своя шейдър като вграден ресурс и да го заредите във вашия проект, за да го използвате.

Никога не съм успявал да се справя с това сам. От моите четения онлайн, тази конкретна част от рамката на Monogame все още не е напълно готова за праймтайм.

Ето малко информация за него. Те наистина не предоставиха много информация за това, тъй като подозирам, че знаят, че е много проблематично:

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

person jgallant    schedule 13.06.2013
comment
очевидно дори не мога да стигна до компилирането на източниците.. изглежда има някои проблеми с openTK. - person George Quinn; 13.06.2013
comment
известно подобрение - компилирах моногейм рамката за linux, сега грешката е грешна версия на MGFX файл, ако приемем, че това означава, че трябва да компилирам най-новия monogame.contentpipeline и да го използвам в проекта VS2010, използван за създаване на .xnb файлове - person George Quinn; 13.06.2013
comment
за всеки с подобен проблем с компилирането между другото, трябва да проверите подмодула thirdparty/libs от хранилището, за да получите правилния openTK dll. - person George Quinn; 13.06.2013
comment
Вече работи, благодаря ви за информацията - ще променя оригиналния си пост с подробности за това, което направих. - person George Quinn; 13.06.2013
comment
@GeorgeQuinn Радвам се, че работиш. Благодаря за предоставянето на подробности за това как постигнахте това. - person jgallant; 13.06.2013