efikkan Skrevet 9. april 2013 Del Skrevet 9. april 2013 (endret) På dette tidspunktet hadde også Direct3D fått inn noe som noen år senere dukket opp i OpenGL: buffer objects. For å lage et Vertex Array i Direct3D kunne du allerede gi driveren hint om hvor minne skulle plasseres; Host eller GPU. Dette manglet foreløpig i OpenGL som noe annet enn en nVidia extension kalt nv_vertex_array_range. Her igjen for å få denne funksjonaliteten måtte man skrive spesifikk kode for kortene det skulle kjøre på. Direct3D fikk overtaket. I 2002 dukket Direct3D 9.0 opp. Denne støttet shader-programmering med et høynivåspråk opp som var et resultat av samarbeid mellom nVidia og Microsoft. Samarbeidet ble kalt C For graphics, og for nVidia ble dette til Cg, men for microsoft ble dette til HLSL. To år senere, altså 2004, dukket OpenGL opp i versjon 2.0 som hadde samme støtten, men med GLSL. De lå altså et godt stykke etter Direct3D med å standardisere ting, og dette var før Khronos tok over (som skjedde i 2006). Men la oss spole frem til dette. I 2006 tok Khronos over, og arbeidet med OpenGL 3.0 startet. Dette var tenkt å være en utvikling av OpenGL der gammelt skrap som immediate modellen fra OpenGL 1.0 og 1.1 skulle vekk til fordel for en ren shader-pipeline. Dette skulle bli ferdig i 2007, men etter lang stillhet (over et år) så skulle OpenGL 3.0 dukke opp, men uten de radikale endringene som var forespeilet. Det var en utvikling av OpenGL i samme retning med før med unntak av en deprecation modell. Dessverre for OpenGL, så hadde ikke Direct3D ligget på latsiden i mellomtiden, og Direct3D 10 så dagens lys (2007). Dette la til en ny shader: geometry shader, som manglet i OpenGL som noe annet enn en extension som kanskje skulle standardiseres av ARB senere. Dette skjedde i OpenGL 3.2, i 2009. Direct3D hadde blitt forbedret på mange måter, med et nytt API som var enklere å bruke, og med en hel rekke ny funksjonalitet. Det samme gjentok seg med OpenGL 4.2 (2011) som la til tesselation shaders, til tross for at Direct3D allerede hadde hatt det i Direct3D 11 siden 2008. Rett opp til nå har dette vært et mønster med OpenGL. Det har all funksjonalitet som Direct3D dersom du vil skrive koden for de forskjellige leverandørene eller bruke extensions som kanskje aldri blir standardisert. GLSL 1.0-standarden kom til OpenGL 1.4 fra 2002, men var en frivillig komponent frem til versjon 2.0 av OpenGL. Før dette hadde både Nvidia og ATI assembly-shadere. OpenGL 3.0 "Long Peaks" vurderte en innkapsling i en objektmodell ala Direct3D, som mange utviklere fra den plattformen foretrekte. Personlig er jeg glad at dette ikke ble gjennomført, siden utviklere i dag står fritt til om de vil innkapsle eller ikke. OpenGL har også den store fordelen av at det kan anvendes i C uten videre, og dette er viktig for mange av de store OpenGL-brukerne, CAD osv. Det finnes en rekke rammeverk for innkapsling for den som ønsker slikt. Det er et par ting jeg har innvendinger mot i OpenGL 3.0 og 3.1, noen småting som mangler og rotet med OpenGL-profiler. Å ha muligheten til å bruke både shadere og fixed shading kombinert er en enorm fordel ved utvikling, og gjør at det er enkelt å få testet noe ut på skjermen uten å skrive en shader for det. En rekke CADs er også avhengig av dette. Det var stort sett fra OpenGL 2.1 til 3.1 at OpenGL hang etter, fra versjon 4.0 har OpenGL stort sett ledet an på en rekke områder. Tessellation shaders (som Direct3D 11) kom i versjon 4.0 av OpenGL, ikke versjon 4.2. Jeg vil også minne om at både Nvidia og AMD hadde tessellation som extensions siden GeForce 8000/ Radeon 2000, hvorav AMDs faktisk var veldig avansert. Nytteverdien av geometry shaders kan diskuteres, som er noe begrenset uten tessellation. Men det er et viktig aspekt i valg av OpenGL eller Direct3D, nemlig at OpenGL er bedre støttet på windows XP. XP er fremdeles en betydelig markedsandel, og avhengig av spilltype kan disse faktisk være en aktuell kundegruppe. Hvis valget står mellom en Direct3D 9-pipeline og en Direct3D 10-/11- pipeline eller én OpenGL-pipeline, så er der gode argumenter i favør av OpenGL. Og da har vi ikke tatt Linux, BSD eller OS X i betraktning en gang. BTW: Husker du at MS faktisk var med på å utforme OpenGL på et tidspunkt? Endret 9. april 2013 av efikkan Lenke til kommentar
GeirGrusom Skrevet 9. april 2013 Del Skrevet 9. april 2013 GLSL 1.0-standarden kom til OpenGL 1.4 fra 2002, men var en frivillig komponent frem til versjon 2.0 av OpenGL. Før dette hadde både Nvidia og ATI assembly-shadere. GLSL var vel opprinnelig en 3dlabs utvidelse som senere ble ARB-et. Assembly-shaderne til nVidia og ATI var komplett forskjellige, da de var designet for hver respektive produsent, noe som var i motsetning til Direct3D 8.1 sin Shader model 1.1 som tillot at en assembly shader ble kompilert til både ATI og nVidia kort, så du skrev shaderen én gang for alle. Dette er dog historie, men det har vært en typisk pekepin på hvordan OpenGL sitt extension-system har fungert. OpenGL 3.0 "Long Peaks" vurderte en innkapsling i en objektmodell ala Direct3D, som mange utviklere fra den plattformen foretrekte. Personlig er jeg glad at dette ikke ble gjennomført, siden utviklere i dag står fritt til om de vil innkapsle eller ikke. OpenGL har også den store fordelen av at det kan anvendes i C uten videre, og dette er viktig for mange av de store OpenGL-brukerne, CAD osv. Det finnes en rekke rammeverk for innkapsling for den som ønsker slikt. Det er et par ting jeg har innvendinger mot i OpenGL 3.0 og 3.1, noen småting som mangler og rotet med OpenGL-profiler. Å ha muligheten til å bruke både shadere og fixed shading kombinert er en enorm fordel ved utvikling, og gjør at det er enkelt å få testet noe ut på skjermen uten å skrive en shader for det. En rekke CADs er også avhengig av dette. Jeg har irritert meg litt over objektmodellen i OpenGL. Den kunne vært mer uniform. Hvorfor egentlig skille mellom element-buffer og array-buffer? Og det at teksturer har en helt absurd oppbygning der all data kan muteres til enhver tid burde de gjort noe med. teksturer burde vært et buffer som alt annet hvor størrelsen og beskrivelse ikke kan muteres, kun innhold. Dette var det jo planlagt å gjøre noe med, men i stedet ble miljøet møtt med stillhet i lang tid etterfulgt av en "Radikal endring" som i virkeligheten kan kalles "business as usual". Det var stort sett fra OpenGL 2.1 til 3.1 at OpenGL hang etter, fra versjon 4.0 har OpenGL stort sett ledet an på en rekke områder. Tessellation shaders (som Direct3D 11) kom i versjon 4.0 av OpenGL, ikke versjon 4.2. Jeg vil også minne om at både Nvidia og AMD hadde tessellation som extensions siden GeForce 8000/ Radeon 2000, hvorav AMDs faktisk var veldig avansert. Nytteverdien av geometry shaders kan diskuteres, som er noe begrenset uten tessellation. Ja, riktig. Tesselation var fra 4.0 som kom i 2010. Geometry shader er fin til mange ting synes jeg, men det er en litt annen diskusjon. Problemet med extensions er nettopp det at man må gjøre sammen jobben to ganger dersom det er to aktører på markedet. Selv var jeg stor fan av NV_radial_distance_fog, men det funket jo bare på nVidia-kort. Men det er et viktig aspekt i valg av OpenGL eller Direct3D, nemlig at OpenGL er bedre støttet på windows XP. XP er fremdeles en betydelig markedsandel, og avhengig av spilltype kan disse faktisk være en aktuell kundegruppe. Hvis valget står mellom en Direct3D 9-pipeline og en Direct3D 10-/11- pipeline eller én OpenGL-pipeline, så er der gode argumenter i favør av OpenGL. Og da har vi ikke tatt Linux, BSD eller OS X i betraktning en gang. Ja, 39.9% hvis vi skal tro en fremside artikkel. Men Linux, BSD og OSX stiller totalt med 12%-ish av markedet hvor OS X står for 10%. Litt off-topic, OpenAL har jo også i utgangspunktet et argument her, fordi Windows Vista innførte også en software-only stack for audio. DirectSound reverterte til software stereo i Windows Vista av en eller annen grunn, og skal man ha hardware aksellerert lyd må man bruke OpenAL i Vista/7/8. BTW: Husker du at MS faktisk var med på å utforme OpenGL på et tidspunkt? Jepp. MS var med i ARB frem til...2003? Noe slikt ihvertfall. De var jo tungt investert i OpenGL tidligere, og det var et slagsargument for Windows NT at OpenGL var tett integrert. 1 Lenke til kommentar
klakkelakk Skrevet 9. april 2013 Del Skrevet 9. april 2013 DirectX er den største dritten noensinne oppfunnet Hadde produsentene gått for OpenGL/CL/etc(noe enkelte gjorde i begynnelsen), så hadde mac & linux vært bedre spillplatformer enn Windows. Hadde heller ikke vært knyttet til Windows versjon for hvilken DX versjon du kan bruke. Derfor er alt på DX9. Derfor har utviklingen for Pcer og DirectX har gått svært tregt de siste årene. Noen har vært smarte og lagt ut patcher. LA Noir ble patchet til DX11(du kan velge DX9) og ga mye bedre opplevelse. Lenke til kommentar
Spragleknas Skrevet 13. april 2013 Del Skrevet 13. april 2013 Ser flere har kommentert det, men svak av HW.no å ikke forklare hva DirectX er korrekt. Nærmer seg Dagbladet/VG nivå ... 1 Lenke til kommentar
efikkan Skrevet 13. april 2013 Del Skrevet 13. april 2013 Det er tilgivelig at de blander DirectX og Direct3D i farten, men det er langt mer kritikkverdig at de ikke klarte å forstå innholdet i kilden i det hele tatt. Det blir ikke slutt på nye revisjoner av DirectX med det første, men AMD ønsker å fokusere på egne utvidelser slik som Tress og PRT(så langt kun OpenGL), Nvidia har også sine egne utvidelser som nevnt bindless graphics/textures, og en haug med andre utvidelser. Nvidias utvidelser er så langt forbeholdt OpenGL. Det er ikke bare OpenGL som er for trege til å iterere, DirectX er også avgrensende for innovasjon. 1 Lenke til kommentar
ancient_scars Skrevet 19. april 2013 Del Skrevet 19. april 2013 Her driter du på draget; OpenGL er en åpen spesifikasjon, det er ikke det samme som en åpen implementasjon. Du har rett i at jeg tok feil, men drite gjør jeg på do. Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå