Per quale versione di OpenGL dovrei codificare, date le considerazioni di compatibilità e prestazioni? [chiuso]


19

Quando le specifiche OpenGL vengono aggiornate, aggiungono sempre e solo funzionalità. Quindi, in teoria, l'ultimo e il più grande hardware con supporto per i profili Core e Compatibilità dovrebbe funzionare perfettamente con il vecchio codice OpenGL1.1. Questo si è rivelato essere vero. Ho trascorso 12 mesi a imparare OpenGL1.1 e ne ho una buona conoscenza.

Ho letto alcuni capitoli di uno di quei nuovi fantasiosi libri OpenGL4.2. Quasi tutte le funzionalità su cui faccio affidamento sono state deprecate (come gli elenchi di visualizzazione), il che mi consente di supporre che ci siano modi migliori di fare tutte queste cose.

Consideriamo che è probabile che 1.1 sia supportato, per intero, da TUTTO l'hardware moderno. 1.1 è stato rilasciato nel 1992. Non sto programmando il modo più duro solo per supportare i PC di 20 anni. :-p Penso che sia ragionevole presumere che la maggior parte dei giocatori stia eseguendo un hardware che arriva in fondo alla fascia media di circa 5 anni.

Penso che i metodi più recenti siano progettati per essere universalmente una delle due cose: prestazioni migliori o più facili da programmare. Ho letto da qualche parte che non è mai entrambi! XD

Quale versione di OpenGL è maggiormente supportata dall'hardware di circa 5 anni? Quale versione ha più senso usare, date queste considerazioni?

Risposte:


19

Alla luce delle tue considerazioni, sono saltato fuori per vedere quando sono state rilasciate le specifiche OpenGL per ogni versione e ho anche preso in considerazione alcune informazioni generali da quello che ho visto.

OpenGL 3, che ha introdotto FBO, VAO e altre cose, è stato rilasciato l'11 luglio 2008, quasi 5 anni fa. Ovviamente, non puoi aspettarti che tutte le carte dopo quella data abbiano immediatamente OpenGL 3 disponibile.

Dando un'occhiata al Steam Hardware Survey , il 40% sono DirectX 10. Dato che OpenGL 3 richiede una scheda grafica simile, è generalmente sicuro supporre che la maggior parte delle schede DirectX 10 possano eseguire almeno OpenGL 3.

OpenGL 3 è supportato su schede fino alla serie GeForce 8xxx, che erano piuttosto popolari se ricordo bene. Inoltre è interessante notare che Intel HD 2000 e 3000 Graphics (Sandy bridge) supportano solo fino a OpenGL 3, quindi tienilo a mente se prevedi di indirizzarli.

Conclusione: OpenGL 3 è una buona scommessa (ricorda anche che la maggior parte dei giocatori, a seconda del tuo pubblico di destinazione, avrà probabilmente un hardware migliore della media).


Questa è un'ottima risposta Era esattamente il tipo di intuizione che stavo cercando.
Suds,

3
"Inoltre è interessante notare che Intel HD 2000 e 3000 Graphics (Sandy bridge) supportano solo fino a OpenGL 3" Nota: supportano solo GL 3.1 (perché a Intel non importa.) E dato che è Intel, il "supporto" dovrebbe essere preso con un granello di sale. Il loro hardware potrebbe supportare 3.3, ma non lo espongono (perché di nuovo, a loro non importa). Eviterei di usare OpenGL 3.x sull'hardware Intel. In effetti, eviterei di fare qualsiasi cosa basata su shader basato su hardware Intel.
Nicol Bolas,

La domanda viene quindi sollevata; quanto è saturo il mercato con hardware Intel? Vale la pena non preoccuparsi della grafica Intel e usare OpenGL3.x comunque? O c'è abbastanza hardware grafico Intel là fuori per importare davvero?
Sud

1
Un problema è OSX. L'ultima versione 10.7.x supporta solo OpenGL 3.2 , 10.6.x supporta solo 3.0 (o forse anche 2.x). 10.5.x varia notevolmente a seconda della scheda, 1.3, 1.5 e 2.0 sono possibilità. Quei sistemi rimarranno per sempre bloccati su quelle versioni OpenGL a meno che l'utente non paghi soldi ad Apple per un aggiornamento. Non ci sono aggiornamenti del driver della scheda video o simili per OSX che aggiorneranno OpenGL. Altri problemi sono alcuni dei chipset Intel embedded dogey utilizzati nei netbook. Molti di questi sono solo OpenGL 2.0 o peggio.
David C. Bishop,

E poi hai il 3DS, che sta ancora scuotendo OpenGL 1.1 ...
kirbyfan64sos

8

Vorrei iniziare qui: http://store.steampowered.com/hwsurvey

Non sceglierei come target un periodo di tempo tanto quanto una percentuale di utenti, ad esempio, se scegli come target 4cpus, raggiungerai solo il 45% degli utenti, ma se lavori a 2, ti avvicinerai al 90%


1
Dove hai visto OpenGL? Vedo solo DirectX (che è qualcosa di interessante da notare se prevedi di indirizzare solo Windows).
DMan

Immagino che tu faccia il lavoro basato sulla rottura della scheda grafica
Jimmy

Sì - non ho visto nulla su OpenGL - ma puoi ottenerlo dai modelli di carte, o in effetti, credo che ci sarebbe una buona dose di correlazione tra le versioni di DirectX e OpenGL.
salmonmoose

3

La risposta dipende dal fatto che tu debba o meno eseguire o meno la grafica Intel rilasciata nei tempi indicati.

Se lo fai, limitati a OpenGL 2.1 (o anche 1.5), in caso contrario 3.x sembra ragionevole.

Sì, le versioni precedenti di OpenGL funzionano ancora, e sì, da una prospettiva possono sembrare più semplici. Il punto in cui le cose si deformano è quando provi a fare cose (e lo farai) che non supportano troppo facilmente. OpenGL 1.1 non è solo il modo difficile - è spesso il modo impossibile se si desidera ottenere determinati risultati.


Mi viene in mente che dovrei aggiungere un esempio del perché 1.1 è spesso impossibile. Uno di questi che può essere facilmente correlato alla funzionalità 1.1 sono i passaggi di fusione multipli. Poiché non disponi di FBO e la maggior parte è limitata a 8 bit per le trame dei componenti, scoprirai che man mano che le miscele passano, inizierai a perdere precisione. Usa passaggi 3/4/5 e il risultato finale inizierà ad apparire come (o peggio di) grafica a 16 o 8 bit. Tuttavia sono spesso necessari passaggi multipli per simulare effetti di livello superiore (il multitexturing di base sarebbe uno che conosciamo tutti bene) con un set di funzionalità 1.1.
Maximus Minimus

Anche la grafica Intel HD (Sandy / Ivy Bridge) supporta solo OpenGL 3.1, ed è vecchio di un anno. Dipende dal fatto che tu voglia supportare laptop economici (o a bassa potenza).
Steve Howard,

2
@SteveHoward: Intel HD Graphics può supportare OpenGL 4. source
Janus Troelsen,

L'articolo è di circa 3 mesi dopo che ho pubblicato il mio commento.
Steve Howard,

1

In primo luogo le cose di OpenGL 1.1 come gli elenchi di visualizzazione funzioneranno comunque in un nuovo contesto a condizione che tu abbia il profilo di compatibilità (che è generalmente il caso). L'unico problema è se si prevede di eseguire il port su OpenGL ES, una delle librerie grafiche specifiche della console (in genere vengono rimosse da OpenGL simile a OpenGL ES) o persino WebGL (che richiederebbe comunque un po 'di rielaborazione).

Personalmente consiglierei l'uso di shader di vertici / frammenti e VBO. Sono in circolazione da molto tempo ormai e offrono grandi miglioramenti delle prestazioni. Probabilmente potresti anche fornire un semplice fallback se avvolgi le funzioni in una classe.

Potresti anche essere in grado di emulare cose come Vertex Array Objects.


0

Con l'hardware di 5 anni, alcune persone usano ancora XP. Ciò significa che non puoi nemmeno programmare con DirectX 10 o OpenGL 3. E OpenGL 3 ha molte funzionalità di cui potresti davvero beneficiare, come framebuffer e simili. Onestamente, aumenterei leggermente i requisiti di sistema in modo da poter includere quelle funzionalità.


8
-1: "Con l'hardware di 5 anni, alcune persone usano ancora XP. Ciò significa che non puoi nemmeno programmare con DirectX 10 o OpenGL 3." Non vero. OpenGL 3.x funziona bene su XP. È solo D3D10 limitato da XP, per motivi API / driver. Non ha nulla a che fare con l'hardware.
Nicol Bolas,

0

È comune per il software 3d avere percorsi di codice sia per una versione di API grafica "baseline" che per una versione di API "più recente e più grande".

Le versioni grafiche di base comuni sono D3D9 e OpenGL 2.1 / GLSL 120 .. Che mancano entrambi in particolare agli shader della geometria perché il vecchio hardware non li supporta.

Un'altra opzione di base è ANGLE, che è GLES 2.0 più EGL che funziona su D3D9, desktop OpenGL e GLES 2.0 mobile. È il back-end per Google Chrome e Webgl in Chrome e Firefox.

http://code.google.com/p/angleproject/

Per quanto riguarda la versione "più recente e più grande" che scegli, è più impegnativa. Più api e hardware più recenti vengono scelti come target, le caratteristiche più belle che è possibile supportare, ma solo sull'hardware più recente e più potente.

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.