C'è qualche motivo per preferire Direct3D a OpenGL?


11

Quindi stavo leggendo questo , ho avuto il motivo per cui ci sono molti più giochi su Microsoft Windows che su qualsiasi altro sistema operativo. Il problema principale presentato era che Direct3D è preferito su OpenGL.

Quello che non capisco è perché uno sviluppatore dovrebbe sacrificare la compatibilità? Questa è semplicemente una perdita finanziaria per l'azienda. Capisco che OpenGL è un po 'un casino, ma non dovrebbe essere un problema per gli esperti. Anche se lo è, penso che la gente farebbe un miglio in più rispetto a subire una perdita finanziaria.

Inoltre, se non sbaglio, molte applicazioni multipiattaforma utilizzano sia Direct3D che OpenGL. Penso che passino da un'API all'altra.

Questo è strano in quanto possono semplicemente usare OpenGL, perché anche preoccuparsi di Direct3D?

Quindi la domanda è: ci sono problemi tecnici con OpenGL o c'è qualche supporto che Direct3D fornisce a OpenGL?


Sono consapevole che questa domanda potrebbe essere chiusa come fuori tema o troppo ampia, ho fatto del mio meglio per restringerla.


Stai cercando qualcosa di diverso da questo ?
trichoplax,

2
A proposito, ho risposto a una domanda simile su GameDev.SE un paio di anni fa.
Nathan Reed,

1
ecco una buona lezione di storia che risponde alla tua domanda: programmers.stackexchange.com/questions/60544/…
darius

1
@NathanReed "Quindi, è possibile che vedremo un ritorno agli sviluppatori multipiattaforma che utilizzano OpenGL su Windows." E ora, 3 anni dopo, diresti che è successo?
Rotem,

2
@Rotem Non la penso così, no. OGL (e ora Vulkan) oggi è migliore nel mantenere la parità di funzionalità con D3D rispetto a prima, ma AFAICT, i produttori di GPU danno ancora la priorità ai driver D3D per correzioni di bug e miglioramenti perf, e la maggior parte dei giochi / motori usano ancora D3D di default su Windows. Una notevole eccezione sono i motori idTech , che utilizzano tutti OGL su Windows.
Nathan Reed,

Risposte:


9

Sul fatto che ci sono più giochi per Windows, alcuni motivi sono

  1. Windows ha la maggior parte del mercato e in passato sviluppare giochi multipiattaforma era più complicato di quanto lo sia oggi.
  2. DirectX offre strumenti migliori per lo sviluppo (ad es. Debug)
  3. Le grandi innovazioni vengono generalmente create / implementate dapprima in DirectX e quindi portate / implementate in OpenGL.
  4. Per quanto riguarda Windows vs Linux, devi considerare che quando esiste uno standard reale per motivi di marketing e storici (per questo vedi Perché gli sviluppatori di giochi preferiscono Windows? | Ingegneria del software , come ho detto nei commenti), ha la sua inerzia .

La cosa dell'inerzia è molto importante. Se il tuo team sviluppa per DirectX, puntando al 90% del mercato (beh ... se giochi su PC hai di fatto Windows, quindi ... il 99% del mercato?), Perché vorresti investire in OpenGL? Se sviluppi già in OpenGL, puntando di nuovo al 99% del mercato, ti atterrai il più a lungo possibile. Ad esempio Id Tech di Id Software è un eccellente motore di gioco (che alimenta la serie DOOM) che utilizza OpenGL.

A proposito dell'argomento della discussione, un commento.

Ad oggi, ci sono molte molte API e una pratica comune è quella di utilizzare un Game Engine che si basa su di esse. Ad esempio, consideralo

  • Sulla maggior parte delle piattaforme mobili devi usare OpenGl ES.
  • Su PC è possibile utilizzare sia DirectX che OpenGL
  • Penso che su XBOX devi usare DirectX.
  • Penso che su PS usi la propria API.
  • Con il vecchio hardware usi DirectX9 o OpenGL 3 o OpenGL ES 2.
  • Con hardware più recente puoi (e vuoi) usare DirectX 11, OpenGL 4, OpenGL ES 3.

Di recente, con l'avvento delle nuove API a basso costo - che rappresenta un importante punto di svolta per la programmazione grafica - ci sono DirectX 12 per Windows e XBOX, Metal per iOS e Vulkan (il nuovo OpenGL) per Windows e Linux (inclusi Android e Tizen ).

Ci sono ancora giochi che si rivolgono solo a Windows e XBOX, ma oggi IMHO può essere solo una scelta di marketing.


Quindi non ci sono motivi prestazionali per preferire Direct3D?
A --- B

@ritwik sinha DirectX 11 ha un supporto migliore per il rendering multi-threading rispetto a OpenGL 4, ma per quanto ne sappia, ciò non ha comportato differenze di prestazioni reali. Dall'altro lato, confrontando Windows con DirectX 11 e Linux con OpenGL 4, il vincitore è stato Linux con OpenGL. Per quanto riguarda DirectX 12 vs Vulkan, penso che sia troppo presto per saperlo, ma non lo so.
dario

non ho mai lavorato con Direct3D, quindi non capisco cosa intendi per multi threading. Per quanto ne so, i programmatori gestiscono thread diversi per compiti diversi. Direct3D fa questo sotto il cofano? Comunque bella risposta.
A --- B

1
@ritwik sinha un'applicazione di multi-threading alla grafica in tempo reale è che è possibile utilizzare thread diversi per allocare risorse in background (streaming di texture, buffer di vertici), mentre un thread principale esegue le chiamate di disegno. Questo è possibile anche in OpenGL, ma molto molto complicato. In DirectX 11 puoi anche effettuare chiamate di disegno, da molti thread, che dovrebbero migliorare le prestazioni, ma non è una pratica comune. Penso che lo faccia l'ultima versione di UnrealEngine4. Tuttavia, con DirectX 12 e Vulkan il rendering multi threading sarà un vero affare.
darius,

1

Un paio di possibili motivi:

  • Storicamente, la qualità del driver OpenGL è variata molto, ma non sono più sicuro che sia così.
  • Xbox supporta D3D, quindi è più facile trasferire un gioco tra esso e il PC.
  • Gli strumenti di debug per D3D sono stati migliori rispetto a OpenGL. Fortunatamente ora abbiamo RenderDoc
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.