OpenGL | |
---|---|
Type | API |
Udvikler | Silicon Graphics , derefter Khronos Group |
Skrevet i | C og OpenGL Shading Language |
Operativ system | Cross-platform software |
Første udgave | 1. juli 1992 [1] |
nyeste version | 4.6 ( 31. juli 2017 ) |
Stat | se Vulcan |
Licens | EULA, ACORP |
Internet side | opengl.org |
Mediefiler på Wikimedia Commons |
OpenGL ( Open Graphics Library ) er en specifikation, der definerer en platform-uafhængig ( programmeringssprog- uafhængig ) programmeringsgrænseflade til at skrive applikationer, der bruger todimensionel og tredimensionel computergrafik . Udviklet i USA og Europa, licenseret under GNU-/EU/-typen.
Indeholder over 300 funktioner til at tegne komplekse 3D-scener fra simple primitiver. Anvendes i skabelsen af computerspil , CAD , virtual reality , visualisering i videnskabelig forskning. På Windows -platformen konkurrerer den med Direct3D .
På et grundlæggende niveau er OpenGL blot en specifikation , det vil sige et dokument, der beskriver et sæt funktioner og deres nøjagtige adfærd. Baseret på denne specifikation opretter hardwareproducenter implementeringer - biblioteker af funktioner, der svarer til specifikationens funktionssæt. Implementeringen er designet til effektivt at bruge hardwarens muligheder. Hvis hardwaren ikke tillader en funktion, skal den emuleres i software. Hardwareproducenter gennemgår en række specifikke test (overensstemmelsestest), før en implementering klassificeres som en OpenGL-implementering. Da det er nok for softwareudviklere at lære at bruge funktionerne beskrevet i specifikationen, overlades deres implementering til hardwareudviklere.
Der findes effektive implementeringer af OpenGL til Windows , Unix -platforme og Mac OS . Disse implementeringer leveres normalt af videokortproducenter og gør udstrakt brug af sidstnævntes muligheder. Der er også open source-implementeringer af OpenGL-specifikationen, hvoraf en er Mesa -biblioteket . Af licensårsager er Mesa en "uofficiel" implementering af OpenGL, selvom den er fuldt ud kompatibel på kodeniveau og understøtter både softwareemulering og hardwareacceleration med de relevante drivere.
OpenGL-specifikationen bliver revideret af ARB- konsortiet (Architecture Review Board), som blev dannet i 1992. Konsortiet består af virksomheder, der er interesserede i at opbygge en bredt accepteret og tilgængelig API . Ifølge det officielle OpenGL-websted er ARB-medlemmer med stemmeafgivelse fra november 2004 professionelle grafikhardwareproducenter SGI , 3Dlabs , Matrox og Evans & Sutherland (militære applikationer), forbrugergrafikhardwareproducenter ATI og NVIDIA , processorproducent Intel og computer producenter og computerhardware fra IBM , Apple , Dell , Hewlett-Packard og Sun Microsystems , samt en af førende inden for computerspilindustrien, id Software . Microsoft , et af de stiftende medlemmer af konsortiet, forlod i marts 2003. Udover de faste medlemmer inviteres en lang række andre virksomheder hvert år til at blive en del af OpenGL ARB inden for et år. Et så stort antal virksomheder involveret i en bred vifte af interesser har gjort det muligt for OpenGL at blive en applikationsgrænseflade til generelle formål med en masse funktioner.
Kurt Akeley og Mark Segal er forfatterne til den originale OpenGL-specifikation. Chris Frazier redigerede version 1.1. Jon Leech redigerede version 1.2 til 2.0.
OpenGL fokuserer på følgende to opgaver:
Det grundlæggende princip for OpenGL er at opnå sæt af vektorgrafiske primitiver i form af punkter, linjer og trekanter, efterfulgt af matematisk behandling af de modtagne data og konstruktion af et bitmapbillede på skærmen og/eller i hukommelsen. Vektortransformationer og rasterisering udføres af den grafiske pipeline, som i det væsentlige er en diskret automat . Langt de fleste OpenGL-kommandoer falder i en af to grupper: De tilføjer enten grafikprimitiver som input til pipelinen, eller de konfigurerer pipelinen til at udføre forskellige transformationer.
OpenGL er et lavt procedure-API, der tvinger programmøren til at diktere den nøjagtige rækkefølge af trin for at bygge den resulterende bitmap-grafik (den imperative tilgang). Dette er den største forskel fra deskriptortilgange, når hele scenen transmitteres som en datastruktur (oftest et træ), som behandles og bygges på skærmen. På den ene side kræver den imperative tilgang, at programmøren har et dybt kendskab til lovene for tredimensionel grafik og matematiske modeller, på den anden side giver det frihed til at introducere forskellige innovationer.
OpenGL-standarden, med fremkomsten af nye teknologier, giver individuelle leverandører mulighed for at tilføje funktionalitet til biblioteket gennem udvidelsesmekanismen . Udvidelser distribueres ved hjælp af to komponenter: en header-fil, der indeholder prototyper af nye funktioner og konstanter , og en enhedsdriver leveret af udvikleren. Hver producent har en forkortelse, der bruges, når dens nye funktioner og konstanter navngives. NVIDIA har for eksempel forkortelsen NV , som bruges, når dens nye funktioner navngives, såsom , glCombinerParameterfvNV()samt konstanter, GL_NORMAL_MAP_NV. Det kan ske, at en bestemt udvidelse kan implementeres af flere producenter. I dette tilfælde bruges forkortelsen EXT , f.eks glDeleteRenderbuffersEXT. Når en udvidelse er godkendt af ARB- konsortiet , erhverver den ARB- forkortelsen og bliver en standardudvidelse. Typisk er udvidelser godkendt af konsortiet inkluderet i en af følgende OpenGL-specifikationer.
Listen over registrerede udvidelser kan findes i den officielle udvidelsesdatabase [2] .
Der er en række biblioteker bygget oven på eller som supplement til OpenGL. For eksempel er GLU- biblioteket , som næsten er en standard tilføjelse til OpenGL og altid ledsager det, bygget oven på sidstnævnte, det vil sige, at det bruger sine funktioner til at implementere sine muligheder. Andre biblioteker, såsom GLUT og SDL , er designet til at implementere funktioner, der ikke er tilgængelige i OpenGL. Disse funktioner omfatter oprettelse af en brugergrænseflade (vinduer, knapper, menuer osv.), opsætning af en tegnekontekst (tegneområde brugt af OpenGL), håndtering af beskeder fra I/O-enheder (tastatur, mus osv.) og arbejde med filer. . Typisk har hver vinduesadministrator sit eget udvidelsesbibliotek til at implementere ovenstående funktioner, såsom WGL på Windows eller GLX på X Window System , men GLUT- og SDL-bibliotekerne er tværplatforme, hvilket gør det nemt at portere skrevne applikationer til andre platforme.
GLEW ( The OpenGL Extension Wrangler Library) og GLEE (The OpenGL Easy Extension library) bibliotekerne er designet til at gøre det lettere at arbejde med udvidelser og forskellige versioner af OpenGL. Dette gælder især for Windows-programmører, da header- og biblioteksfilerne, der leveres med Visual Studio, er på OpenGL 1.1-versionsniveauet.
OpenGL har kun et sæt geometriske primitiver (punkter, linjer, polygoner), hvorfra alle tredimensionelle objekter er skabt. Nogle gange er dette detaljeringsniveau ikke altid praktisk, når du laver scener. Derfor er højere niveau biblioteker såsom Open Inventor og VTK blevet bygget oven på OpenGL . Disse biblioteker giver dig mulighed for at arbejde med mere komplekse 3D-objekter, hvilket gør det nemmere og hurtigere at skabe en 3D-scene.
GLM (OpenGL Mathematics) er et hjælpebibliotek, der giver C++ programmører klasser og funktioner til at udføre matematiske operationer. Biblioteket kan bruges ved oprettelse af 3D-programmer ved hjælp af OpenGL [3] . Et af kendetegnene ved GLM er, at implementeringen er baseret på GLSL- specifikationen . GLM-kildekoden bruger MIT-licensen .
For at bekræfte programmeringssprogets uafhængighed er forskellige muligheder for binding (binding) af OpenGL-funktioner blevet udviklet eller fuldstændigt overført til andre sprog. Et eksempel er Java 3D -biblioteket , som kan bruge OpenGL hardwareacceleration. Direkte funktionsbinding er implementeret i Lightweight Java Game Library [4] , som har direkte OpenGL-binding til Java . Sun har også udgivet en version af Java OpenGL (JOGL), der giver direkte binding til OpenGL C -funktionerne, i modsætning til Java 3D, som ikke har så lavt niveau-understøttelse. Det officielle OpenGL-websted har links til bindinger til Java, Fortran 90 , Perl , Pike , Python , Ada , Visual Basic og Pascal [5] . Der er også OpenGL-bindingsmuligheder for C++ og C# [6] .
Computergrafik har fundet bred udbredelse og anvendelse i hverdagen. Forskere bruger computergrafik til at analysere simuleringsresultater. Ingeniører og arkitekter bruger 3D-grafik til at skabe virtuelle modeller . Filmskabere skaber specialeffekter eller fuldt animerede film (" Shrek ", " Toy Story " osv.). I de senere år er computerspil også blevet udbredt og udnytter tredimensionel grafik til at skabe virtuelle verdener.
Udbredelsen af computergrafik kom med sit eget sæt af vanskeligheder. I 1990'erne var det en tids- og omkostningskrævende bestræbelse at udvikle et softwareprodukt, der kunne køre på en bred vifte af grafisk hardware. Det var nødvendigt at oprette moduler separat for hver type grafikadaptere , hvilket nogle gange førte til duplikering af den samme programkode. Dette hæmmede i høj grad udviklingen og udbredelsen af computergrafik.
Silicon Graphics (SGI) har specialiseret sig i at skabe højteknologisk grafikhardware og -software. Som førende inden for 3D-grafik på det tidspunkt så SGI problemer og barrierer i markedets vækst. Derfor blev det besluttet at standardisere metoden for adgang til grafikhardware på niveau med programgrænsefladen .
Dermed blev OpenGL programmeringsgrænsefladen født, som standardiserer adgangen til grafikhardware ved at flytte ansvaret for at skabe en hardwaredriver til producenten af grafikenheden. Dette gjorde det muligt for softwareudviklere at bruge et højere niveau af abstraktion fra grafisk hardware, hvilket i høj grad fremskyndede skabelsen af nye softwareprodukter og reducerede deres omkostninger.
I 1992 ledede SGI OpenGL ARB , en gruppe af virksomheder, der udviklede OpenGL-specifikationen. OpenGL er afledt af SGI's 3D-grænseflade, IRIS GL . En af begrænsningerne ved IRIS GL var, at den kun tillod funktioner, der understøttes af hardwaren; hvis kapaciteten ikke var implementeret i hardware, kunne applikationen ikke bruge den. OpenGL overvinder dette problem ved at implementere funktioner i software, der ikke er tilgængelige i hardware, hvilket gør det muligt for applikationer at bruge denne grænseflade på relativt lavt strømforbrugende systemer.
I 1995 blev Microsofts Direct3D - bibliotek frigivet . Inden længe startede Microsoft, SGI og Hewlett-Packard et projekt kaldet Fahrenheit, som havde til formål at skabe en mere generel programmeringsgrænseflade baseret på Direct3D og OpenGL. Idéen virkede lovende nok til at bringe orden på området for interaktiv 3D-grafik, men som et resultat af økonomiske vanskeligheder hos SGI og mangel på ordentlig industriel støtte, blev projektet opgivet.
I september 2001 afslørede 3DLabs sin vision for OpenGL 2.0.
OpenGL version 2.0 blev introduceret af 3Dlabs som svar på bekymringer om den langsomme og uklare retning af OpenGL udvikling. 3Dlabs foreslog en række væsentlige tilføjelser til standarden, hvoraf den vigtigste var tilføjelsen af GLSL (OpenGL Shading Language) shader -sproget til OpenGL-kernen. Dette giver programmøren mulighed for at erstatte den faste OpenGL-pipeline med små programmer i et særligt sprog for at skabe forskellige effekter, såsom bump mapping , normal mapping , parallax mapping , HDR osv.
Men selv før introduktionen af GLSL-sproget i OpenGL-standarden var det muligt at udvikle specialeffekter i assemblersprog (udvidelser vertex_program, fragment_program) og Cg (NVidia C for Graphics). Mange foreslåede funktioner er endnu ikke tilgængelige i OpenGL 2.0, selvom nogle af dem er blevet implementeret som udvidelser af mange leverandører.
OpenGL 2.1Udgivet 2. juli 2006.
Tilføjet understøttelse af GLSL version 1.2
Nye udvidelser:
Den 11. august 2008 udgav Khronos Group en ny version af OpenGL-specifikationen [7] .
Understøttede videokort: Radeon HD-serien; GeForce 8, 9, GTX 100, GTX 200, GTX 300 og GTX 400-serien.
OpenGL 3.1Den 24. marts 2009 annoncerede Khronos Group OpenGL 3.1. Den nye version ryddede op i komponenter, der blev erklæret forældede, men forblev i OpenGL 3.0 for at glatte overgangen til den nye version af API'en (forældede komponenter kan bruges i fremtiden gennem udvidelsen GL_ARB_compatibility).
OpenGL 3.2Den 3. august 2009 annoncerede Khronos Group OpenGL 3.2. Den nye version fortsætter udviklingen af OpenGL-standarden for at give grafikudviklere adgang til avanceret GPU-funktionalitet.
Understøttede videokort: Radeon HD-serien; GeForce 8000, 9000, GTX 200 og 400-serien.
Innovationer:
Introduceret med OpenGL 4.0 den 11. marts 2010. Giver dig mulighed for at komme så tæt som muligt på funktionaliteten af OpenGL 4.0 på hardwaren fra den forrige generation.
Den 11. marts 2010 indsendte Khronos Group den endelige version af OpenGL 4.0-specifikationen og GLSL 4.0 shader-sproget. OpenGL 4.0 er fuldt bagudkompatibel med ældre OpenGL-udvidelser ved at bruge kompatibilitetstilstanden introduceret i OpenGL 3.2 [8] .
Blandt innovationerne [9] :
Den 26. juli 2010 annoncerede Khronos Group OpenGL 4.1-specifikationen. Specifikationen inkluderer en opdatering til GLSL (GL Shading language) til version 4.10.
Innovationer:
Nye udvidelser:
Den 8. august 2011 offentliggjorde Khronos Group specifikationen for OpenGL 4.2 og GLSL 4.2 shader-sproget [10] .
Innovationer:
Den 6. august 2012 offentliggjorde Khronos Group OpenGL 4.3-specifikationen [11] [12] på SIGGRAPH 2012 . Ud over nye funktioner bringer OpenGL 4.3 understøttelse af en ny type shader gennem udvidelsen GL_ARB_compute_shader. Den nye version er bagudkompatibel med de tidligere.
OpenGL 4.4Understøttede videokort: AMD/ATi Radeon HD 5000/6000/7000/8000 og 200-serien, Nvidia GeForce 400/500/600/700/980-serien.
Den 22. juli 2013 offentliggjorde Khronos Group på SIGGRAPH i Anaheim, Californien OpenGL 4.4-specifikationen [13] .
OpenGL 4.5Understøttede grafikkort: AMD/ATi Radeon baseret på GCN-arkitektur, Nvidia GeForce 400/500/600/700/800/900-serien.
Den 11. august 2014 offentliggjorde Khronos Group på SIGGRAPH i Vancouver, Canada OpenGL 4.5-specifikationen [14] .
OpenGL 4.6Den 31. juli 2017 offentliggjorde Khronos Group OpenGL 4.6-specifikationerne. Den vigtigste innovation er en bærbar mellemrepræsentation af SPIR-V shaders, oprindeligt udviklet til Vulkan API [15] .
Apple i juni 2018 ved WWDC- begivenheden udfasede OpenGL- og OpenGL ES-teknologier . [16]
Fuchsia- og Stadia -operativsystemer understøtter kun Vulkan .
17. september 2021 Valve har fjernet understøttelsen af OpenGL fra det populære spil Dota 2 [17] [18]
Alle nye spil siden 2016, der bruger id Tech 6 -spilmotoren, bruger Vulkan som deres gengivelsesgrænseflade .
ID Tech 7 -spilmotoren understøtter kun Vulkan -specifikationen .
Atypical Games, støttet af Samsung , påtog sig at bringe Vulkan-support til deres motor. Til sidst blev det klart, at Vulkan -implementeringen faktisk ville erstatte OpenGL på alle platforme undtagen Apple [19]
Unity -spilmotoren understøtter ikke OpenGL/OpenGL ES til HDR - pipeline [20]
OpenGL understøtter ikke Ray Tracing , en API til videoafkodning på GPU'en i modsætning til Vulkan
Mesh Shaders i OpenGL understøttes kun på nVidia [21]
Anti -aliasing med AMD FidelityFX Super Resolution(FSR) [22] [23] og Nvidia Deep Learning Super Sampling (DLSS) [24] [25] deep learning algoritmer er ikke understøttet for OpenGL
Vulkan, tidligere kendt som glNext, er en ny API, der opfylder kravene i moderne realiteter og eliminerer de største ulemper ved OpenGL. Det giver lavere overhead og mere direkte kontrol over GPU'en. Khronos Group har udviklet det siden 2014. Version 1.0 blev frigivet den 16. februar 2016 [26] .
Khronos-gruppens standarder | |
---|---|
Aktiv | |
Inaktiv |