OpenGL

OpenGL ES 3
Generell informasjon
programtype api
Forfatter Silisium grafikk
utvikler Kronos Group
Første utgivelse 01 i 1992
Tillatelse Diverse
Teknisk informasjon
Planlagt inn C
Versjoner
Siste stabile versjon 4.6 [ 1 ] ​( 31. juli 2017 (5 år, 2 måneder og 17 dager))
Utgivelser
IRISGL og PHIGSOpenGL ES 3vulkan
Linker
Offesiell nettside

OpenGL ( Open Graphics Library) er en standardspesifikasjon som definerer en flerspråklig plattform - API for skriving av applikasjoner som produserer 2D- og 3D-grafikk . Grensesnittet består av over 250 forskjellige funksjoner som kan brukes til å tegne komplekse 3D-scener fra enkle geometriske primitiver som punkter, linjer og trekanter. Den ble opprinnelig utviklet av Silicon Graphics Inc. ( SGI ) i 1992 [ 2 ] og er mye brukt i CAD , virtuell virkelighet , vitenskapelig gjengivelse, informasjonsvisualisering og flysimulering . Det brukes også i videospillutvikling , hvor det konkurrerer med Direct3DMicrosoft Windows -plattformer .

Spesifikasjon

I utgangspunktet er OpenGL en spesifikasjon, det vil si et dokument som beskriver et sett med funksjoner og den nøyaktige oppførselen de må ha. Med utgangspunkt i det , lager maskinvareprodusenter implementeringer , som er biblioteker med funksjoner som samsvarer med kravene i spesifikasjonen, og bruker maskinvareakselerasjon når det er mulig. Slike implementeringer må bestå samsvarstester for at produsentene skal kvalifisere implementeringen som OpenGL-kompatibel og bruke den offisielle OpenGL-logoen.

Det er effektive implementeringer av OpenGL for Mac OS , Microsoft Windows , GNU/Linux , forskjellige Unix -plattformer og PlayStation 4 . Det er også flere programvareimplementeringer som lar OpenGL-avhengige applikasjoner kjøre uten støtte for maskinvareakselerasjon. Bemerkelsesverdig er den gratis programvaren / åpen kildekode Mesa 3D - biblioteket , et fullt OpenGL-kompatibelt, ikke-maskinvareakselerert grafikk-API. For å unngå lisenskostnadene som kreves for å bli formelt kalt en implementering av OpenGL, hevder det imidlertid å være et veldig likt API .

OpenGL-spesifikasjonen ble gjennomgått av OpenGL Architecture Review Board ( ARB ), grunnlagt i 1992 . ARB var sammensatt av en gruppe selskaper som var interessert i å lage en konsistent og allment tilgjengelig API. Microsoft , et av grunnleggerne, forlot prosjektet i 2003 .

21. september 2006 ble det kunngjort at kontrollen over OpenGL ville gå fra ARB til Khronos Group . [ 3 ] Dette var ment å forbedre markedsføringen av OpenGL og fjerne barrierene mellom OpenGL-utvikling og OpenGL ES . [ 4 ] ARB ble i Khronos OpenGL ARB Working Group . [ 5 ] Khronos-undergruppen som administrerer OpenGL-spesifikasjonen kalles OpenGL ARB Working Group . [ 6 ] For en liste over medlemmene som utgjør OpenGL ARB-arbeidsgruppen, se delen Medlemmer av Khronos-gruppen . Det store antallet selskaper med ulike interesser som har gått gjennom både det gamle ARB og det nåværende konsernet har gjort OpenGL til en generell API med et bredt spekter av muligheter.

Mark Segal og Kurt Akeley var forfatterne av den originale OpenGL-spesifikasjonen. Chris Frazier var redaktør for versjon 1.1. Jon Leech har redigert versjoner fra 1.2 til nåværende 3.0. [ 7 ]

Design

OpenGL har to viktige formål:

Den grunnleggende operasjonen til OpenGL er å akseptere primitiver som punkter, linjer og polygoner, og konvertere dem til piksler. Denne prosessen utføres av en grafisk rørledning kjent som OpenGL State Machine . [ 8 ] De fleste OpenGL-kommandoer gir enten primitiver til grafikkpipelinen eller konfigurerer hvordan pipelinen behandler disse primitivene. Inntil versjon 2.0 dukket opp, utførte hvert trinn i rørledningen en forhåndsbestemt funksjon, noe som resulterte i liten konfigurerbarhet. Fra og med versjon 2.0 er noen trinn programmerbare ved hjelp av et programmeringsspråk kalt GLSL .

OpenGL er et lavt nivå, prosedyrebasert API som krever at programmereren dikterer de nøyaktige trinnene som kreves for å gjengi en scene. Dette er i motsetning til beskrivende APIer, der en programmerer bare skal beskrive scenen og kan la biblioteket kontrollere detaljene for å gjengi den. OpenGLs lavnivådesign krever at programmerere har en dyp forståelse av grafikkpipelinen, i retur for å gi dem friheten til å implementere nye grafikkalgoritmer.

OpenGL har påvirket utviklingen av grafikkort, og fremmet et grunnleggende funksjonalitetsnivå som nå er vanlig i kommersiell maskinvare; Noen av disse bidragene er:

En kort beskrivelse av prosessen i den grafiske pipeline kan være: [ 9 ]

  1. Evaluering, hvis aktuelt, av polynomfunksjoner som definerer visse innganger, for eksempel NURBS-overflater , tilnærmede kurver og overflategeometri.
  2. Vertex-operasjoner, transformere dem, belyse dem i henhold til deres materiale og kutte ut ikke-synlige deler av scenen for å produsere et synsvolum.
  3. Rasterisering, eller konvertering av tidligere informasjon til piksler. Polygonene er representert med passende farge ved bruk av interpolasjonsalgoritmer.
  4. Operasjoner etter fragmenter eller segmenter, for eksempel oppdateringer i henhold til kommende eller allerede lagrede verdier av dybde og fargekombinasjoner, blant annet.
  5. Til slutt blir fragmentene dumpet inn i Frame-bufferen .

Mange nåværende grafikkort gir mer funksjonalitet enn det grunnleggende som er diskutert her, men de nye funksjonene er generelt forbedringer av denne grunnleggende rørledningen i stedet for revolusjonerende endringer i den.

Eksempel

Merk: Pass på, dette eksemplet er kun gyldig med OpenGL 2.1 og tidligere versjoner. Den gjør mye bruk av for tiden utdaterte funksjoner.

Først tømmer vi fargebufferen for å starte på et svart lerret :

glClear ( GL_COLOR_BUFFER_BIT );

Modelview- arrayen er satt , som kontrollerer posisjonen til kameraet i forhold til primitivene vi gjengir. Vi setter den tilbake 3 enheter på Z -aksen , og lar den peke mot opprinnelsen:

glMatrixMode ( GL_MODELVIEW ); /* Array-kommandoer vil endre ''modelview'' */ glLoadIdentity (); /* Initialiser ''modelview'' */ glTranslatef ( 0 , 0 , -3 ); /* Flytt 3 enheter i Z-aksen */

Projeksjonsmatrisen styrer perspektivet brukt på primitivene ; brukes på lignende måte som ovenfor:

glMatrixMode ( GL_PROJECTION ); /* Matrisekommandoer vil endre ''projeksjon'' */ glLoadIdentity (); /* Initialiser ''projeksjon'' */ glFrustum ( -1 , 1 , -1 , 1 , 1 , 1000 ); /* Bruk en perspektivprojeksjon */

Til slutt tegnes en polygon (en grønn firkant orientert i XY -planet):

glBegin ( GL_POLYGON ); /* Start av polygon */ glColor3f ( 0 , 1 , 0 ); /* Sett gjeldende farge til grønn */ glVertex3f ( -1 , -1 , 0 ); /* Sett et toppunkt */ glVertex3f ( -1 , 1 , 0 ); /* Sett et toppunkt */ glVertex3f ( 1 , 1 , 0 ); /* Sett et toppunkt */ glVertex3f ( 1 , -1 , 0 ); /* Sett et toppunkt */ glEnd (); /* Slutt på polygon */

Historikk

1980 -tallet var det en reell utfordring for utviklere å utvikle programvare som var kompatibel med et bredt spekter av grafisk maskinvare. Du måtte forholde deg til svært forskjellige grensesnitt og skrive spesifikke drivere for hver type maskinvare, noe som var veldig dyrt; derfor ble team av programmerere satt ut for å få fart på utviklingen. Siden hvert team jobbet separat med sine grensesnitt, ble det produsert mye overflødig kode. I tillegg var det en kostbar prosess, så flere innovative grupper tok utfordringen med å finne en bedre metode.

begynnelsen av 1990-tallet var SGI en referansegruppe innen 3D-grafikk for arbeidsstasjoner. Hans var IRIS GL API , [ 10 ] ansett for å være i forkant av feltet og de facto-standarden, formørkelse av PHIGS , basert på åpne standarder. IRIS GL ble ansett som enklere å bruke, og viktigst av alt, den støttet gjengivelse i umiddelbar modus . Videre ble PHIGS, bortsett fra den økte vanskelighetsgraden, ansett som dårligere enn IRIS GL når det gjelder funksjonalitet og kapasitet.

SGIs konkurranse ( Sun Microsystems , Hewlett-Packard og IBM , blant andre) var i stand til å bringe PHIGS standard-kompatibel 3D-maskinvare til markedet via utvidelser. Dette reduserte SGIs markedsandel ettersom ulike tilbydere kom inn på markedet. Derfor, i et forsøk på å styrke sin innflytelse i markedet, bestemte SGI seg for å gjøre IRIS GL-standarden til en åpen standard.

SGI bemerket at IRIS GL API ikke kunne være åpen kildekode på grunn av lisensiering og patentkonflikter; den inneholdt også funksjoner som ikke er relevante for 3D-grafikk, som APIer for vinduer, tastatur eller mus (delvis fordi den ble utviklet før X Window System eller Suns NeWS -systemer dukket opp). Etter hvert som markedsstøtten for den nye standarden ble modnet, var det ment å beholde de gamle klientene ved å legge til biblioteker som Iris Inventor eller Iris Performer.

Resultatet av alt det ovennevnte var utgivelsen av OpenGL-standarden.

Noen av prestasjonene som ble oppnådd var:

  • Standardiser tilgang til maskinvare.
  • Overføre til produsenter ansvaret for utvikling av grensesnitt mot maskinvaren.
  • Deleger funksjoner for Windows til operativsystemet.

Med variasjonen av grafikkmaskinvare der ute, hadde det en stor effekt å få alle til å snakke samme språk, og ga programvareutviklere en plattform på høyt nivå å jobbe på.

I 1992 [ 11 ] ledet SGI opprettelsen av OpenGL Architecture Review Board ( OpenGL ARB ) , en gruppe selskaper som skulle opprettholde og utvide OpenGL-spesifikasjonen i årene som kommer. OpenGL utviklet seg fra IRIS GL, og overkom problemet med maskinvareavhengighet ved å tilby programvareemulering for funksjoner som ikke støttes av eksisterende maskinvare. Dermed kan applikasjoner bruke avansert grafikk på systemer med relativt lavt strømforbruk.

I 1994 vurderte SGI å gi ut et produkt kalt OpenGL++ , som inkluderte ting som en scene-graf API (antagelig basert på Performer-teknologi). Denne spesifikasjonen ble avslørt til noen få interesserte grupper, men dukket aldri til slutt opp som et produkt. [ 12 ]

I 1995 ga Microsoft ut Direct3D , som skulle bli OpenGLs hovedkonkurrent. Den 17. desember 1997 [ 13 ] startet Microsoft og SGI Fahrenheit -prosjektet , et samarbeid med mål om å forene OpenGL- og Direct3D-grensesnittene (og også legge til en scene-graf API ). I 1998 ville han bli med i Hewlett-Packard-prosjektet. [ 14 ] Til tross for å ha en lovende start med å standardisere 3D-grafikk-APIer, på grunn av økonomiske begrensninger på SGI og en generell mangel på industristøtte, ble den til slutt forlatt i 1999 . [ 15 ]

GDC 2015 kunngjorde Khronos Group etterfølgeren API til OpenGL, kalt Vulkan . [ 16 ]​ [ 17 ]​ [ 18 ] Det ble opprinnelig introdusert av Khronos som " neste generasjons OpenGL -initiativ", men navnet ble senere droppet, noe som etterlot Vulkan som definitivt. [ 19 ] Vulkan er basert på Mantle , et annet AMD - selskaps API , hvis kode ble gitt til Khronos med den hensikt å generere en åpen standard som ligner på OpenGL, men på et lavt nivå. [ 16 ]​ [ 20 ]​ [ 21 ]​ [ 22 ]​ [ 23 ]​ [ 24 ]

Versjoner

OpenGL 1.0

Publisert januar 1992.
Den første OpenGL-spesifikasjonen ble publisert av Mark Segal og Kurt Akeley.

OpenGL 1.1

Utgitt januar 1997.
OpenGL 1.1 fokuserte på støtte for teksturer og teksturformater på GPU-maskinvare.
Støttede grafikkort: alle

Utvidelse utvidelses-id Funksjoner
Vertex Arrays EXT_vertex_array glVertexPointer, glColorPointer, glNormalPointer
Polygonforskyvninger (dybdeforskyvning) EXT_polygon_offset glPolygonOffset
RGBA logisk blanding EXT_blend_logic_op glBlendFunc
Teksturkopi og underkopi EXT_subtexture, EXT_copy_texture glTexSubImage1D/2D/3D
Teksturformater EXT_tekstur RGB, LUMINANS, ALFA, INTENSITET (i glTexImage2D)
Teksturobjekter EXT_tekstur_objekt glGenTextures, glBindTextures
OpenGL 1.2

Utgitt 16. mars 1998.
OpenGL 1.2 fokuserte på volumteksturstøtte, pakkede piksler, normal skalering, sampling av klemt/kanttekstur og bildebehandling.
Støttede grafikkort: Rage 128, Rage 128 GL, Rage XL/XC, Rage 128 Pro, Rage Fury MAXX og alle senere kort.

Utvidelse utvidelses-id Funksjoner
3D volumteksturer GL_EXT_texture3D glTexImage3DEXT
BGRA teksturformat GL_EXT_bgra BGR_EXT, BGRA_EXT (i glTexImage2D)
Pakkede piksler GL_EXT_pakkede_piksler
Normal omskalering GL_EXT_rescale_normal
Separat Specular Color GL_EXT_separate_specular_color
Texture Coord Edge Clamping SGIS_texture_edge_clamp
Tekstur LOD-kontroll SGIS_texture_lod
Tegn rekkeviddeelementer EXT_draw_range_elements glDrawRangeElements
Bildebehandlingsdelsett EXT_color_table, EXT_convolution, SGI_color_matrix, EXT_histogram, EXT_blend_color, EXT_blend_minmax
OpenGL 1.2.1

Utgitt 14. oktober 1998
OpenGL 1.2.1 var en mindre utgivelse utgitt etter OpenGL 1.2 (16. mars 1998) som la til flertekstur, eller teksturenheter, til gjengivelsesrørledningen. Dette gjorde det mulig å kombinere flere teksturer per piksel under rasterisering.
Støttede grafikkort: Radeon, Radeon Mobility, Radeon 7500 Mobility, Radeon 8500, Radeon 9000, Radeon 9200, Radeon 9600, Radeon 9800, GeForce 3, GeForce 4Ti, GeForce FX og alle senere kort

Utvidelse utvidelses-id Funksjoner
Multi-teksturering SGIS_multitekstur glActiveTextureARB, glClientActiveTextureARB
OpenGL 1.3

Utgitt 14. august 2001.
OpenGL 1.3 la til støtte for teksturkubekart, flere teksturer, multi-sampling og teksturenhetskombinasjonsoperasjoner (legg til, bland, dot3, kantklemme).
Støttede grafikkort: Radeon 32/36, Radeon 64/7200, Radeon 7000, Radeo AIW, Radeon 7500, Radeon IGP 320M, Radeon IGP 345M, ES1000, Radeon 8500, Radeon/900, Radeon/90Pro, Radeon/900 & 9000/90Pro, Radeon/90Pro IGP), GeForce 3, GeForce 4Ti, GeForce FX og alle senere kort.

Utvidelse utvidelses-id Funksjoner
Komprimerte teksturer GL_ARB_texture_compression
kubekart GL_EXT_texture_cube_map TEXTURE_CUBE_MAP_EXT
Multi Sampling GL_ARB_multisample
TeksturLegg til GL_ARB_texture_env_add
Kombiner tekstur GL_ARB_texture_env_combine
Teksturpunkt 3 GL_ARB_texture_env_dot3
Teksturkantklemming GL_ARB_texture_border_clamp
Matrix Transponering GL_ARB_transpose_matrix
OpenGL 1.4

Utgitt 24. juli 2002.
OpenGL 1.4 har lagt til støtte for maskinvareskyggelegging, tåkekoordinater, automatisk generering av mipmap og ekstra teksturmoduser.
Støttede grafikkort: Quadro DCC, Quadro4 380 XGL, Quadro4 500XGL, 550XGL, Quadro4 700XGL, 750XGL, 900XGL, 980XGL og alle senere kort.

Utvidelse utvidelses-id Funksjoner
Automatiske Mipmaps SGIS_generate_mipmap
Bland kvadreringsfunksjoner GL_NV_blend_square
Dybde teksturer GL_ARB_depth_texture DEPTH_COMPONENT16/24/32_ARB
Maskinvare Shadowing Z-dybde GL_ARB_shadow COMPARE_R_TO_TEXTURE
Tåkekoordinater GL_EXT_fog_coord
Flere Draw Arrays GL_EXT_multi_draw_arrays
Punktparametere GL_ARB_point_parameter
Sekundær farge GL_EXT_sekundær_farge
Separate blandingsfunksjoner GL_EXT_blend_func_separate
Sjablonger innpakning GL_EXT_stencil_wrap
Tekstur Tverrstang miljømodus GL_ARB_texture_env_crossbar
Tekstur LOD Bias GL_EXT_texture_lod_bias
Tekstur speilet Gjenta GL_ARB_texture_mirrored_repeat
Vindusrasterposisjon GL_ARB_window_pos
OpenGL 1.5

Utgitt 29. juli 2003.
OpenGL 1.5 la til støtte for Vertex Buffer Objects (VBO), okklusjonsspørringer og utvidede skyggefunksjoner.
Støttede grafikkort: Radeon X800, Radeon 9600, Radeon 9700, Radeon 9800, GeForce FX og alle senere kort.

Utvidelse utvidelses-id Funksjoner Mer informasjon
VBOs Vertex Buffer Objects GL_ARB_vertex_buffer_object glBindBufferARB, glBufferDataARB, glGenBuffersARB sonho
Okklusjonsforespørsler GL_ARB_occlusion_query
Utvidede skyggefunksjoner GL_EXT_shadow_funcs

OpenGL 2.0

Utgitt 7. september 2004.
OpenGL 2.0 la til støtte for et ekte GPU-basert assemblerspråk kalt ARB (designet av Architecture Review Board), som skulle bli standarden for toppunkt- og fragmentskyggere. Kort utgitt med OpenGL 2.0 var de første som tilbyr brukerprogrammerbare shaders.
Støttede kort: Radeon 9650, Radeon 9500, Radeon 9500/9550/9600/9700/9800 (Pro, SE, XT), Radeon X1050, Radeon Xpress 200 / 1100, Radeon X300, Radeon X50, Radeon X0, Radeon X0, Radeon X0, Radeon X0, Radeon X0, Radeon X800 (VE, SE, GT, Pro), Radeon X850, Radeon Xpress 1250, Radeon X1200, Radeon X1250, Radeon 2100, Radeon X1300, X1550, X1600, X1650, X1900, X1, X1800, X1, X1, GeForce 6800, Quadro 600, Quadro FX 500, Quadro FX 700, Quadro FX 1000, FX 2000, FX 3000, Quadro FX 1400, Quadro FX 1500, Quadro FX 3450, Quadro FX 3450, Quadro 5 Quadro FX00, S50 Quadro 30X0, S4 Quadro FX00, S50 FX 4 FX00 påfølgende kort.

OpenGL 2.0 ble unnfanget av 3Dlabs for å adressere bekymringer om at OpenGL var stillestående og manglet sterk retning. 3Dlabs foreslo en rekke viktige tillegg til standarden. De fleste av disse ble på det tidspunktet avvist av ARB eller på annen måte ble aldri realisert på den måten som 3Dlabs foreslo. Forslaget hans om et skyggespråk i C -stil ble imidlertid til slutt fullført, noe som resulterte i at den nåværende formuleringen av GLSL (Open GL Shading Language , også sl ang ) prøvde å erstatte, lar programmereren erstatte toppunktet og fragmentet med fast funksjon. pipe med shaders, om enn denne gangen skrevet i et høyt nivå C-lignende språk.

Utformingen av GLSL var kjent for å gi relativt få innrømmelser til begrensningene til maskinvaren som da var tilgjengelig, noe som minnet om den tidligere tradisjonen med OpenGL å sette et ambisiøst, fremtidsrettet mål for 3D-akseleratorer i stedet for bare å følge maskinvarens tilstand. tilgjengelig for øyeblikket. Den siste OpenGL 2.0-spesifikasjonen [ 25 ] inkluderer støtte for GLSL.

Utvidelse utvidelses-id Funksjoner
Shader-objekter GL_ARB_shader_objects
Vertex-programmer GL_ARB_vertex_program glBindProgramARB, glGenProgramsARB
Vertex Shaders (VS) GL_ARB_vertex_shader
Fragment Shaders (FS) GL_ARB_fragment_shader
Flere gjengivelsesmål GL_ARB_draw_buffers glDrawBuffere
Rektangulær tekstur GL_ARB_tekstur_rektangel GL_TEXTURE_RECTANGLE_ARB
Point Sprites GL_ARB_point_sprite
Separat blandingsligning GL_EXT_blend_equation_separate
Separat sjablong GL_EXT_stencil_two_side
OpenGL 2.1

2. august 2006 ble OpenGL 2.1 utgitt. Siden den er fullstendig kompatibel med tidligere versjoner, tilbyr [ 26 ] også nye funksjoner som:

  • Revisjon 1.20 av OpenGL Shading Language ( GLSL ).
  • Kommandoer som støtter spesifikasjonen av ikke-kvadratiske matriser.
  • Pixel buffer- objekter for å strupe bildetrafikk til buffere i kommandoer som glTexImage2D og glReadPixels .
Denne funksjonaliteten tilsvarer utvidelsen ARB_pixel_buffer_object . Denne funksjonaliteten tilsvarer utvidelsen GL_EXT_texture_sRGB .

OpenGL 3.0

OpenGL 3.0-versjonen [ 27 ] ble utgitt 11. august 2008 .

Kompatible kort: GeForce 8-serien ATI HD Radeon 2000-serien . (Det vil si at bare Direct3D 10.0-kompatibel maskinvare er i stand til å kjøre OpenGL 3.0.)

Den er bakoverkompatibel med alle tidligere versjoner av OpenGL, selv om den introduserer en ny mekanisme for å avvikle utdatert funksjonalitet slik at API kan forenkles i fremtidige versjoner.

De viktigste nyhetene er:

  • OpenGL Shading Language versjon 1.30 ( GLSL )
  • Vertex Array Objects .
  • Mer fleksible Framebuffer-objekter .
  • Teksturer og gjengi buffere i 32-bits flytende komma.
  • Støtte for 16-bits flyttallformat for hjørner og piksler.
  • Evne til å lagre hjørner i en buffer etter at de har blitt transformert.
  • Teksturmatriser
  • 32-bit flytende punkt Z-buffer.
OpenGL 3.1

Versjon 3.1 (Longs Peak Reloaded) ble utgitt 24. mars 2009, og introduserer en rekke funksjoner for å gjøre API mer praktisk å bruke, i tillegg til ytelsesorienterte funksjoner:

  • OpenGL Shading Language revisjon 1.40 ( GLSL )
  • Teksturbufferobjekter - en ny teksturtype som inneholder en endimensjonal rekke texel
  • Uniform Buffer Objects for rask datadeling eller oppdatering
  • Signerte normaliserte teksturer (område ± 1,0)
  • Minimum 16 teksturenheter tilgjengelig med Vertex Shader
  • Primitiv omstart
  • Forekomster - tegne objekter flere ganger gjennom gjenbruk av toppunktdata
  • CopyBuffer API for rask datakopiering, brukt i forbindelse med OpenCL

Med utgivelsen av OpenGL 3.1-spesifikasjonen ble det også utgitt en kompatibilitetsutvidelse som lar utviklere få tilgang til OpenGL 1.X/2.X-funksjonalitet fjernet i OpenGL 3.1. Spesielt opprettholdes eldre funksjonalitet for en bred støttelinje.

Fjernet eldre funksjonalitet inkluderer:

  • Alle funksjonsalternativer fikset
  • direkte modus
  • Fargeindeksmodus , for eksempel pikselformater med fargepaletter
OpenGL 3.2

Versjon 3.2 ble utgitt 3. august 2009. Den inneholder følgende funksjoner:

  • OpenGL Shading Language versjon 1.50 (GLSL)
  • Støtte for Shader Geometri
  • BGRA vertex bestillingskomponent
  • Shader fragment koordinatkontrollkonvensjon
  • sømløst filtrert kubekart
  • Holdedybdefragment
  • Flersamplede teksturer og teksturprøver for spesifikke steder i prøven
  • Synkroniser og gjerde objekter
OpenGL 3.3

Lagt ut 11. mars 2010

OpenGL 3.3, utgitt samtidig med OpenGL 4.0 og supplert med et sett med nye ARB -utvidelser , gir så mye funksjonalitet som mulig fra OpenGL 4.0-spesifikasjonen for bruk på forrige generasjons GPU- maskinvare . Inkluderer GLSL 3.30.

OpenGL 4.0

Utgitt 11. mars 2010
Støttede kort: Radeon HD 5000-serien , nVidia GTX 400-serien ;

Kjennetegn: [ 28 ]

  • OpenGL Shading Language versjon 4.00 ( GLSL )
  • To shader-faser som lar GPUen laste geometrisk tessellasjon fra CPUen.
  • Per-shaders sample fragment og programmerbare shader input fragment posisjoner for høyere gjengivelseskvalitet og anti-aliasing fleksibilitet.
  • Shader-underrutiner for betydelig økt programmeringsfleksibilitet.
  • Separasjon av teksturtilstand og teksturdata ved å legge til en ny objekttype kalt sampler-objekter.
  • Tegning av data generert av OpenGL API eller eksterne APIer, for eksempel OpenCL , uten CPU-intervensjon.
  • 64-bits dobbelpresisjon flytepunktskyggelegging og input/output-operasjoner for å gi høyere presisjon og kvalitet.
  • Ytelsesforbedringer, for eksempel geometriskyggelegging på forekomster, forekomstarrayer og en ny tidtakerspørring.
OpenGL 4.1

Annonsert 26. juli 2010 [ 29 ]
Støttede kort Nvidia GeForce 400-serien , Nvidia GeForce 500-serien , ATI Radeon HD 5000-serien , AMD Radeon HD 6000-serien

Denne nye versjonen legger til disse tilleggsfunksjonene til spesifikasjonen, hvorav mange bidrar til å bringe den i tråd med Direct3D 11:

  • OpenGL Shading Language (GLSL) 4.1
  • Full støtte for OpenGL for Embedded Systems (OpenGL ES) 2.0
  • Reduserte rekompileringstider
  • Muligheten til å koble programmer individuelt til de fem programmerbare stadiene (Vertex, Tiling Control, Tessellation Evaluation, Geometry og Fragment)
  • Forbedringer av generell 64-bit flytepunktstøtte lagt til i OpenGL 4.0
OpenGL 4.2

Utgitt 8. august 2011 [ 30 ]
​Støttede kort Nvidia GeForce 400-serien , Nvidia GeForce 500-serien , ATI Radeon HD 5000-serien , AMD Radeon HD 6000-serien , ATI Radeon HD 7000-serien

  • Støtte for shaders med atomtellere og laste/lagre/atomic lese-modifisere-skrive-operasjoner på ett enkelt nivå av en tekstur.
  • Evne til å fange flislagte GPU-geometri og tegne flere forekomster av "transform feedback" slik at komplekse objekter enkelt kan replikeres eller omplasseres.
  • OpenGL kan nå modifisere et vilkårlig delsett av en komprimert tekstur uten å måtte laste ned hele teksturen på nytt til GPUen, noe som fører til høyere ytelse.
  • Støtte for å pakke flere 8-biters og 16-biters verdier til en enkelt 32-bits verdi, noe som fører til mer effektiv skyggebehandling og redusert trykk på minne og båndbredde.
OpenGL 4.3

Utgitt 6. august 2012 [ 31 ] Støttede kort: Nvidia GeForce 400-serien , Nvidia GeForce 500-serien , Nvidia GeForce 600-serien , ATI Radeon HD 8000-serien

  • Den inkluderer den mest oppdaterte versjonen av GLSL i sin versjon 4.30 (OpenGL Shading Language).
  • Beregning av shaders som utnytter parallelliteten til GPUen for alt relatert til geometri eller grafikk.
  • Shader objektbufring.
  • Teksturparameterspørringer for å finne grensene som plattformene kan ha for å behandle dem.
  • Høykvalitetskomprimering på ETC2/EAC-teksturer som standardfunksjon.
  • Full støtte for OpenGL ES 3.0 APIer.
  • Feilsøkingsfunksjoner som gjør det mulig å motta feilsøkingsmeldinger mens applikasjonen utvikles.
  • Teksturvisninger for teksturanalyse på forskjellige måter uten datareplikering.
  • Øker minnesikkerheten.
  • En utvidelse med flere applikasjoner som tilfører systemet robusthet, og forhindrer at applikasjoner som forårsaker krasj og som må tilbakestilles påvirker andre som kjører.
OpenGL 4.4

Publisert 22. juli 2013 [ 32 ]

  • Bufferplasseringskontroll
  • Effektive asynkrone spørringer
  • Shader Variabel Layout
  • Effektiv binding av flere objekter
  • Strømlinjeformet portering av Direct3D-applikasjoner
  • Bindløs teksturforlengelse
  • Sparse Texture Extension
OpenGL 4.5

Publisert 11. august 2014 [ 33 ]​ [ 34 ]

Støttede kort: Nvidia GeForce 400-serien og nyere, også Tegra K1 og Tegra X1. [ 35 ]​ [ 36 ]

  • Direct State Access (DSA) [ 37 ]
  • Flush Control - Forbedret multithreading system.
  • Robusthet - WebGL-forbedringer.
  • OpenGL ES 3.1 API og shader-støtte.

Dokumentasjon

OpenGLs popularitet skyldes delvis den detaljerte offisielle dokumentasjonen. OpenGL ARB har publisert en serie oppdaterte manualer etter hvert som APIen har utviklet seg. De er lett gjenkjennelige (og kjente) av fargen på hettene deres:

  • Den røde boken - Den røde boken: Veiledningen til OpenGL-programmereren. ISBN 0-321-33573-2
Oppslagsbok og veiledning. Betraktet som en nattbok for OpenGL-programmerere.
  • The Blue Book - The Blue Book: The OpenGL Reference Manual. ISBN 0-321-17383-X
I hovedsak en kopi av OpenGL - man -siden. Inkluderer en utbrettbar plakat med strukturdiagrammet for en ideell OpenGL-implementering.
  • El Libro Verde - Den grønne boken: Programmering av OpenGL for X Window System. ISBN 0-201-48359-9
Bok om X11 -grensesnittet og GLUT .
  • The Alpha Book (hvitt omslag) - The Alpha Book: OpenGL-programmering for Windows 95 og Windows NT. ISBN 0-201-40709-4
Bestill på OpenGL-grensesnittet på Microsoft Windows -plattformer .

For OpenGL 2.0 og nyere:

  • The Orange Book - The Orange Book: The OpenGL Shading Language. ISBN 0-321-33489-2
Oppslagsbok og veiledning for GLSL .

Utvidelser

OpenGL-standarden lar produsenter legge til ny tilleggsfunksjonalitet gjennom utvidelser etter hvert som nye teknologier dukker opp. Slike utvidelser kan introdusere nye funksjoner og konstanter, og slappe av eller til og med fjerne restriksjoner på eksisterende funksjoner. Hver produsent har en forkortelse som identifiserer den i navnet til dens nye funksjoner eller konstanter. For eksempel vises forkortelsen for NVIDIA ( NV ) i definisjonen av funksjonen glCombinerParameterfvNV() og konstanten GL_NORMAL_MAP_NV .

Flere leverandører kan bli enige om å implementere den samme utvidede funksjonaliteten. I så fall brukes stenografien EXT . Det kan til og med skje at ARB tar i bruk utvidelsen, og dermed blir standard og bruker ARB -forkortelsen i deres navn. Den første ARB -utvidelsen var GL_ARB_multitexture , introdusert i versjon 1.2.1. Ved å følge banen markert av utvidelsen, er multitexturing ikke lenger en valgfri utvidelse, men ble en del av OpenGL-kjernen siden versjon 1.3.

Før du bruker en utvidelse, må programmer sjekke tilgjengeligheten og deretter få tilgang til de nye funksjonene som tilbys. Denne prosessen er plattformavhengig, men biblioteker som GLEW og GLEE forenkler den.

Spesifikasjoner for de fleste plugins finner du i det offisielle plugin-registeret. [ 38 ]

Verktøybiblioteker

Det er skrevet flere eksterne biblioteker som legger til funksjoner som ikke er tilgjengelige i OpenGL selv. Noen av dem er:

  • GLU : Tilbyr tegnefunksjoner på høyt nivå basert på OpenGL-primitiver. GLU-funksjoner gjenkjennes lett ettersom de alle starter med prefikset glu .
  • GLUT : Cross-platform API som gir rudimentær funksjonalitet for vindusadministrasjon og tastatur- og musinteraksjon.
  • GLUI : GLUT-basert brukergrensesnitt; gir kontrollelementer som knapper, avmerkingsbokser og spinnere . Det er operativsystemuavhengig, og er avhengig av GLUT for å håndtere systemavhengige elementer.

Referanser for programmeringsspråk ( bindinger )

For å understreke de flerspråklige og kryssplattformfunksjonene til OpenGL, er det utviklet ulike bindinger på mange språk. Noen av språkene som slike bindinger er tilgjengelige for er:

Medlemmer av Khronos-gruppen

Fra og med 2008 er noen av medlemmene av Khronos Group:

For en fullstendig og oppdatert liste over prosjektmedlemmer, se Khronos-gruppens medlemmer, [ 55 ] bidragsytere [ 56 ] og lærde [ 57 ] lister. [ 58 ]

Se også

Ytterligere biblioteker for OpenGL

  • GLU - Tilleggsfunksjoner (NURBS, kuler, disker, etc)
  • GLUT - API for å lette OpenGL-utvikling og administrere vinduer og hendelser
  • GLUI - GLUT-basert grensesnittbibliotek
  • GLX - OpenGL-grensesnitt med X Window System

Andre grafiske grensesnitt

OpenGL-applikasjoner

  • Vedlegg: Liste over applikasjoner som bruker OpenGL

Referanser

  1. ^ "Arkiveret kopi" . Arkivert fra originalen 1. juli 2017 . Hentet 19. april 2015 . 
  2. ^ "SGI - OpenGL Overview" . 
  3. ^ "Khronos pressemelding som kunngjør fusjon med ARB" . Arkivert fra originalen 3. mai 2008. 
  4. "Analyse av Khronos- og ARB-fusjonen" . Arkivert fra originalen 20. mai 2008 . Hentet 14. januar 2007 . 
  5. ^ "OpenGL Architecture Review Board Working Group" . 
  6. ^ "OpenGL Architecture Review Board Working Group" . 
  7. "OpenGL-spesifikasjon versjon 3.0" . 
  8. http://www.opengl.org/documentation/specs/version1.1/state.pdf
  9. ^ "OpenGL Graphics System Specification versjon 2.1" . 
  10. ^ "Iris GL eid av SGI" . Arkivert fra originalen 29. september 2007 . Hentet 16. februar 2007 . 
  11. "Opprettelse av OpenGL ARB" . 
  12. "Slutt på OpenGL++" . 
  13. ^ "Fahrenheit offentlig kunngjøring" . Arkivert fra originalen 27. september 2007. 
  14. «Medlemmer av Fahrenheit-prosjektet. 1998." . Arkivert fra originalen 15. januar 2008 . Hentet 15. januar 2007 . 
  15. ^ "Slutten på Fahrenheit-prosjektet" . 
  16. ^ a b "Mer om Vulkan og SPIR - V: Fremtiden for høyytelsesgrafikk" . Chronos Group. s. 10 . Hentet 27. juni 2015 . Takk AMD! » 
  17. ^ "Vulkan: Graphics and compute Belong Together" (PDF) . Khronos.org. mars 2015 . Hentet 5. mars 2015 . 
  18. ^ "Vulkan - Grafikk og databehandling hører sammen" . Khronos.org . Hentet 5. mars 2015 . 
  19. Batchelor, James. "glNext avslørt som Vulkan graphics API" . develop-online.net . 
  20. MahUng, Gordon. "Mantle is a Vulkan: AMDs dead graphics API reiser seg fra asken i OpenGLs etterfølger" . PCWorld. 
  21. ^ "AMD Gaming: One of Mantle's Futures: Vulkan | AMD-blogger» . Community.amd.com. Arkivert fra originalen 6. mars 2015 . Hentet 5. mars 2015 . 
  22. Hruska, Joel. "Ikke død ennå: AMDs Mantle driver nye Vulkan API, VR-innsats" . ExtremeTech . Hentet 5. mars 2015 . 
  23. ^ "AMDs mantel lever videre i Vulkan - legger grunnlaget for neste OpenGL" . Wccftech.com. 20. juni 2014 . Hentet 5. mars 2015 . 
  24. Kirsch, Nathan. «Er AMD Mantle død slik vi har kjent det? Vulcan API bruker mantelteknologi for OpenGL» . Legitime anmeldelser . Hentet 5. mars 2015 . 
  25. ^ "Arkiveret kopi" . Arkivert fra originalen 2. april 2007 . Hentet 28. mars 2010 . 
  26. ^ "OpenGL 2.1-funksjoner" . 
  27. http://www.opengl.org/registry/doc/glspec30.20080811.pdf
  28. Khronos webansvarlig (11. mars 2010). "Khronos slipper løs grafisk akselerasjon på tvers av plattformer med OpenGL 4.0" . Pressemeldinger fra Khronos . Arkivert fra originalen 25. august 2011 . Hentet 11. mars 2010 . 
  29. ^ "OpenGL 4.1-spesifikasjon utgitt" . 
  30. ^ "Khronos beriker 3D-grafikk på tvers av plattformer med utgivelsen av OpenGL 4.2-spesifikasjonen" . 
  31. ^ "Khronos slipper OpenGL 4.3-spesifikasjonen med store forbedringer" . 
  32. ^ "Khronos slipper OpenGL 4.4-spesifikasjonen" . 
  33. ^ "Khronos Group kunngjør viktige fremskritt i OpenGL Ecosystem - Pressemelding fra Khronos Group" . Hentet 17. april 2015 . 
  34. Kronos Group. «OpenGL®-registeret» . Hentet 17. april 2015 . 
  35. ^ "SG4121: OpenGL-oppdatering for NVIDIA GPUer" . ustream . Arkivert fra originalen 17. mai 2015 . Hentet 17. april 2015 . 
  36. Mark Kilgard. "OpenGL 4.5-oppdatering for NVIDIA GPUer" . Hentet 17. april 2015 . 
  37. ^ "OpenGL 4.5 utgitt - med en av Direct3Ds beste funksjoner" . Ars Technica . Hentet 17. april 2015 . 
  38. ^ "Register (viderekobling)" . Arkivert fra originalen 15. januar 2007 . Hentet 2009 . 
  39. ^ "Indeks for /~bond/OPENGL/ADA" . Arkivert fra originalen 2004-10-13 . Hentet 2009 . 
  40. «Nyheter | Tao-rammeverket" . Arkivert fra originalen 7. juni 2008 . Hentet 2009 . 
  41. ^ "bindings - dsource.org" . Hentet 2009 . 
  42. ^ "forlatt - dsource.org" . Hentet 2009 . 
  43. "Nikita er ikke mer! Elena er her! :)» . Arkivert fra originalen 19. april 2012 . Hentet 2009 . 
  44. ^ "f90gl: Fortran-grensesnitt for OpenGL og GLUT" . Hentet 2009 . 
  45. ^ "Rekedokumentasjon - no.opengl" . Arkivert fra originalen 2012-03-12 . Hentet 2009 . 
  46. ^ "Lazarus - OpenGL Tutorial" . Arkivert fra originalen 11. oktober 2017 . Hentet 2011 . 
  47. ^ "jogl:" . Arkivert fra originalen 21. august 2009 . Hentet 2009 . 
  48. "lwjgl.org - Hjemmet til Lightweight Java Game Library" . Hentet 2009 . 
  49. abc " Programmeringsspråkbindinger " . Hentet 2009 . 
  50. ^ "Velkommen til OpenGL for MCL" . Hentet 2009 . 
  51. ^ "pike.ida.liu.se: Moduler" . Arkivert fra originalen 2. oktober 2012 . Hentet 2009 . 
  52. ^ "PyOpenGL - Python OpenGL-bindingen" . Hentet 2009 . 
  53. ^ "Akademisk pakkeinnhold" . Arkivert fra originalen 4. mars 2016 . Hentet 2009 . 
  54. https://web.archive.org/web/20071012184537/http://haskell.org/HOpenGL/index.html
  55. ^ "Khronos fremmende medlemmer" . Hentet 2009 . 
  56. ^ "Khronos-bidragende medlemmer" . Hentet 2009 . 
  57. ^ "Khronos akademiske medlemmer" . Hentet 2009 . 
  58. ^ "Khronos-gruppen: Åpne standarder, royaltyfrie, dynamiske medieteknologier" . Hentet 2009 . 

Eksterne lenker