Можно ли разрабатывать приложения DirectX в Linux?
Вопрос
Скорее из интереса, чем что-либо еще, но можете ли вы скомпилировать приложение DirectX под Linux?
Очевидно, официального SDK не существует, но я думал, что это возможно с Wine.
Предположительно, в Wine есть реализация интерфейса DirectX для запуска игр?Можно ли связать это с этим?(редактировать:Это называется Winelib)
В противном случае, возможно, кросс-компилятор mingw с приложением, работающим под Wine.
Половина ответила на мой собственный вопрос здесь, но интересно, слышал ли кто-нибудь о чем-то подобном?
Решение
Мне повезло с этим.мне удалось скомпилировать этот простой пример Direct3D.
Для этого я использовал Winelib (пакет Wine-dev в Ubuntu).Благодаря Аластер за то, что указал мне на Winelib.
Я немного изменил исходный код, чтобы преобразовать символы wchars в символы (1 в строке 52, 2 в строке 55, удалив букву L перед строковыми литералами).Может быть, есть способ обойти это, но это заставило его работать.
Затем я скомпилировал исходный код следующим образом:
wineg++ -ld3d9 -ld3dx9 triangle.cpp
При этом создается двоичный файл a.out.exe.so, а также сценарий a.out для его запуска под Wine.
Другие советы
Если речь идет не о портировании, а о создании, вам действительно следует рассмотреть OpenGL, поскольку этот API столь же мощный, как DirectX, и его гораздо проще портировать на Mac или Linux.
Я не знаю ваших требований, поэтому лучше упомяните об этом.
Вы не можете ссылаться на Wine, поскольку это, по сути, перехватчик/переводчик вызовов, а не набор библиотек, к которым вы можете подключиться.Если Linux важен, используйте OpenGL/SDL/OpenAL.
Я верю (я никогда этого не пробовал), что вы можете скомпилировать двоичные файлы Linux с помощью Winelib.Таким образом, он работает так же, как исполняемый файл Linux, но с библиотеками Windows.
перейдите в каталог с исходником и введите:
winemaker --lower-uppercase -icomdlg32 -ishell32 -ishlwapi -iuser32 -igdi32 -iadvapi32 -ld3d9 .
make
wine yourexecutable.exe.so
Если вы получили эту ошибку:
main.c:95:5: error: ‘struct IDirect3D9’ has no member named ‘CreateDevice’
убедитесь, что вы назвали свой файл main.cpp, а не main.c.
В настоящее время нет способа скомпилировать код DirectX для непосредственного использования Linux.Вы создадите свое приложение, как обычно, а затем запустите его, используя уровень совместимости, такой как Wine/Cedega.
Вино это единственный способ запустить DirectX в Linux
вы можете скомпилировать приложения DirectX в Linux, но не запускать их сразу.если вы используете кросс-компилятор, который создает Windows exe и указывает на Windows SDK и DirectX SDK.