Gå til innhold

Hvorfor bruke OpenGL i stedet for Direct3D?


Anbefalte innlegg

Videoannonse
Annonse

Denne artikkelen er nettopp fra utviklere som er oppgitt over hvor mye feilinformasjon som er i sirkulasjon. Det er nevnt at mange firma ser på DirectX som billigere fordi en del utviklere er kun opplært i DirectX.

 

At DirectX er billigere eller gir kortere utviklingstid pga. at DirectX er mer enn et grafisk API er en vanlig misforståelse, og det tror jeg du vet veldig godt. OpenGL er konkurrenten til Direct3D. SDL er en konkurrent til DirectX.

Lenke til kommentar

Det kan jo nevnes at OpenGL ikke fikk ARB støtte for geometry shaders før 3.2 (August 2009) mens i Direct3D 10 var det tilgjengelig allerede i 2007.

Direct3D implementerte felles vertex og pixel shaders i 2001, mens OpenGL utviklere måtte vente til versjon 2.0 som dukket opp i 2004 før de hadde ARB standardisert vertex og fragment programs. Samme gjaldt vertex buffer objects som kom i OpenGL 1.5 (2003) som allerede var i Direct3D 8 (2001)

Point sprites: OpenGL 2.0 (2004), Direct3D 8(2001)

 

Så selv om extensions gjør det mulig å implementere funksjonalitet før de blir standardisert, så vil denne funksjonaliteten enten ikke fungere på hardware fra alle leverandører, eller du kan risikere at støtten forsvinner til fordel for andre løsninger.

Eksempelvis kan en kikke på ATI og nVidia spesifikke implementasjoner av vertex og fragment programs før OpenGL 2.0 som fungerte vidt forskjellig, og en måtte regne med å implementere begge, eller ingen av dem.

 

Det har konsekvent vært misnøye med OpenGL nettopp fordi ting tar tid for ARB. Eksempelvis burde geometry shaders vært oppgradert til ARB i OpenGL 3.0. Men 3.0 viste seg å gjøre langt mindre forskjell enn forventet. Selv om 3.0 krevde samme hardware som Direct3D 10, så forble geometry shaders en vanlig extension helt frem til OpenGL 3.2 hvor den ble promotert til ARB.

 

Ved siden av det, kan det nevnes at Direct3D også har mattefunksjoner, mesh-, tekstur-, bone- og matriseklasser implementert fra før, noe en må kikke etter i tredjepartsbiblioteker eller skrive selv i OpenGL.

 

Jeg driver mye med OpenGL utvikling (Glorg) og jeg liker OpenGL, men jeg synes ikke denne artikkelen akkurat viste begger sider av saken veldig godt. Det er ikke kun MS propaganda som fører til at folk bruker DirectX.

 

Før OpenGL fikk framebuffer objects, var det heller ingen enkel måte å tegne 2D grafikk på toppen. Dette førte til den noe katastrofalt dårlige GLU implementasjonen for å tegne tekst. I Direct3D 8 kunne en bruke GDI, GDI+ eller DirectDraw for å tegne grafikk (som font rendering med unicode støtte og systembasert anti-alias uten å kreve multisampling) på toppen av hver frame.

 

Primært ligger OpenGL sin fordel i at alle operativsystem er støttet, og API-et er tilgjengelig i langt større grad i andre programmeringsspråk enn C++. Nyeste OpenGL er også støttet i Windows XP og eldre, mens DirectX 10 og 11 krever Vista eller nyere.

En ulempe med Direct3D er også at det ikke har noe tilsvarende extension systemet som OpenGL har.

Lenke til kommentar
Det kan jo nevnes at OpenGL ikke fikk ARB støtte for geometry shaders før 3.2 (August 2009) mens i Direct3D 10 var det tilgjengelig allerede i 2007.
Dette er trolig den største mangelen de siste årene. Nvidia har på sin side hatt støtte for geometry shaders siden 8000-serien kom i 2006.

Direct3D implementerte felles vertex og pixel shaders i 2001, mens OpenGL utviklere måtte vente til versjon 2.0 som dukket opp i 2004 før de hadde ARB standardisert vertex og fragment programs.
Ikke korrekt, OpenGL 2.0 gav støtte for GLSL 1.10. GLSL var standardisert før det, men var et tillegg som ikke var obligatorisk (selv om både ATI og nVidia støttet det).

 

OpenGL i peiroden 1.4 - 3.1 har vært rotete i større og mindre grad, spesielt rundt 1.5 var ting ganske uoversiktlig med et hav av externsions. Men dette er i all hovedsak ryddet opp i idag, så dette er nok et argument som tilhører fortiden.

 

OpenGL er nå inne i en revisjons-sykel (fint nytt ord) på omtrent et halvår, og ATI har kommet seg veldig når det gjelder OpenGL-støtte. Som regel kommer de med nVidias nye extensions noen få måneder etter, og tilsvarende med nVidia. Nå er det mye mer samarbeid enn det har vært i lengre tid, selv om nVidia absolutt tar det største taket.

 

 

Så selv om extensions gjør det mulig å implementere funksjonalitet før de blir standardisert, så vil denne funksjonaliteten enten ikke fungere på hardware fra alle leverandører, eller du kan risikere at støtten forsvinner til fordel for andre løsninger.

Eksempelvis kan en kikke på ATI og nVidia spesifikke implementasjoner av vertex og fragment programs før OpenGL 2.0 som fungerte vidt forskjellig, og en måtte regne med å implementere begge, eller ingen av dem.

For det første er ARB-extensions allerede standardisert, selv om de ikke nødvendigvis kommer med i den offisielle OpenGL-spesifikasjonen. Spesifikasjonen er et minstekrav for å ha OpenGL-støtte. Selv den nyeste 3.2-spesifikasjonen inneholder mange ARB-extensions som er frivillige. Og nå for tiden godkjennes nye ARB-extensions stadig vekk, og det er ikke et problem for produsentene å få det godkjent.

 

Og når det gjelder ny funksjonalitet for nyere maskinvare så er det ikke noen overraskelse at Intel og Via ikke er raske med implementasjon, og deres GPUer er ikke i stand til å dra nevneverdig nytte av mange av disse utvidelsene. Og når alle som spiller med kraftige skjermkort bruker enten AMD/ATI eller nVidia, så holder det at de to har implementert det, noe som de har som vane nå om dagene. Så poenget mitt er at rotet som var før er det slutt på nå.

 

Det har konsekvent vært misnøye med OpenGL nettopp fordi ting tar tid for ARB. Eksempelvis burde geometry shaders vært oppgradert til ARB i OpenGL 3.0. Men 3.0 viste seg å gjøre langt mindre forskjell enn forventet. Selv om 3.0 krevde samme hardware som Direct3D 10, så forble geometry shaders en vanlig extension helt frem til OpenGL 3.2 hvor den ble promotert til ARB.
Jeg er enig i at OpenGL 3.0 var skuffende, men i langt mindre grad enn det ble overdrevet lagt frem på f.eks. tom's hardware. Etter min mening burde 3.2 vært den egentlige 3.0, og det er nettopp pga. misnøye at Khronos nå har lagt frem den nye planen for videre utvikling, så dette argumentet er noe som tilhører fortiden.

 

Ved siden av det, kan det nevnes at Direct3D også har mattefunksjoner, mesh-, tekstur-, bone- og matriseklasser implementert fra før, noe en må kikke etter i tredjepartsbiblioteker eller skrive selv i OpenGL.
Det finnes et hav av slike biblioteker å velge i, det er ikke et reelt problem.

 

Jeg driver mye med OpenGL utvikling (Glorg) og jeg liker OpenGL, men jeg synes ikke denne artikkelen akkurat viste begger sider av saken veldig godt. Det er ikke kun MS propaganda som fører til at folk bruker DirectX.
Som sagt nevner artikkelen både at det har vært driverstøtte og påståtte lavere utviklingskostnader(som kan stemme i noen tilfeller) med DirectX. Artikkelen legger frem propagandaen fra MS som et av flere punkter. Det virker som du blir litt blendet av denne delen av artikkelen, jeg foreslår at du leser igjen.

 

Primært ligger OpenGL sin fordel i at alle operativsystem er støttet, og API-et er tilgjengelig i langt større grad i andre programmeringsspråk enn C++. Nyeste OpenGL er også støttet i Windows XP og eldre, mens DirectX 10 og 11 krever Vista eller nyere.

En ulempe med Direct3D er også at det ikke har noe tilsvarende extension systemet som OpenGL har.

Sant det. Når over halve kundemassen til spill bruke XP, og i tillegg en god del bruker GNU/Linux eller Mac OS X, så er det åpenbart at det er verdt å inkludere støtte for denne kundegruppen. I tillegg så er det i dag mindre kostnader å legge til støtte for det andre APIet siden forskjellene mellom OpenGL og Direct3D er langt mindre. De tilbyr i all hovedsak samme funksjonalitet, og i dag er programmert pipeline en stor del av grafikk-programmeringen, og i fremtiden blir det nok ennå større. HLSL kan konverteres til GLSL, og Cg kan konverteres til begge. Både AMD/ATI tilbyr utviklingsverktøy for shadere som støtter begge API, så saken er at å legge til støtte for begge API er ikke en så stor utgift som det var før i tiden.

 

På sin side er også DirectX trege med enkelte nye funksjoner. I OpenGL har tessellation vært tilgjengelig i over tre år, og både nVidia og ATI har demonstrert hvordan det virker. Grunnen til at det ikke har vært mye brukt er trolig det negative fokuset som OpenGL fikk i den tidsperioden, og at maskinvaren på det tidspunktet egentlig var for svak til å dra serlig nytte av det. Men som du ser, OpenGL er på mange områder ledende i utviklingen, og får som regel støtte for ny funksjonalitet så snart den er tilgjengelig. Med over tre år på å bli kjent med tessellation, så er det mer enn nok tid til å ta det i bruk.

 

Bare så det er sagt, OpenGL er på ingen måte perfekt. Men de aller fleste argumentene som brukes mot OpenGL har gått ut på dato, og OpenGL er i dag et moderne API med mer funksjonalitet enn Direct3D, og som omtrent hver måned kommer med ny funksjonalitet. Khronos har besluttet at OpenGL skal revideres oftere (omtrent hver 6. måned), og at fokuset er mer på kontinuerlig utvikling enn store nye spesifikasjoner som endrer på mye.

 

Akkurat for øyeblikket er jeg veldig spent på hva Fermi har av ny funksjonalitet og hva nVidia putter opp i godteskålen. Dette er en stor endring av arkitektur, så det er godt mulig at nVidia har lagt inn støtte for "det neste store" innen grafikkfronten.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...