2012-06-20 23 views
11

Considerando l'implementazione lato driver per API DirectX su sistemi Windows per schede video moderne, mi chiedevo perché questa implementazione non sia disponibile su sistemi non Windows, in particolare linux.Perché non ci sono API DirectX per Linux?

Poiché c'è un'evidente assenza di questa funzionalità, posso solo supporre che ci sia una buona ragione per cui sono cieco, ma nella mia comprensione primitiva vedo semplicemente le chiamate DirectX come nient'altro che i punti di ingresso della funzione sul dispositivo hardware . E per la cronaca non mi riferisco a un livello di compatibilità (in particolare WINE, un progetto che mi stupisce ogni singolo giorno) ma una libreria che effettua chiamate dirette all'hardware.

È possibile creare una versione open source di directx? Sarebbe possibile ma oscenamente difficile?

+0

Non c'è "assenza di questa funzionalità". Linux fornisce altre API grafiche non proprietarie non Microsoft. –

+8

@ BenVoigt Hai completamente perso il punto della domanda. Non sta chiedendo informazioni sulla funzionalità di rendering di grafica 3D accelerata, che Linux ha, ma sulla funzionalità di DirectX, che non è così. –

risposta

13

AFAIK, DirectX contiene 3 parti

  • conducente fornitore (fornire a basso API livello definito dal DX)
  • libreria DirectX (utilizzare partire API livello definito dal DX per accedere hardware, fornire DirectX API)
  • Software (uso DirectX API, es. gioco)

non ci sono alcun driver che fornisce l'API di basso livello definito da DX su Linux, quindi anche se è possibile fornire la libreria DirectX, ma non funzionerà senza il driver del fornitore appropriato e non riesco a vedere se c'è un fornitore che ne creerà uno per la propria piattaforma hardware.

5

Perché non usare solo OpenGL? Supporta tutte le funzionalità di DirectX. Hai una ragione specifica per usare DirectX? Per quanto riguarda un motivo, Microsoft made DirectX e immagino che non abbiano visto alcuna necessità di consentirne l'esecuzione su Linux.

È possibile eseguire DirectX games in Linux using Wine. È possibile programmare XNA su Linux utilizzando MonoGame. Ma tutti usano OpenGL per fornire il rendering con accelerazione hardware. AFAIK, OpenGL è stata (e probabilmente sarà) l'unica opzione su Linux per il prossimo futuro.

È possibile scrivere la propria implementazione DirectX? Certo, ma comporta la scrittura di driver, conoscenza proprietaria e probabilmente un costo troppo alto per chiunque possa trarne davvero beneficio.

+6

La domanda viene dal punto di vista dell'usabilità, non tanto di uno sviluppo. Se l'industria dei giochi utilizza DirectX, vorrei sapere quali ostacoli ci sono per il settore dei giochi per trasferire i giochi esistenti su Linux. Utilizzando lo stesso identico hardware, posso eseguire un gioco in modo nativo in un sistema operativo, ma non nell'altro, quindi nella mia ingenuità mi piacerebbe immaginare che sia semplice come scrivere il livello API e poi passare tutto ai driver. Ovviamente questo non esiste quindi la mia comprensione è sbagliata, voglio solo qualche chiarimento. – Brian

1

Il lavoro per creare una porta per DirectX creerebbe gli stessi problemi incontrati in WINE. Non sarà mai lo stesso come su Windows. Derivato da questo principio dovresti esaminare OpenGL e le relative librerie multi-piattaforma.

In questo momento WINE sarebbe il mezzo più vicino se si vuole realizzare qualcosa con il codice DirectX che hai già. Quindi, ancora una volta, non sono sicuro in che modo Visual Studio o la semplice digitazione ti avvicinerebbero a un ambiente fluido. Le librerie WINE non sono così lontane da quelle native, ma esiste sempre un'emulazione, ciò che è accettabile a un certo punto nella mia onesta opinione.

Se guardo come superbamente Final Fantasy XIV ha funzionato su impostazioni complete sul mio iMac (2011), penso che non sia poi così male basarsi sull'implementazione di WINE. Il gioco è stato reso esattamente come su Bootcamp (Windows) sul mio iMac.

Se vuoi davvero lavorare su questo fronte, puoi provare a chiedere a WINE Devs sul loro forum o mailing list come potresti usare l'implementazione della loro compatibilità DirectX e utilizzarla nel tuo progetto. Dove puoi forse chiamare le librerie invece di richiedere DirectX tramite le chiamate di sistema emulate da Windows.

Modifica: Sono pienamente d'accordo anche con la risposta di user956030.

1

DirectX è un vestito di API:

  • Direct3D (disegno grafica 3D)
  • DirectX grafiche Infrastrutture (enumerare gli adattatori e monitor e la gestione delle catene di swap)
  • Direct2D (disegno di grafica 2D)
  • DirectWrite (caratteri)
  • DirectCompute (GPU Computing)
  • DirectSound3D (riproduzione di suoni 3D)
  • DirectX Media (DirectAnimation per l'animazione web 2D/3D, DirectShow per la riproduzione multimediale e streaming media, DirectX Transform per il web interattività e Modalità di mantenimento Direct3D per grafica 3D di livello superiore)
  • DirectX Diagnostics (strumento per la diagnosi e la generazione di rapporti su componenti correlati a DirectX, come driver audio, video e di input)
  • DirectX Media Objects (il supporto per lo streaming di oggetti come encoder, decoder, ed effetti)
  • DirectSetup (installazione dei componenti DirectX, e il rilevamento della versione DirectX corrente)

DirectX componenti obsoleti, ma ancora supportati

  • DirectDraw
  • DirectInput
  • DirectPlay
  • DirectSound
  • DirectMusic

Come si può vedere molte parti della tuta DirectX di API avrebbe bisogno di essere riscritto con la funzionalità per i driver scritto per Linux. È probabile che alcune parti della tuta DirectX inviino chiamate al sistema operativo Windows e tale codice dovrebbe essere riscritto per una macchina Linux senza violare le parti scritte in copia di DirectX o del sistema operativo Windows.

Sì, si potrebbe scrivere un seme API open source che fa lo stesso genere di cose di DirectX per Linux, tuttavia senza una grande conoscenza di driver e supporto audio/grafico dai loro produttori per Linux, sarebbe un compito molto difficile fare.

Tuttavia, se la domanda era più di un "Posso ottenere/scrivere qualcosa per essere in grado di eseguire giochi e programmi creati con DirectX per l'esecuzione su Linux?" nel suo significato, in breve non a causa di una maggiore violazione del copyright.

-1

DirectX è un prodotto di correttezza progettati per gli obiettivi di Microsoft, quindi per questo accada sarebbe molto insolito

Ci sono altri due pezzi di software che vengono in mente, SDL e OpenGL

OpenGL fornisce l'hardware alternativa a DirectX e SDL funziona con OpenGL per fornire il supporto software che ci si aspetta da DirectX