РЕДАКТИРАНЕ: Проблемът вече е решен, включвам подробностите тук, за да помогна на всеки друг, който се сблъска с това, тъй като не е толкова лесно за решаване.
По принцип се свежда до актуализиране с помощта на клона за разработка.
Първата стъпка е да проверите клона за разработка на моноигра, това няма да включва подмодула 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 в програмата за отстраняване на грешки и има правилни подробности за файла).
Пропуснал ли съм някъде стъпка при конвертирането на шейдър файла? Има ли нещо наистина очевидно, което не виждам?
Ако не, някой има ли представа защо би действал така или някакъв начин да получи по-подробна грешка от него, като действителна причина да не може да зареди актива?
РЕДАКТИРАНЕ: След като разгледах точката в разглобяването, където всъщност извежда грешката, изглежда, че намира файла, но не го разпознава като валиден тип ресурс - може ли това да е някакъв проблем с версия/съвместимост?