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.

Foi útil?

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.

http://www.winehq.org/site/docs/winelib-guide/index

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top