PDA

View Full Version : [Windows estremo]Renderizzare triangoli usando direttamente il driver


Tommo
29-01-2013, 10:08
Di recente ho rilasciato un gioco che è stato distribuito a ~30000 persone, e ho fatto la scommessa di rilasciarlo in OpenGL anche per windows...
non l'avessi mai fatto :asd:
L'implementazione di OGL su win si è rivelata deludente esattamente come dicono, con crash assortiti anche su versioni piuttosto recenti dei driver e pure su schede video niente male.
e la goccia che ha fatto traboccare il vaso è stata la scoperta che Intel non supporta il vsync su *nessuna* versione della sua OpenGL, condannando al tearing un 70% dei pc :muro:

Ora, a me DX sta sui cosiddetti.
Mi importa poco della qualità dell'API in sè, ma sta evidentemente in mezzo alle scatole visto che GL va supportata per forza, e non c'è nessun motivo (teorico) valido per non poterla usare anche su win... ma invece a causa dei driver, ci obbliga a un doppio lavoro non indifferente (senza contare W(P)8 dove GL non è proprio supportata).
C'è gente (tipo, google) che reputa la situazione di GL su windows abbastanza triste da riscriverla usando DX (https://code.google.com/p/angleproject/), ma questo approccio ha ogni genere di attriti a runtime.

D'altra parte OpenGL deve essere implementata all'interno del driver dai produttori (spesso a cazzo di cane) mentre DX funziona sempre, anche se è implementata una sola volta da Microsoft sopra il Windows Display Driver Model 1.*
E mi chiedevo... non si potrebbe provare a implementare OpenGL allo stesso modo di come è implementata Direct3D, sopra WDDM e HAL?
In questa ottica, Direct3D è sostanzialmente una grossa utility library per la grafica 3D sopra il driver video.

Se è possibile, teoricamente dovrei poter disegnare qualche triangolo a schermo linkando direttamente l'interfaccia del driver, senza passare per DirectX, ma non ho trovato nemmanco una reference :read:

C'è qualche uber-esperto in giro che mi sa dare qualche direzione?
O almeno un link a un forum internazionale dove lo sanno :asd:

banryu79
29-01-2013, 12:12
*iscritto, questo interessa anche a me.

Tommo
29-01-2013, 12:25
Ho trovato questa reference (http://msdn.microsoft.com/en-us/library/windows/hardware/ff570118(v=vs.85).aspx) che contiene tutte le funzioni che devono essere esposte dal driver per essere compatibile col livello di D3D richiesto (9, 10, 10.1, 11, 11.1) :D
La buona notizia è che disegnare un triangolo è quasi uguale a come si fa con D3D, la cattiva è che st'interfaccia mi pare la copia sputata di D3D... quindi non abbastanza "low level" da implementarci GL senza "attriti", forse. Anche se mi sa che bisognerebbe solo che provarci.

idoido
29-01-2013, 16:00
interessante ANGLE, un wrapper OpenGL su DirectX, praticamente come nGlide per le Glide 3fdx

bisognerebbe fare qualche benchmark per verificare la bontà del wrapper :)

banryu79
01-02-2013, 08:39
C'entra na mazza con il topic, ma leggendo questa notizia (http://www.gamemag.it/news/microsoft-verso-la-chiusura-del-programma-indie-xna-stessa-sorte-per-le-directx_45675.html) non ho potuto fare a meno di rizzare le antenne quando mi sono imbattuto in questo passaggio circa Direct3D:

... In realtà, ciò che lo sviluppatore intende a proposito delle DirectX è che questo supporto potrebbe essere smantellato se inteso come supporto al di fuori delle Direct3D. Queste ultime, inoltre, potrebbero essere definitivamente assorbite all'interno del kernel di Windows...

Magari è solo un rumor infondato, eh :D


interessante ANGLE, un wrapper OpenGL su DirectX, praticamente come nGlide per le Glide 3fdx

bisognerebbe fare qualche benchmark per verificare la bontà del wrapper

Come diceva Tommo, ci sono "degli attriti" inevitabili:

C'è gente (tipo, google) che reputa la situazione di GL su windows abbastanza triste da riscriverla usando DX, ma questo approccio ha ogni genere di attriti a runtime.

Nel caso citato (ANGLE) puoi leggerne nelle wiki del progetto, ad esempio (in questo caso si tratta di "attriti" generati dal tentivo di "mappare" OpenGL ES 2.0 sopra Direct3D 9):
http://code.google.com/p/angleproject/wiki/BufferImplementation
Altri indizi li puoi trovare spulciando la pagina degli "Issues" cercando tra i "Defect" il cui stato è "Started"...

mone.java
01-02-2013, 12:19
Mi iscrivo perché interessa anche a me.. :read: