É possível desenvolver aplicativos DirectX em Linux?
Pergunta
Mais por interesse do que qualquer outra coisa, mas você pode compilar um aplicativo DirectX no Linux?
Obviamente não existe um SDK oficial, mas pensei que isso seria possível com o vinho.
Presumivelmente, o wine possui uma implementação da interface DirectX para rodar jogos?É possível vincular isso?(editar:Isso é chamado de winelib)
Se isso falhar, talvez um compilador cruzado mingw com o aplicativo rodando no wine.
Metade respondeu minha própria pergunta aqui, mas me perguntei se alguém já ouviu falar de algo assim sendo feito.
Solução
Eu tive alguma sorte com isso.Eu consegui compilar este exemplo simples do Direct3D.
Usei winelib para isso (pacote wine-dev no Ubuntu).Graças a Alastair por me indicar o winelib.
Modifiquei ligeiramente a fonte para converter os wchars em chars (1 na linha 52, 2 na linha 55, removendo o L antes dos literais da string).Pode haver uma maneira de contornar isso, mas isso o colocou em funcionamento.
Em seguida, compilei a fonte com o seguinte:
wineg++ -ld3d9 -ld3dx9 triangle.cpp
Isso gera um binário a.out.exe.so, bem como um script a.out para executá-lo no wine.
Outras dicas
Se não se trata de portar, mas de criar, você realmente deveria considerar OpenGL, pois esta API é tão poderosa quanto DirectX e muito mais fácil de portar para Mac ou Linux.
Não conheço seus requisitos, então é melhor mencioná-los.
Você não pode vincular o wine, pois é essencialmente um interditor/tradutor de chamadas, em vez de um conjunto de bibliotecas nas quais você pode se conectar.Se o Linux for importante, vá para OpenGL/SDL/OpenAL.
Eu acredito (nunca tentei isso) que você pode compilar binários do Linux contra o winelib.Portanto funciona como um executável do Linux, mas com as bibliotecas do Windows.
vá até o diretório com a fonte e digite:
winemaker --lower-uppercase -icomdlg32 -ishell32 -ishlwapi -iuser32 -igdi32 -iadvapi32 -ld3d9 .
make
wine yourexecutable.exe.so
Se você receber este erro:
main.c:95:5: error: ‘struct IDirect3D9’ has no member named ‘CreateDevice’
certifique-se de nomear seu arquivo como main.cpp e não como main.c.
Atualmente não há como compilar código DirectX para direcionar diretamente ao Linux.Você construiria seu aplicativo como faria normalmente e depois o executaria usando uma camada de compatibilidade como Wine/Cedega.
Vinho é a única maneira de executar DirectX no Linux
você pode compilar aplicativos DirectX no Linux, mas não iniciá-los imediatamente.se você usar um compilador cruzado que cria o Windows exe e aponta para o SDK do Windows e o SDK do DirectX.