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.