Perché gli sviluppatori di giochi preferiscono Windows?


396

DirectX è più semplice o migliore di OpenGL, anche se OpenGL è multipiattaforma? Perché non vediamo giochi davvero potenti per Linux come ce ne sono per Windows?


55
Falsa premessa: dov'è la prova che gli sviluppatori di giochi preferiscono Windows? Penso che @ user17674 lo abbia fatto in modo più preciso: vogliono svilupparsi per le piattaforme in modo da poter vendere di più e fare più soldi :-)
Rory Alsop

258
Gli sviluppatori di virus preferiscono anche Windows. Riguarda la base di utenti.
CesarGon,

4
Perché i programmatori di Windows preferiscano DirectX su OpenGL è probabilmente una domanda più interessante storicamente. Come potrebbe indicare il link all'intervista di Carmack qui sotto, DX era un tempo detestato. Sarebbe interessante sapere come ha mantenuto un numero sufficiente di utenti affinché MS potesse supportarlo fino a quando Xbox e le riscritture moderne lo hanno reso più popolare. O forse è stato sempre abbastanza buono, quindi la gente è rimasta bloccata.
CodexArcanum,

100
Perché le persone rapinano le banche? Perché è lì che si trova il denaro .
GrandmasterB,

7
@CesarGon: non è solo per la base di utenti, ma anche per la facilità di sviluppo.
Giorgio,

Risposte:


1154

Molte delle risposte qui sono davvero molto buone. Ma il problema OpenGL e Direct3D (D3D) dovrebbe probabilmente essere affrontato. E questo richiede ... una lezione di storia.

E prima di iniziare, so molto di più su OpenGL di quanto non faccia Direct3D . Non ho mai scritto una riga di codice D3D in vita mia e ho scritto tutorial su OpenGL. Quindi quello che sto per dire non è una questione di parzialità. È semplicemente una questione di storia.

Nascita del conflitto

Un giorno, nei primi anni '90, Microsoft si guardò attorno. Hanno visto che SNES e Sega Genesis erano fantastici, con molti giochi d'azione e simili. E hanno visto DOS . Gli sviluppatori hanno codificato i giochi DOS come i giochi per console: diretti al metal. A differenza delle console, tuttavia, in cui uno sviluppatore che ha realizzato un gioco SNES sapeva quale hardware avrebbe avuto l'utente, gli sviluppatori DOS hanno dovuto scrivere per più configurazioni possibili. E questo è piuttosto più difficile di quanto sembri.

E Microsoft ha avuto un problema più grande: Windows. Vedi, Windows voleva possedere l'hardware, diversamente dal DOS che praticamente lasciava che gli sviluppatori facessero qualunque cosa. Possedere l'hardware è necessario per avere una cooperazione tra le applicazioni. La cooperazione è esattamente ciò che gli sviluppatori di giochi odiano perché occupa preziose risorse hardware che potrebbero usare per essere fantastici.

Al fine di promuovere lo sviluppo di giochi su Windows, Microsoft aveva bisogno di un'API uniforme di basso livello, eseguita su Windows senza essere rallentata da essa e, soprattutto, cross-hardware . Un'unica API per tutta la grafica, l'audio e l'hardware di input.

Così è nato DirectX .

Gli acceleratori 3D sono nati pochi mesi dopo. E Microsoft ha avuto un problema. Vedi, DirectDraw, il componente grafico di DirectX, si occupava solo della grafica 2D: allocare memoria grafica e fare bit-bit tra le diverse sezioni di memoria allocate.

Quindi Microsoft acquistò un po 'di middleware e lo trasformò in Direct3D versione 3. Fu universalmente smentito. E con una buona ragione; guardare il codice D3D v3 è come guardare nell'Arca dell'Alleanza.

Il vecchio John Carmack di Id Software ha dato un'occhiata a quella spazzatura e ha detto: "Fanculo!" e ho deciso di scrivere verso un'altra API: OpenGL.

Vedi, un'altra parte della bestia dalle molte teste che è Microsoft era stata impegnata a lavorare con SGI su un'implementazione OpenGL per Windows. L'idea qui era di corteggiare gli sviluppatori delle tipiche applicazioni GL: app per workstation. Strumenti CAD, modellazione, questo genere di cose. I giochi erano la cosa più lontana nella loro mente. Questa era principalmente una cosa di Windows NT, ma Microsoft ha deciso di aggiungerla anche a Win95.

Per attirare gli sviluppatori di workstation su Windows, Microsoft ha deciso di provare a corromperli con l'accesso a queste nuove schede grafiche 3D. Microsoft ha implementato il protocollo Installable Client Driver: un produttore di schede grafiche potrebbe sovrascrivere l'implementazione OpenGL del software Microsoft con una basata su hardware. Il codice potrebbe automaticamente utilizzare un'implementazione OpenGL hardware se disponibile.

All'inizio, tuttavia, i videocards di livello consumer non avevano il supporto per OpenGL. Ciò non ha impedito a Carmack di eseguire il porting di Quake su OpenGL (GLQuake) sulla sua workstation SGI. Come possiamo leggere dal readme di GLQuake:

Teoricamente, glquake verrà eseguito su qualsiasi OpenGL conforme che supporti le estensioni degli oggetti texture, ma a meno che non sia un hardware molto potente che accelera tutto il necessario, il gioco non sarà accettabile. Se deve attraversare percorsi di emulazione software, le prestazioni saranno probabilmente ben al di sotto di un frame al secondo.

In questo momento (marzo '97), l'unico hardware Opengl standard in grado di giocare ragionevolmente in glquake è un realismo intergrafico, che è una carta MOLTO costosa. 3dlabs ha migliorato significativamente le sue prestazioni, ma con i driver disponibili non è ancora abbastanza buono per giocare. Alcuni dei driver 3dlabs attuali per le schede glint e permedia possono anche arrestare in modo anomalo NT quando si esce da una corsa a schermo intero, quindi non consiglio di eseguire glquake sull'hardware 3dlabs.

3dfx ha fornito un opengl32.dll che implementa tutto il necessario per glquake, ma non è un'implementazione completa. È improbabile che altre applicazioni opengl funzionino con esso, quindi consideralo fondamentalmente un "driver glquake".

Questa è stata la nascita dei driver miniGL. Questi alla fine si sono evoluti in implementazioni OpenGL complete, poiché l'hardware è diventato abbastanza potente da implementare la maggior parte delle funzionalità OpenGL nell'hardware. nVidia è stata la prima a offrire un'implementazione OpenGL completa. Molti altri produttori hanno avuto difficoltà, motivo per cui gli sviluppatori hanno preferito Direct3D: erano compatibili su una gamma più ampia di hardware. Alla fine rimasero solo nVidia e ATI (ora AMD) ed entrambi avevano una buona implementazione OpenGL.

Ascendente OpenGL

Quindi è impostato il palcoscenico: Direct3D vs. OpenGL. È davvero una storia fantastica, considerando quanto D3D v3 fosse brutta.

OpenGL Architectural Review Board (ARB) è l'organizzazione responsabile della manutenzione di OpenGL. Rilasciano un numero di estensioni, gestiscono il repository delle estensioni e creano nuove versioni dell'API. L'ARB è un comitato composto da molti attori dell'industria grafica e da alcuni produttori di sistemi operativi. Apple e Microsoft sono state varie volte membri dell'ARB.

3Dfx esce con Voodoo2. Questo è il primo hardware in grado di eseguire il multitexturing, cosa che OpenGL non poteva fare prima. Mentre 3Dfx era fortemente contrario a OpenGL, NVIDIA, i produttori del prossimo chip grafico multitexturing (il TNT1), lo adorava. Quindi l'ARB ha rilasciato un'estensione: GL_ARB_multitexture, che consentirebbe l'accesso al multitexturing.

Nel frattempo, esce Direct3D v5. Ora, D3D è diventato una vera e propria API , piuttosto che qualcosa che un gatto potrebbe vomitare. Il problema? Nessun multitexturing.

Ops.

Ora, quello non farebbe male quasi quanto avrebbe dovuto, perché le persone non usavano molto il multitexturing. Non direttamente Il multitexturing ha danneggiato un po 'le prestazioni, e in molti casi non ne è valsa la pena rispetto al multi-passaggio. E, naturalmente, gli sviluppatori di giochi adorano assicurarsi che i loro giochi funzionino su hardware più vecchio, che non aveva il multitexturing, quindi molti giochi sono stati venduti senza di essa.

D3D è stato quindi dato un recupero.

Il tempo passa e NVIDIA implementa la GeForce 256 (non la GeForce GT-250; la prima GeForce), praticamente terminando la competizione nelle schede grafiche per i prossimi due anni. Il principale punto di forza è la capacità di trasformare i vertici e l'illuminazione (T&L) nell'hardware. Non solo, NVIDIA ha adorato OpenGL così tanto che il suo motore T&L era effettivamente OpenGL. Quasi letteralmente; a quanto ho capito, alcuni dei loro registri hanno effettivamente preso direttamente gli enumeratori OpenGL come valori.

Direct3D v6 esce. Finalmente il multitexture ma ... nessun T&L hardware. OpenGL aveva sempre avuto una pipeline T&L, anche se prima del 256 era implementata nel software. Quindi è stato molto facile per NVIDIA convertire semplicemente l'implementazione del software in una soluzione hardware. Non sarebbe fino a quando D3D v7 fino a quando D3D non avesse finalmente il supporto T&L hardware.

Dawn of Shaders, Twilight of OpenGL

Quindi, GeForce 3 è uscito. E sono successe molte cose contemporaneamente.

Microsoft aveva deciso che non sarebbero tornati in ritardo. Quindi, invece di guardare a ciò che NVIDIA stava facendo e poi copiarlo dopo il fatto, hanno preso la posizione sorprendente di andare da loro e parlare con loro. E poi si sono innamorati e hanno avuto una piccola console insieme.

Un divorzio disordinato è seguito in seguito. Ma questo è per un'altra volta.

Ciò che ciò significava per il PC era che GeForce 3 usciva contemporaneamente a D3D v8. E non è difficile capire come GeForce 3 abbia influenzato gli shader di D3D 8. I pixel shader di Shader Model 1.0 erano estremamente specifici per l'hardware di NVIDIA. Non è stato fatto alcun tentativo di astrarre l'hardware di NVIDIA; SM 1.0 era esattamente ciò che faceva GeForce 3.

Quando ATI ha iniziato a lanciarsi nella corsa della scheda grafica ad alte prestazioni con la Radeon 8500, si è verificato un problema. La pipeline di elaborazione dei pixel dell'8500 era più potente di quella di NVIDIA. Quindi Microsoft ha rilasciato Shader Model 1.1, che in pratica era "Qualunque cosa faccia l'8500".

Potrebbe sembrare un fallimento da parte di D3D. Ma il fallimento e il successo sono una questione di gradi. E l' epico fallimento stava accadendo nella terra di OpenGL.

NVIDIA adorava OpenGL, quindi quando GeForce 3 arrivò, rilasciò una serie di estensioni OpenGL. Estensioni OpenGL proprietarie : solo NVIDIA. Naturalmente, quando l'8500 si presentò, non poteva usarne nessuno.

Vedi, almeno nella terra D3D 8, potresti eseguire i tuoi shader SM 1.0 su hardware ATI. Certo, dovevi scrivere nuovi shader per sfruttare la freddezza dell'8500, ma almeno il tuo codice funzionava .

Per avere shader di qualsiasi tipo su Radeon 8500 in OpenGL, ATI ha dovuto scrivere una serie di estensioni OpenGL. Estensioni OpenGL proprietarie : solo ATI. Quindi avevi bisogno di un codepath NVIDIA e di un codepath ATI, solo per avere degli shader .

Ora, potresti chiedere: "Dov'era l'ARB OpenGL, di chi era il compito di mantenere aggiornato OpenGL?" Dove spesso finiscono molti comitati: essere stupidi.

Vedi, ho menzionato sopra ARB_multitexture perché influenza profondamente tutto ciò. L'ARB sembrava (dal punto di vista di un estraneo) voler evitare del tutto l'idea degli shader. Hanno pensato che se avessero schiaffeggiato abbastanza configurabilità sulla pipeline a funzione fissa, avrebbero potuto eguagliare la capacità di una pipeline shader.

Quindi l'ARB ha rilasciato l'estensione dopo l'estensione. Ogni estensione con le parole "texture_env" era ancora un altro tentativo di correggere questo invecchiamento. Controlla il registro: tra le estensioni ARB ed EXT, ne sono state realizzate otto . Molti sono stati promossi a versioni core OpenGL.

Microsoft faceva parte dell'ARB in quel momento; se ne andarono nel periodo in cui D3D 9 colpì. Quindi è del tutto possibile che stessero lavorando per sabotare OpenGL in qualche modo. Personalmente dubito di questa teoria per due motivi. Uno, avrebbero dovuto ottenere aiuto dagli altri membri dell'ARB per farlo, dato che ogni membro ottiene un solo voto. E, soprattutto, due, l'ARB non aveva bisogno dell'aiuto di Microsoft per rovinare tutto. Vedremo ulteriori prove di ciò.

Alla fine l'ARB, probabilmente minacciato sia da ATI che da NVIDIA (entrambi i membri attivi) alla fine ha tirato fuori la testa abbastanza a lungo da fornire veri e propri shader in stile assembly.

Vuoi qualcosa di ancora più stupido?

T&L hardware. Qualcosa che OpenGL aveva prima . Bene, è interessante Per ottenere le massime prestazioni possibili dai T&L hardware, è necessario archiviare i dati dei vertici sulla GPU. Dopotutto, è la GPU che vuole effettivamente utilizzare i dati del vertice.

In D3D v7, Microsoft ha introdotto il concetto di buffer di vertici. Questi sono allocati segmenti di memoria GPU per l'archiviazione dei dati dei vertici.

Vuoi sapere quando OpenGL ne ha ottenuto l'equivalente? Oh, NVIDIA, amante di tutte le cose OpenGL (purché siano estensioni NVIDIA proprietarie), ha rilasciato l'estensione della gamma di array di vertici al primo colpo di GeForce 256. Ma quando l'ARB ha deciso di fornire funzionalità simili?

Due anni dopo . Questo dopo che hanno approvato shader di vertici e frammenti (pixel in linguaggio D3D). Questo è il tempo impiegato dall'ARB per sviluppare una soluzione multipiattaforma per l'archiviazione dei dati dei vertici nella memoria della GPU. Ancora una volta, qualcosa di cui T&L hardware ha bisogno per raggiungere le massime prestazioni.

Una lingua per rovinarli tutti

Quindi, l'ambiente di sviluppo OpenGL è stato fratturato per un certo periodo. Nessuno shader cross-hardware, nessuna memoria vertice GPU cross-hardware, mentre gli utenti D3D hanno apprezzato entrambi. Potrebbe andare peggio?

Tu ... potresti dirlo. Entra in 3D Labs .

Chi sono, potresti chiedere? Sono una compagnia defunta che considero i veri assassini di OpenGL. Certo, l'inettitudine generale dell'ARB ha reso vulnerabile OpenGL quando avrebbe dovuto possedere D3D. Ma 3D Labs è forse il motivo principale per me per l'attuale stato di mercato di OpenGL. Cosa avrebbero potuto fare per causarlo?

Hanno progettato il linguaggio di ombreggiatura OpenGL.

Vedi, 3D Labs era una società morente. Le loro costose GPU venivano emarginate dalla crescente pressione di NVIDIA sul mercato delle workstation. E a differenza di NVIDIA, 3D Labs non aveva alcuna presenza nel mercato principale; se ha vinto NVIDIA, sono morti.

Che hanno fatto.

Quindi, nel tentativo di rimanere rilevanti in un mondo che non voleva i loro prodotti, 3D Labs si è presentato a una conferenza degli sviluppatori di giochi con presentazioni per qualcosa che hanno chiamato "OpenGL 2.0". Questa sarebbe una riscrittura completa da zero dell'API OpenGL. E questo ha senso; all'epoca l'API di OpenGL aveva un sacco di innesti (nota: quell'innesto esiste ancora). Guarda come funzionano il caricamento delle trame e la rilegatura; è semi-arcano.

Parte della loro proposta era un linguaggio di ombreggiatura. Naturalmente. Tuttavia, a differenza delle attuali estensioni ARB multipiattaforma, il loro linguaggio di shading era "di alto livello" (C è di alto livello per un linguaggio di shading. Sì, davvero).

Ora, Microsoft stava lavorando sul proprio linguaggio di ombreggiatura di alto livello. Che loro, in tutta l'immaginazione collettiva di Microsoft, chiamavano ... High Level Shading Language (HLSL). Ma il loro era un approccio fondamentalmente diverso alle lingue.

Il problema più grande con il linguaggio shader di 3D Labs era che era integrato. Vedi, HLSL era una lingua definita da Microsoft. Hanno rilasciato un compilatore per questo, e ha generato il codice assembly Shader Model 2.0 (o modelli shader successivi), che avresti inserito in D3D. Nei giorni D3D v9, H3SL non veniva mai toccato direttamente da D3D. Era una bella astrazione, ma era puramente opzionale. E uno sviluppatore ha sempre avuto l'opportunità di andare dietro il compilatore e modificare l'output per ottenere le massime prestazioni.

Il linguaggio 3D Labs non aveva nulla di tutto ciò. Hai dato all'autista un linguaggio simile al C e questo ha prodotto uno shader. Fine della storia. Non uno shader di assemblaggio, non qualcosa che dai da mangiare a qualcos'altro. L'oggetto OpenGL effettivo che rappresenta uno shader.

Ciò significava che gli utenti di OpenGL erano aperti ai capricci degli sviluppatori che stavano semplicemente imparando a compilare linguaggi simili a assembly. I bug del compilatore dilagavano nel nuovo battesimo OpenGL Shading Language (GLSL). Quel che è peggio, se sei riuscito a far compilare correttamente uno shader su più piattaforme (cosa da poco), sei stato comunque sottoposto agli ottimizzatori del giorno. Che non erano ottimali come potevano essere.

Mentre quello era il più grande difetto di GLSL, non era l'unico difetto. Di gran lunga .

In D3D e nei linguaggi di assemblaggio precedenti in OpenGL, è possibile combinare shader di vertici e frammenti (pixel). Finché comunicano con la stessa interfaccia, è possibile utilizzare qualsiasi shader di vertici con qualsiasi shader di frammenti compatibile. E c'erano persino livelli di incompatibilità che potevano accettare; uno shader di vertice potrebbe scrivere un output che lo shader di frammento non ha letto. E così via.

GLSL non aveva nulla di tutto ciò. Gli shader di vertici e frammenti sono stati fusi insieme in quello che 3D Labs ha chiamato un "oggetto programma". Quindi, se si desidera condividere programmi di vertici e frammenti, è necessario creare più oggetti programma. E questo ha causato il secondo problema più grande.

Vedi, 3D Labs pensava che fossero intelligenti. Hanno basato il modello di compilazione di GLSL su C / C ++. Prendi un .c o .cpp e lo compili in un file oggetto. Quindi prendi uno o più file oggetto e li colleghi in un programma. Ecco come si compila GLSL: compili il tuo shader (vertice o frammento) in un oggetto shader. Quindi metti quegli oggetti shader in un oggetto programma e li colleghi insieme per formare il tuo vero programma.

Mentre ciò ha consentito a potenziali idee interessanti come avere shader "di libreria" che contenevano codice aggiuntivo che gli shader principali potevano chiamare, ciò che in pratica significava che gli shader venivano compilati due volte . Una volta nella fase di compilazione e una volta nella fase di collegamento. Il compilatore di NVIDIA in particolare era noto per aver sostanzialmente eseguito la compilazione due volte. Non ha generato alcun tipo di intermediario del codice oggetto; l'ha appena compilato una volta e ha gettato via la risposta, quindi l'ha compilata di nuovo al momento del collegamento.

Quindi, anche se vuoi collegare il tuo shader di vertice a due diversi shader di frammenti, devi fare molto più compilazioni che in D3D. Soprattutto dal momento che la compilazione di un linguaggio di tipo C è stata eseguita offline , non all'inizio dell'esecuzione del programma.

Ci sono stati altri problemi con GLSL. Forse sembra sbagliato dare la colpa a 3D Labs, dal momento che l'ARB alla fine ha approvato e incorporato il linguaggio (ma nient'altro della loro iniziativa "OpenGL 2.0"). Ma era una loro idea.

Ed ecco la parte davvero triste: 3D Labs aveva ragione (principalmente). GLSL non è un linguaggio di shading basato su vettori come era allora HLSL. Questo perché l'hardware di 3D Labs era hardware scalare (simile al moderno hardware NVIDIA), ma alla fine erano proprio nella direzione in cui molti produttori di hardware sono andati con il loro hardware.

Avevano ragione a scegliere un modello di compilazione online per un linguaggio "di alto livello". D3D è persino passato a quello alla fine.

Il problema era che i 3D Labs avevano ragione nel momento sbagliato . E nel tentativo di evocare il futuro troppo presto, nel tentativo di essere a prova di futuro, hanno messo da parte il presente . Sembra simile a come OpenGL ha sempre avuto la possibilità di funzionalità T&L. Solo che la pipeline T&L di OpenGL era ancora utile prima di T&L hardware, mentre GLSL era una responsabilità prima che il mondo lo raggiungesse.

GLSL è una buona lingua ora . Ma per il momento? È stato orribile. E OpenGL ne ha sofferto.

Cadere verso l'apoteosi

Mentre sostengo che 3D Labs ha colpito il colpo fatale, è stato lo stesso ARB a guidare l'ultimo chiodo nella bara.

Questa è una storia di cui potresti aver sentito parlare. Al momento di OpenGL 2.1, OpenGL aveva riscontrato un problema. Aveva un sacco di legacy legft. L'API non era più facile da usare. C'erano 5 modi per fare le cose e non avevo idea di quale fosse il più veloce. Potresti "imparare" OpenGL con semplici tutorial, ma non hai davvero imparato l'API OpenGL che ti ha dato prestazioni reali e potenza grafica.

Quindi l'ARB decise di tentare un'altra reinvenzione di OpenGL. Questo era simile a "OpenGL 2.0" di 3D Labs, ma meglio perché dietro c'era l'ARB. Lo chiamavano "Longs Peak".

Cosa c'è di male nel prendere un po 'di tempo per migliorare l'API? Ciò era negativo perché Microsoft si era lasciata vulnerabile. Vedi, questo era al momento del passaggio a Vista.

Con Vista, Microsoft ha deciso di introdurre alcune modifiche indispensabili nei driver di visualizzazione. Hanno costretto i driver a presentare al sistema operativo per la virtualizzazione della memoria grafica e varie altre cose.

Mentre uno può discutere i meriti di questo o se fosse effettivamente possibile, il fatto rimane questo: Microsoft ha ritenuto che D3D 10 fosse solo Vista (e superiore). Anche se si disponesse di hardware in grado di D3D 10, non è possibile eseguire applicazioni D3D 10 senza anche eseguire Vista.

Potresti anche ricordare che Vista ... um, diciamo solo che non ha funzionato bene. Quindi avevi un sistema operativo poco performante, una nuova API che funzionava solo su quel sistema operativo e una nuova generazione di hardware che aveva bisogno di tale API e sistema operativo per fare qualcosa di più che essere più veloce della generazione precedente.

Tuttavia, gli sviluppatori potrebbero accedere alle funzionalità di classe D3D 10 tramite OpenGL. Bene, potrebbero se l'ARB non fosse stato impegnato a lavorare su Longs Peak.

Fondamentalmente, l'ARB ha trascorso un buon anno e mezzo o due anni di lavoro per migliorare l'API. Quando uscì OpenGL 3.0, l'adozione di Vista era in aumento, Win7 era dietro l'angolo per mettere Vista alle spalle e la maggior parte degli sviluppatori di giochi non si interessava comunque delle funzionalità della classe D3D-10. Dopotutto, l'hardware D3D 10 eseguiva correttamente le applicazioni D3D 9. E con l'ascesa delle porte da PC a console (o gli sviluppatori di PC che saltano per lo sviluppo della console. Scegliete), gli sviluppatori non hanno avuto bisogno delle funzionalità di classe D3D 10.

Ora, se gli sviluppatori avessero avuto accesso a tali funzionalità in precedenza tramite OpenGL su macchine WinXP, lo sviluppo di OpenGL avrebbe potuto ricevere un colpo indispensabile nel braccio. Ma l'ARB ha perso la loro opportunità. E vuoi sapere la parte peggiore?

Nonostante abbiano trascorso due anni preziosi nel tentativo di ricostruire l'API da zero ... hanno comunque fallito e sono tornati allo status quo (ad eccezione di un meccanismo di deprecazione).

Quindi non solo l'ARB ha perso una finestra cruciale di opportunità, ma non ha nemmeno svolto il compito che gli ha fatto perdere quella possibilità. Praticamente un fallimento epico tutt'intorno.

E questa è la storia di OpenGL contro Direct3D. Un racconto di occasioni mancate, grave stupidità, cecità intenzionale e semplice follia.


24
Hai scritto questo da qualche parte o hai scritto se in cima alla tua testa?
Kristofer Hoch,

38
@Kristofer: Non so se puoi chiamarlo "dalla cima della tua testa" per qualcosa che ha richiesto circa un'ora per comporre, ma non l'ho scritto da qualche parte.
Nicol Bolas,

18
@ F.Aquino: Quindi sei disposto ad attribuire questo al sistema di rendering utilizzato dai giochi FPS, piuttosto che al motore stesso? Anche se CS si basa su Half-Life 1, che si basa su Quake? Scusate; non comprarlo. Certo, non compro la premessa che i nuovi FPS non hanno potenziale di e-sport, anche se ci sono molti tornei di e-sport incentrati su nuovi FPS. Potrebbero non avere la stessa attrazione che CS ha per alcuni giocatori, ma non fare l'errore di pensare che quei giocatori facciano parte di tutti gli sport elettronici FPS.
Nicol Bolas,

165
Wow. Non mi importa nemmeno della maggior parte di queste cose ed è ancora un'ottima lettura!
Peter Rowell,

12
Which they, in all of Microsoft's collective imagination, called... the High Level Shading Language (HLSL).LOLled per più di 6 minuti a questo.
ApprenticeHacker

133

Ho trovato strano che tutti si stiano concentrando sulla base di utenti, quando la domanda è "sviluppatori di giochi", non "editor di giochi".

Per me, come sviluppatore, Linux è un casino sanguinoso. Esistono così tante versioni, desktop manager, kit UI, ecc ... Se non voglio distribuire il mio lavoro come open source, in cui l'utente può (provare a) ricompilare in modo che si adatti alla sua combinazione unica di pacchetti, librerie e ambientazioni, è un incubo !

D'altra parte, Microsoft fornisce (la maggior parte delle volte) un'incredibile compatibilità con le versioni precedenti e stabilità della piattaforma. È possibile indirizzare tutta la gamma di macchine con un programma di installazione a sorgente chiuso, ad esempio computer con Windows XP, Vista e versioni a 7, 32 e 64 bit, senza ridistribuibili DX o VC installati, ecc ...

Un'ultima cosa, PER FAVORE , TUTTI SULL'INTERNET INTERROMPONO IL CONFRONTO DI OPENGL E DIRECTX! O confronta Direct3D vs OpenGL o non farlo . DirectX fornisce supporto di input, supporto audio, riproduzione di film, ecc. Che OpenGL non offre.


40
"Per me, come sviluppatore, Linux è un casino di sangue." Infatti! Lavoro in un ambiente con Fedora e Ubuntu. Abbiamo problemi anche solo tra quei due. (Devo aggiungere che sono un fan di Linux.)
David Poole,

48
@ jv42: questo sembra un malinteso comune: quasi tutte quelle versioni, desktop manager e kit UI, ecc. sono abbastanza irrilevanti per far funzionare un gioco. Se il tuo gioco (come spedito) dipende da libGL, libX11 e libasound (o libopenal o libao o liboss), stai facendo qualcosa di sbagliato.
greyfade,

19
@greyfade "Se il tuo gioco (come spedito) dipende da qualcosa di più di libGL, libX11 e libasound (o libopenal o libao o liboss), stai facendo qualcosa di sbagliato." - E poi ti colleghi a libao-0.0.4alpha, e il tuo utente ha libao-0.0.5beta e niente funziona.
quant_dev,

17
Impacchettare un binario in modo che funzioni su tutte le distribuzioni Linux non è poi così difficile. Diamine, gli sviluppatori di Blender lo fanno ad ogni versione. C'è solo un (ben due, 32 bit e 64 bit) pacchetto di rilascio Linux di Blender.
datenwolf,


88

È perché ci sono più utenti Windows sul pianeta di Linux e Mac. La verità è che le persone fanno le cose per chiunque abbia il mercato più grande.
Lo stesso vale per i telefoni cellulari: Android e iPhone hanno giochi fantastici, ma Windows Mobile e Symbian non ...


24
@Mahmoud Hossam: non è vero. L'uso di OpenGL non significa che l'intera applicazione funzionerà magicamente in un ambiente * nix, significa che il motore grafico funzionerà (e anche allora non significa che non ci siano stranezze (ad esempio) su Windows che non funzionano esiste su Linux e viceversa). Questo non è l'intero paniere e c'è sicuramente un costo apprezzabile per mantenere il loro codice su più piattaforme.
Ed S.

5
@Mahmoud: esattamente. E se non ti preoccuperai del porting su Linux / Mac OS, allora perché non usare la libreria nativa? DirectX è supportato molto meglio su Windows rispetto a OpenGL.
Dean Harding,

10
@Mahmoud: l'intera premessa della domanda è "perché gli sviluppatori preferiscono Windows". Risposta: perché è quello che usano i giocatori. Non ha senso effettuare il porting su Linux / Mac se costituisce solo il 2% del proprio mercato e, in tal caso, non ha senso usare OpenGL se non si esegue il porting comunque.
Dean Harding,

4
@Mahmoud, non è compito dello sviluppatore del gioco far passare le persone a Linux.
GrandmasterB

6
@ John 10+ milioni di giocatori di World of Warcraft vorrebbero avere una parola con te. E questo è solo un gioco.
Marcelo,

50

Perché Windows ha una quota di mercato superiore al 90% e Linux (dal momento che hai espressamente chiesto di Linux) ha la reputazione di avere molti utenti a cui non piace pagare per il software. Se questo è vero o no è irrilevante; la percezione è lì e influenza le decisioni delle persone.


1
Se gli sviluppatori utilizzano OpenGL, supporterà sia Windows che Linux, quindi sarà un vantaggio di marketing attirare effettivamente gli utenti Linux che sono disposti a pagare e utilizzano Linux perché credono che sia meglio.
M.Sameer,

9
Anche usando OpenGL ci sono costi per lo sviluppo e il collaudo di piattaforme diverse che il mercato Linux non giustifica. Directx è anche (purtroppo) una piattaforma migliore per i giochi per PC al momento rispetto a OpenGL - ci sono pochissimi nuovi giochi su PC in fase di sviluppo su OpenGL.
Martin Beckett,

25
La multipiattaforma non è così semplice come "solo codice per OpenGL".
Sistema inattivo

13
In realtà non è vero, che gli utenti Linux non pagheranno per il software. Il Humble Indie Bundle (un pacchetto di giochi che puoi ottenere per qualsiasi somma di denaro che desideri pagare) è stato fatto due volte e ogni volta ha mostrato agli utenti Linux che pagano più degli utenti Windows per il pacchetto.
Htbaa,

9
@Htbaa Ovviamente hanno pagato di più, erano disperati, è probabilmente l'unico gioco che riescono a giocare sul loro sistema operativo.
Marcelo,

11

Poiché Windows è supportato da una grande organizzazione, che oltre un decennio fa ha deciso di voler realizzare lo sviluppo di giochi sulla propria piattaforma .

Questo non era vero per il Mac, e non è vero ora. Neanche per iOS. Apple non fornisce strumenti per lo sviluppo di giochi iOS. Ma è un mercato enorme (ci sono più iPhone là fuori, rispetto ai PC nel 1995) con una concorrenza relativamente scarsa, quindi la gente lo fa comunque.

Per quanto riguarda Linux, non esiste nemmeno una sorta di istituzione centrale, che potrebbe stabilire alcun tipo di priorità. La direzione in cui sta andando Linux è più meno determinata da un gruppo di programmatori molto bravi, ma leggermente fuori dal mondo.

Per creare un gioco per PC oggi, hai bisogno di molti artisti 2d / 3d, designer di giochi, sceneggiatori, attori, tester e quant'altro. Per quanto riguarda la programmazione effettiva, potresti semplicemente utilizzare un vero motore di gioco (CryEngine, Unreal Engine, Quake Engine, Source Engine). Quindi potresti essere in grado di fare tutto senza nessun vero programmatore.

Per questo motivo e per la natura delle imprese, i programmatori hanno ben poco da dire su quale piattaforma venga scelta. E in genere, i manager cercano supporto, che è qualcosa che Microsoft afferma di offrire, e di gestire cose che sono in qualche modo sequestrabili ai loro schemi di pensiero, cosa che l'open source non lo è.

Per tale motivo, la maggior parte dello sviluppo di software per l'utente finale commerciale viene eseguito su Windows.
Lavoro per un'azienda che crea giochi in flash e quindi non è legata a una piattaforma specifica. Tuttavia, ci sviluppiamo tutti su Windows, poiché la maggior parte degli strumenti che utilizziamo non sono disponibili per Linux.


2
"Quindi potresti essere in grado di fare tutto senza nessun vero programmatore." Hai dimenticato il sarcasmo.
Allon Guralnek,

@AllonGuralnek: nessun sarcasmo lì. Nello sviluppo di giochi classici di grandi giochi, i programmatori creeranno motori e mezzi per fornire contenuti e comportamenti (attraverso editor visivi o script reali) e quindi i progettisti di giochi / livelli / missioni useranno tali mezzi. Se acquisti un motore funzionante e sufficientemente potente, puoi sostanzialmente tagliare il primo passo.
back2dos,

2
Hai un esempio specifico di un gioco ragionevolmente notevole che è stato creato senza scrivere una singola riga di codice?
Allon Guralnek,

1
@AllonGuralnek: non ho detto che nessuno avrebbe creato giochi senza codice , ma senza programmatori . Non è necessario essere un programmatore per creare una mod completamente rivoluzionaria. DotA è il più popolare che mi viene in mente dalla cima della mia testa.
back2dos,

1
@AllonGuralnek: No. Le persone che scrivono codice sono persone che scrivono codice. Il progettista di livelli deve avere una certa comprensione degli script. Molti programmatori sono spesso tenuti ad avere una certa quantità di abilità di gestione. Non rende il primo programmatore, né il secondo un manager. Anche la tua valutazione di DotA è sbagliata. In primo luogo sta cambiando completamente il gioco, trasformando un RTS in un nuovo genere e in secondo luogo è considerato un gioco separato da molti campionati di eSports tra cui l'ESWC
back2dos,

10

Come alcuni hanno già detto, la parte più importante è la base di utenti. Il 95% degli utenti di PC utilizza Windows. I giocatori PC usano quasi esclusivamente Windows. Anche quelli che usano Mac o Linux eseguono i giochi Windows molto spesso tramite virtualizzazione o emulazione (con pochissime eccezioni).

Ma la demografia non è tutto. Non sottovaluterei la parte che Microsoft sta facendo per rendere la piattaforma più attraente per gli sviluppatori di giochi. Fondamentalmente ottieni gratuitamente una serie completa di strumenti , soprattutto XNA Game Studio . Ciò consente non solo lo sviluppo per Windows, ma anche per Xbox360 . E con l'ultima edizione anche per i telefoni WP7. Ovviamente, poiché è uno strumento Microsoft, utilizza DirectX, non OpenGL.


3
Nota per tutti i lettori che viaggiano nel tempo: a partire da aprile 2014, XNA sarà ufficialmente morta. L'ultima versione (4.0) è stata pubblicata nel 2010 e non vedrà una nuova versione tra ora (2013) ed è il tramonto.
Aren

1
Un'altra nota per tutti i lettori che viaggiano nel tempo: lo sviluppo di Windows 8 (e versioni successive) non sarà più gratuito in futuro.
Fouric

6

Ewwww, io no. Uso quasi esclusivamente Linux. Doppio avvio su Windows per creare build di Windows e utilizzo il Mac per le build di Mac, ma il gioco è fatto.

Il trucco è un framework multipiattaforma che abbiamo sviluppato nel corso degli anni. I nostri giochi sono basati su questo e si comportano in modo identico in Linux / OpenGL, Mac / OpenGL e Windows / Direct3D (e presto in iOS / OpenGL).

Devo ammettere che la mia compagnia non fa titoli AAA, quindi potrebbe non essere applicabile a questi, ma realizziamo i migliori giochi casual (vedi sito web - CSI: NY, Murder She Wrote e i due prossimi 2011 sono esempi di titoli che usano licenze importanti, The Lost Cases of Sherlock Holmes 1 e 2 hanno avuto un discreto successo)

Non rinuncerei a gedit + gcc + gdb + valgrind per nient'altro.


3
gedit è sottovalutato per la programmazione
Alexander

2
@Alexander, sottovalutato non inizia nemmeno a spiegare
Shahbaz,

3
Scusa, alla fine ho rinunciato a gedit. Ora uso gvim e sono molto più felice :)
ggambett,

4
  1. Inerzia. Se hai usato Windows in passato, passare a qualcos'altro è una seccatura. Se sei su Windows DirectX è più facile e più probabile che funzioni bene di OpenGL.
  2. Quota di mercato. La quota di mercato di Windows sul desktop è maggiore di quella di OS X che a sua volta è maggiore di quella di Linux. Il denaro parla.
  3. Marca. DirectX è meglio conosciuto di cose come SDL (che è il genere di cose di cui avresti bisogno per replicare alcune delle funzionalità di DirectX che vanno oltre OpenGL).
  4. Meno confusione. Linux dell'utente supporterà solo fino a OpenGL 1.4 o OpenGL 2+? Puoi usare un tutorial di OpenGL 2.0 come un'introduzione al moderno OpenGL. Capitolo 1: La pipeline grafica sulla tua versione Linux?

Oggigiorno Linux è più curioso quando si tratta di sviluppo di giochi e la maggior parte degli sviluppatori starebbe meglio fiscalmente facendo una versione della porta OS X prima di una versione Linux (vedi cose come Steam). Anche allora il mercato delle console vale più di queste due piattaforme combinate per i giochi ...

Se si desidera la piattaforma mono DirectX va bene. Se vuoi essere multipiattaforma c'è una forte possibilità che tu debba andare con OpenGL su almeno alcune delle altre piattaforme.


2
La risposta alla domanda 4 è: 2+. Mesa3D supporta fino a OpenGL 2.1, il che significa che tutti i driver grafici per hardware 3D per X11 supportano almeno OpenGL 2.1 dalla versione 6.8 di Mesa. Questo copre tutte le distro Linux rilasciate negli ultimi due anni e i driver binari che NVIDIA e AMD forniscono supporto 3.0 e versioni successive. Ciò non include gli utenti di intel895, ma sono stati deprecati.
greyfade,

1
Temo che non sia così. I computer con chipset i915 / i945 (GMA 900/950) vengono (ancora) venduti e non sono deprecati. Anche su moderne distribuzioni di pochi mesi fa (Ubuntu 11.04 / Fedora 15) glxinfo restituirà una versione OpenGL non superiore a 1.4 (Mesa 7.11-devel). Tale hardware Intel semplicemente non può eseguire versioni successive senza l'aiuto del software, quindi fino a quando il softpipe non sarà disponibile per impostazione predefinita, Linux su tali schede non farà mai una versione successiva OpenGL. Il targeting di OpenGL 2.0 (o versione successiva) interromperà l'esecuzione di un programma su una vasta gamma di sistemi desktop Linux ...
Anon,

Anche così, non riesco a vedere la preoccupazione. Quegli stessi chipset hanno dei limiti su Windows, quindi la maggior parte dei giochi con grafica pesante sarebbe fuori discussione .
Greyfade,

4

La risposta è ovvia L'obiettivo di scrivere un gioco è fare soldi. Più utenti finali utilizzano Windows, quindi esiste un mercato più ampio e ci si aspetterebbe di guadagnare di più da un gioco Windows rispetto a un gioco Linux. È così semplice.

Se mai ti poni la domanda "Perché qualcuno fa ...", ricorda solo che i soldi fanno girare il mondo.


1
Sì, ma puoi creare un gioco multipiattaforma e ottenere più di semplici utenti Windows;)
M.Sameer

Essere multipiattaforma non è tutto. Se il numero di utenti extra che ottieni è una percentuale relativamente bassa, devi bilanciare i costi di sviluppo extra e i costi di supporto continui con i costi extra che riceverai da loro e prendere una decisione informata sulla base di dati reali reali. Non esiste una risposta globalmente giusta o sbagliata a quella, ma esiste una risposta giusta o sbagliata per ogni singolo programma e ciò che è giusto per un programma può essere sbagliato per un altro.
Maximus Minimus,

4

Strumenti, strumenti, strumenti.

Ecco a cosa si riduce. Sviluppa su Windows e accedi ad alcuni dei migliori strumenti di sviluppo del pianeta. Nulla è nemmeno lontanamente vicino al debugger di Visual Studio, i tempi di esecuzione del debug di DirectX sono fantastici, PIX è fantastico e equivalenti equivalenti non esistono su altre piattaforme / API. Certo, ci sono alcune cose buone lì; Non sto dicendo che gli strumenti su altre piattaforme siano cattivi, ma quelli forniti da MS sono così avanti rispetto al pacchetto (onorevole eccezione: Valgrind) che non è nemmeno divertente.

La linea di fondo è che questi strumenti ti aiutano. Ti aiutano a fare le cose, ti aiutano a essere produttivo, ti aiutano a concentrarti sugli errori nel tuo codice piuttosto che a lottare con un'API che non si comporta mai come documentato.


PIX è fantastico. Il debug degli shader facendo clic su un pixel fastidioso e vedere cosa è successo è fantastico!
Chris Pitman,

4

Quindi ho esaminato tutte queste risposte e, come sviluppatore di giochi che ha un codice sui giochi per console che sono stati sugli scaffali di Walmart, ho una risposta molto diversa.

Distribuzione.

Vedi, se vuoi essere su una console Nintendo, devi ottenere il permesso di Nintendo, acquistare dalle fabbriche Nintendo, pagare le spese generali di Nintendo, negoziare con Walmart, trattare con il deposito, hai bisogno di soldi per fabbricare, stampare scatole, spedire , per fare tutte le assicurazioni, ecc.

Se vuoi su XBox, sicuramente c'è XBLA, ma hai ancora bisogno della benedizione di Microsoft, devi aspettare il tuo turno di fila, sono decine di migliaia di dollari solo per rilasciare una patch, ecc.

Su iOS, hai ancora bisogno di Apple e possono (e fare) capricciosamente tirarti.

Su Steam, hai ancora bisogno del permesso o della luce verde di Valve e un sacco di soldi.

.

Su Windows? Si imposta un sito Web e un pulsante di download.

.

Non sto dicendo che le altre piattaforme non sono preziose. Ma ci sono così * tante * cose orribili che accadono quando stai cercando di sviluppare un gioco, che per me la promessa di essere in grado di schiaffeggiare un binario su un sito e concentrarti sul lavoro - almeno per iniziare - abbassa davvero un sacco di potenziali barriere di fallimento.

"Possiamo fare la porta XBLA più tardi, quando le cose sono stabili" mentalità.

E in misura minore, questo è sicuro anche per Linux, e se sette clienti sono buoni, puoi iniziare da lì.

Ma Windows ha tre enormi vantaggi: sviluppo veramente aperto, distribuzione realmente aperta e una base di clienti molto ampia e molto attiva che è interessata a cose bizzarre.

È difficile immaginare da dove altro preferirei iniziare.


3

Penso che dovresti leggere di più sulla storia di DirectX e su questo articolo .

Penso che MS abbia scelto DX piuttosto che openGL perché a loro piace bloccare le persone nell'uso del proprio sistema operativo.


4
no, hanno creato DX perché OGL non è ottimizzato per Windows, non può essere espanso rapidamente per sfruttare i nuovi sviluppi hardware e del sistema operativo, non include audio, input di controllo, ecc. ecc.
jwenting

2
iow DX è specializzato in Windows per motivi di prestazioni e per consentire a Microsoft di mantenerlo in questo modo e di integrare rapidamente le nuove tecnologie non appena saranno disponibili. OpenGL è bloccato a livello di supporto hardware grafico esistente 5 anni fa, forse di più, perché è uno sforzo di commissione.
jwenting

1
@jwenting Non credo che le prestazioni siano state l'unica ragione per cui non sono state portate su altre piattaforme, voglio dire, se avessero voluto portarlo, almeno l'avrebbero open-source e lo avrebbero lasciato alla comunità per implementarlo esso.
Mahmoud Hossam,

1
non hanno open source C #, hanno inviato le specifiche del linguaggio agli organismi di standardizzazione. Microsoft è membro di quegli organismi di standardizzazione e fa queste cose in ogni momento (hanno un grande contributo ad esempio su html, javascript e altri standard). Open source avrebbe significato rilasciare il codice sorgente per il compilatore e le librerie sotto qualcosa come l'APL.
jwenting

1
@jwenting: Per la cronaca, esiste un'implementazione di Direct3D 10 e 11 su Linux che ha come target il framework Gallium3D. (E non ha nulla a che fare con Wine.) Non sarei nemmeno d'accordo con la tua affermazione che "OGL non è ottimizzato per Windows". Questo è un problema di implementazioni di driver hardware, non una limitazione di OpenGL.
greyfade,

1

Molto ha a che fare con la politica e il controllo. Alla fine degli anni '90, SGI e MS hanno effettivamente concordato di unire gli sforzi:

http://en.wikipedia.org/wiki/Fahrenheit_graphics_API

SGI ha investito molto nel progetto, la SM no. SGI aveva bisogno di MS più di MS aveva bisogno di SGI. Il resto è storia.

D3D e OpenGL sono due API molto diverse, spetta allo sviluppatore scegliere quale è giusto per le tue esigenze.


0

Semplicemente perché Linux ha fallito orribilmente come sistema desktop. Come qualcuno ha sottolineato in precedenza Linux è un casino per gli sviluppatori (diverse librerie, kit di strumenti dell'interfaccia utente, ecc.)

Un altro problema è il freetardismo e la mancanza di supporto per il software proprietario. Nvidia fornisce sempre ottimi driver (proprietari) per Linux, tuttavia Ubuntu e altre distro non lo distribuiscono. Non esiste inoltre un'interfaccia del driver binario disponibile per Linux come per Windows. (Esiste un file di testo chiamato binaryApiNonsense.txt o qualcosa nelle fonti del kernel) Detto questo, solo l'hardware Nvidia è supportato correttamente sotto Linux. Puoi giocare alla maggior parte dei giochi di software ID usando l'hardware Nvidia su Linux.

La prossima cosa che strumenti di sviluppo. MSFT offre un eccellente supporto per C ++ e il debugger di Visual Studio è migliore di gdb per quanto riguarda C ++. Ultimo ma non meno importante, mancano ulteriori strumenti come Photoshop. Inoltre .net ti consente di creare rapidamente strumenti gui. Molti studi di gioco codificano i loro strumenti per uso interno usando il framework .net.

Ho quasi dimenticato: il sistema grafico è orribilmente, ai tempi in cui avevano appena portato X11 perché era la cosa più semplice che ha funzionato. Non sono riusciti a progettare e implementare correttamente un moderno sistema grafico che OSx e Win hanno.


4
Hmm? Le mie schede Intel e ati funzionano bene in Linux ... E cosa c'è che non va in X11? Ho sempre pensato che fosse molto meglio delle alternative per altri sistemi operativi (in particolare Windows) a causa della sua architettura client-server.
alternativa il

No, non scrivono glxinfo e vedono che il tempo va bene o no! X11 è orribile rotto solo un esempio theinvisiblethings.blogspot.com/2010/08/…
Nils

e se leggi l'ultima frase, Linus stesso ha implementato la patch a livello di kernel, non una patch X11.
alternativa il

1
Non so molto sul sistema grafico (potresti avere un punto) ma dire che Linux non è riuscito come sistema desktop non è vero o almeno non è preciso. Sono passato da Windows a Linux e da allora mi sento molto produttivo. Le prestazioni di Linux sono state ed erano superiori a quelle di Windows in tutte le macchine che ho usato. Inoltre non codice C ++ e voglio sapere dove sta Eclipse come IDE C ++ rispetto a Visual Studio.
M.Sameer,

Metti giù i lanciafiamme. Penso che l'opinione generalmente accettata sia che VS sia l'IDE migliore. Tuttavia, Eclipse è ancora giovane e ha molta strada da fare - vedremo. Adoro semplicemente la facilità con cui tutto è scriptabile e trasferibile in Linux, comunque!
Vorac,
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.