OpenGL en DirectX: hoe werkt het?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 01-08 10:05
nieuws: OpenGL 3.3 en 4.0 aangekondigd

Er is een nieuwe versie van OpenGL aangekondigd. Deze OpenGL versie heeft nieuwe features en werken al op bestaande videokaarten, terwijl deze videokaarten nooit ontwikkeld zijn voor deze nieuwe versie van OpenGL.

Ik dacht altijd dat OpenGL en DirectX gewoon 2 API's waren welke in de videokaart gebakken waren: opdrachten die je geeft gaan zonder tussenliggende API's direct naar de videokaart driver, waarbij de driver direct verbinding maakt met de videokaart. Het maken van alternatieve API's is hierdoor niet mogelijk, omdat je de videokaart niet kan aanpassen.

Echter, nu blijkt dus dat OpenGL gewoon een nieuwe versie heeft welke werkt op huidige videokaarten. (OpenGL 3.3 op DX10.1+ kaarten en OpenGL 4 op DX11+ kaarten). Dat houdt in dat OpenGL op een of andere manier nieuwe functionaliteit heeft toegevoegd in hun library, wat inhoudt dat een grafische lib toch softwarematig zou moeten zijn wat een low-level API aanspreekt.

Hoe dan ook, hoe werkt OpenGL en DirectX precies? Wat sturen deze precies aan? Is het mogelijk om zelf een alternatieve library te schrijven wat deze onderliggende API's aanstuurt? Zo ja, waarom zijn er dan alleen maar 2 grote libraries: OpenGL en DirectX?

Kan overigens niet wachten om tesselation uit te proberen :D
Hopelijk werkt het op mijn 9600M GT, maar ik geef het weinig kans.

[ Voor 4% gewijzigd door Gamebuster op 12-03-2010 17:46 ]

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Je kunt het zien als een abstractielaag; je hoeft alleen maar tegen die laag aan te programmeren en hoe die laag het met onderliggende hardware uitvecht is 't probleem van die laag. Simple as that.

DirectX / OpenGL communiceren op hun beurt jouw wensen door naar de hardware; ik ben geen expert maar ik vermoed dat ze rechtstreeks tegen de drivers aan buurten; maar het zou kunnen dat daar nog weer een laag(je) tussen zit.

[ Voor 42% gewijzigd door RobIII op 12-03-2010 17:40 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • NC83
  • Registratie: Juni 2007
  • Laatst online: 21-08 21:44
Voor DX moet een IHV(independant Hadware Vendor) een DDK gebruiken om de driver te bouwen deze driver vangt DX calls op en vertaalt ze in hardware calls naar de GPU die vrijwel alleen bekend zijn bij de IHV(in windows in ieder geval).

Voor OGL weet ik dit echter niet maar ik vermoed dat er een zelfde process tussen zit.

ex-FE Programmer: CMR:DiRT2,DiRT 3, DiRT Showdown, GRID 2, Mad Max


Acties:
  • 0 Henk 'm!

  • MLM
  • Registratie: Juli 2004
  • Laatst online: 12-03-2023

MLM

aka Zolo

<snip>

Hoe dan ook, hoe werkt OpenGL en DirectX precies?
Het zijn beide APIs die dienen als hardware abstraction. Op die manier kan je zeggen "ik wil 10325 triangles met deze coordinaten en die texture daar tekenen", en de API zorgt ervoor dat dat daadwerkelijk gebeurd. Daarvoor praat de API met de GPU driver, en de GPU driver met de GPU.
Wat sturen deze precies aan?
Zoals ik hierboven al zei, indirect, de GPU.
Is het mogelijk om zelf een alternatieve library te schrijven wat deze onderliggende API's aanstuurt?
Theoretisch vast wel, maar praktisch, nee. Immers, DX en OGL zijn van de drivers afhankelijk, die worden ontwikkelt door de hardware fabrikanten. Jij kan wel zeggen "hier is een API, praat er maar tegen", maar dat betekent niet dat nVidia dan maar besluit om voor jouw API een driver te gaan bouwen.
Zo ja, waarom zijn er dan alleen maar 2 grote libraries: OpenGL en DirectX?
Omdat drivers bouwen een ingewikkeld en duur proces is, en de hardware fabrikanten gaan dat niet voor de lol doen :)
Kan overigens niet wachten om tesselation uit te proberen :D
Hopelijk werkt het op mijn 9600M GT, maar ik geef het weinig kans.
Dat kon al even met DX11. Jouw GPU ondersteunt geen hardware tesselation in elk geval, dus dat gaat em niet worden :) (immers, het is geen DX11-compatible kaart)

-niks-


Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 01-08 10:05
MLM schreef op vrijdag 12 maart 2010 @ 19:49:
[...]

Het zijn beide APIs die dienen als hardware abstraction. Op die manier kan je zeggen "ik wil 10325 triangles met deze coordinaten en die texture daar tekenen", en de API zorgt ervoor dat dat daadwerkelijk gebeurd. Daarvoor praat de API met de GPU driver, en de GPU driver met de GPU.

[...]
Zoals ik hierboven al zei, indirect, de GPU.

[...]
Theoretisch vast wel, maar praktisch, nee. Immers, DX en OGL zijn van de drivers afhankelijk, die worden ontwikkelt door de hardware fabrikanten. Jij kan wel zeggen "hier is een API, praat er maar tegen", maar dat betekent niet dat nVidia dan maar besluit om voor jouw API een driver te gaan bouwen.

[...]
Omdat drivers bouwen een ingewikkeld en duur proces is, en de hardware fabrikanten gaan dat niet voor de lol doen :)


[...]

Dat kon al even met DX11. Jouw GPU ondersteunt geen hardware tesselation in elk geval, dus dat gaat em niet worden :) (immers, het is geen DX11-compatible kaart)
Ik doelde ook op tesselation op OpenGL. Ik lees inderdaad nu dat alleen OpenGL 4.0 tesselation ondersteund. (overheen gelezen in artikel) Jammer :P

Maar bedankt voor de info :)
Dat is zo'n beetje wat ik wilde weten.

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 12:40
MLM schreef op vrijdag 12 maart 2010 @ 19:49:
Theoretisch vast wel, maar praktisch, nee. Immers, DX en OGL zijn van de drivers afhankelijk, die worden ontwikkelt door de hardware fabrikanten. Jij kan wel zeggen "hier is een API, praat er maar tegen", maar dat betekent niet dat nVidia dan maar besluit om voor jouw API een driver te gaan bouwen.
Wie is nou van wie afhankelijk? Bepaalt bv Microsoft ihgv DX de functies die vervolgens door de drivers ( zb nVidia ) moet worden geimplementeerd of is het andersom?

En wat houdt dan een "DX11 compatible" kaart in?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 02:44
farlane schreef op vrijdag 12 maart 2010 @ 22:35:
En wat houdt dan een "DX11 compatible" kaart in?
"DX11 compatible" wil weinig meer zeggen dan dat de fabrikant claim enigzins performante DirectX 11 drivers te (zullen) produceren voor die kaart. Prestatiegaranties worden natuurlijk nooit gegeven, maar je mag dan aannemen dat die kaart essentiële features als tesselation en shader model 5 hardwarematig kan versnellen. In die zin is het niet veel anders dan een "Vista-ready laptop"; dat betekent ook weinig meer dan dat de producent vind dat Vista er wel op kan draaien en dat er drivers voor ontwikkeld (zullen) worden.

Overigens is het helemaal niet vanzelfsprekend dat alle features van een bepaalde API versie door een kaart die die API ondersteuend ook door hardware versneld worden. Zo ondersteunen de Intel GMA 9xx kaarten helemaal geen 3D transformaties, maar toch claimt Intel DirectX 9 en OpenGL 1.4 support. In de praktijk betekent dat dat alle geometry processing in software afgehandeld wordt, wat op zich redelijk werkt als je een beetje moderne processor hebt, maar technisch gezien is 't wel dubieus om z'n kaart als DirectX 9-compatible te labelen.
Gamebuster schreef op vrijdag 12 maart 2010 @ 17:34:
Is het mogelijk om zelf een alternatieve library te schrijven wat deze onderliggende API's aanstuurt?
Als je in detail weet hoe de interne interface van elke grafische kaart die je wil ondersteunen werkt, dan zou je dat kunnen doen. Dat zijn dus de interfaces die NVIDIA en ATI gebruiken om hun OpenGL en DirectX drivers te implementeren. De gegevens daarvan zijn echter niet volledig vrij beschikbaar, dus veel succes daarmee. ;)
Zo ja, waarom zijn er dan alleen maar 2 grote libraries: OpenGL en DirectX?
Wat dacht je van PhysX, CUDA, OpenCL, DirectCompute, Stream enzo?

[ Voor 22% gewijzigd door Soultaker op 12-03-2010 23:55 ]


Acties:
  • 0 Henk 'm!

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 18-08 21:31
Microsoft overlegt met een aantal partners (hardware en software) over wat Direct3D zou moeten kunnen, maar Microsoft heeft het laatste woord, dus nvidia/amd/intel/etc zijn afhankelijk van wat MS aan functies in D3D doet. Uit dat overleg kan overigens wel naar voren komen dat een feature er waarschijnlijk gaat komen, dus soms anticiperen hardwarefabrikanten daarop met nieuwe ontwerpen, maar definitieve ondersteuning kan er pas zijn nadat MS een nieuwe Direct3D specificatie heeft geschreven.

Acties:
  • 0 Henk 'm!

  • NC83
  • Registratie: Juni 2007
  • Laatst online: 21-08 21:44
Soultaker schreef op vrijdag 12 maart 2010 @ 23:48:
[...]

"DX11 compatible" wil weinig meer zeggen dan dat de fabrikant claim enigzins performante DirectX 11 drivers te (zullen) produceren voor die kaart. Prestatiegaranties worden natuurlijk nooit gegeven, maar je mag dan aannemen dat die kaart essentiële features als tesselation en shader model 5 hardwarematig kan versnellen. In die zin is het niet veel anders dan een "Vista-ready laptop"; dat betekent ook weinig meer dan dat de producent vind dat Vista er wel op kan draaien en dat er drivers voor ontwikkeld (zullen) worden.

Overigens is het helemaal niet vanzelfsprekend dat alle features van een bepaalde API versie door een kaart die die API ondersteuend ook door hardware versneld worden. Zo ondersteunen de Intel GMA 9xx kaarten helemaal geen 3D transformaties, maar toch claimt Intel DirectX 9 en OpenGL 1.4 support. In de praktijk betekent dat dat alle geometry processing in software afgehandeld wordt, wat op zich redelijk werkt als je een beetje moderne processor hebt, maar technisch gezien is 't wel dubieus om z'n kaart als DirectX 9-compatible te labelen.


[...]

Als je in detail weet hoe de interne interface van elke grafische kaart die je wil ondersteunen werkt, dan zou je dat kunnen doen. Dat zijn dus de interfaces die NVIDIA en ATI gebruiken om hun OpenGL en DirectX drivers te implementeren. De gegevens daarvan zijn echter niet volledig vrij beschikbaar, dus veel succes daarmee. ;)


[...]

Wat dacht je van PhysX, CUDA, OpenCL, DirectCompute, Stream enzo?
Een DX11 of DX10 kaart moet alle functies in de DX specificatie ondersteunen anders heb je met een DX9 kaart te maken met een aantal features. MS stelt sinds DX10 de specificatie op, en de kaart moet al deze features in hardware onderstuenen om DX10 of DX11 kaart te worden genoemt. In OGL is dit anders omdat je daar hardware dependant extensions hebt en dat is vervelent net als de caps in DX9.

En dat is ook meteen het probleem van OGL ook al zegt de kaart dat het bepaalde features kent, betekent dit nog steeds niet altijd dat ze hardware versneld zijn. In OGL is het zo dat je alle features moet ondersteunen maar dat als een kaart dit niet doet dit door de CPU wordt gedaan.

Voor een DX9 kaart gelden deze regels niet maar sinds DX 10 wel dit is ook de reden waarom MS van de capability bits is afgestapt. Als je een DX 10 kaart hebt ondersteunt deze ook alle DX 10 features in hardware, daarom heb je tegenwoordig(sinds DX11) feature levels in GPUs.

PhysX, CUDA, OpenCL, DirectCompute, Stream
Dit zijn geen grafische API maar een manier om berekeningen op de GPU uit te voeren dat deze met DX en OGL kunnen praten is een ander verhaal.

[ Voor 14% gewijzigd door NC83 op 13-03-2010 03:15 ]

ex-FE Programmer: CMR:DiRT2,DiRT 3, DiRT Showdown, GRID 2, Mad Max


Acties:
  • 0 Henk 'm!

  • MLM
  • Registratie: Juli 2004
  • Laatst online: 12-03-2023

MLM

aka Zolo

Ik wil nog wel even toevoegen dat Microsoft hun specificaties natuurlijk in diepgaand overleg met de hardware fabrikanten vaststelt. Uiteindelijk is het doel van de samenwerking om goed presterende graphics (vooral voor games) mogelijk te maken op de PC. Voor Microsoft is dat voordelig omdat mensen dan Windows aanschaffen, en voor de hardware fabrikanten is dat voordelig omdat mensen dan hun kaarten aanschaffen :)

Het is natuurlijk niet zo dat Microsoft besluit dat DX12 hardwarematig versnelde flux capacitators vereist, als de hardware fabrikanten deze niet kunnen leveren of als deze veel te duur zijn om te fabriceren (omdat dat het marktaandeel DX12 compatible PC's te klein is om (game)development aan te trekken).

En over direct tegen de hardware praten: theoretisch mogelijk, maar zowel nV als AMD geven de specificaties van die interface niet vrij (immers, ze willen zelf de driverontwikkeling in de hand houden). Laatst was de nieuwe nV driver in het nieuws omdat die potentieel kaarten liet verbranden door een bug in de fan-control code van de driver :) Verbrandde kaarten zijn natuurlijk niet goed voor de PR, en als iedere $random_tweaker drivers zou maken dan zou dit veel te veel voorkomen :)

-niks-


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12-09 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

NC83 schreef op zaterdag 13 maart 2010 @ 03:10:
[...]

Een DX11 of DX10 kaart moet alle functies in de DX specificatie ondersteunen anders heb je met een DX9 kaart te maken met een aantal features. MS stelt sinds DX10 de specificatie op, en de kaart moet al deze features in hardware onderstuenen om DX10 of DX11 kaart te worden genoemt.
Dit is niet helemaal correct. De API's hebben een basis featureset waaraan hardware moet voldoen om compatible te zijn. Hoewel die featureset sinds DX10 idd veel stricter is geworden, is het niet zo dat een kaart álle features hoeft te ondersteunen. Denk bijvoorbeeld aan exotische textureformaten of verschillende limieten (texture groottes, aantal instructies, etc). De CAPS zijn er in principe ook nog steeds, al zul je daar als developer veel minder naar hoeven kijken. DX11 heeft trouwens net als OpenGL profiles, waardoor je de DX11 API kunt gebruiken op een DX10 kaart.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Gamebuster
  • Registratie: Juli 2007
  • Laatst online: 01-08 10:05
Soultaker schreef op vrijdag 12 maart 2010 @ 23:48:
Wat dacht je van PhysX, CUDA, OpenCL, DirectCompute, Stream enzo?
DIe ken ik wel, maar dat zijn geen grafische API's, al kan je ze natuurlijk wel gebruiken voor grafische berekeningen. :)

Let op: Mijn post bevat meningen, aannames of onwaarheden


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 12-09 15:22

.oisyn

Moderator Devschuur®

Demotivational Speaker

Het punt was dat ze precies dezelfde hardware aansturen :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1