Marek

Založen: 28. 07. 2007 Příspěvky: 1782 Bydliště: Velká Morava
|
Zaslal: 4. srpen 2009, 06:13:26 Předmět: OpenGL 3.2 je venku, hromada nových funkcí |
|
|
OpenGL ARB (sdružení pracující na OpenGL) splnilo slib a za necelý půlrok vydalo další aktualizaci OpenGL, verzi 3.2, pro větší výkon, lepší vizuální kvalitu, akcelerované zpracování geometrie a jednodušší portování Direct3D aplikací.
V této verzi jsou zavedeny 2 profily:
- Core - Obsahuje pouze funkce týkající se nejnovějších technologií, které se dnes běžně používají a které hardware efektivně podporuje.
- Compatibility - Obsahuje všechny funkce od OpenGL 1.0, vhodný pro zpětnou kompatibilitu se starším kódem, který chce zároveň využívat funkcionalitu verze 3.2. (kromě zahrnutí starých funkcí bylo třeba navíc dodefinovat interakce mezi starými a těmi novými)
Profil se zadává při vytváření renderovacího kontextu a je definován obecně jako modifikace API přizpůsobená potřebám trhu (v budoucnu se můžeme dočkat např. osekaného profilu pro konzole apod).
OpenGL Shading Language verze byla povýšena na 1.5 kvůli geometry shaderům a multisample texturám (viz dále).
Download:
Seznam nových funkcí v OpenGL 3.2:
- GL_ARB_geometry_shader4
Geometry shadery pro programovatené zpracování geometrie po jednotlivých primitivech (body, čáry, trojúhelníky).
- GL_ARB_texture_multisample
Podpora 2D multisample textur (včetně polí 2D textur), do kterých se dá renderovat a ze kterých je možno v shaderu číst jednotlivé vzorky a provádět multisampling ručně např. při HDR renderingu a deferred shadingu. Multisampling depth-stencil textur není povinný a jeho podpora jde zjistit.
- GL_ARB_sync
Objekty pro synchronizaci s GPU (jako fences nebo events v CUDA), tj. lze označit místa v kódu a později k nim synchronizovat nebo se zeptat, zda GPU všechny předcházející příkazy už zpracovalo. Hodí se také pro přesné měření času jednotlivých částí renderingu.
- GL_ARB_seamless_cube_map
Nový mód filtrování cubemap, který bere pixely i z více stran zároveň umožňující korektní bilineární filtr na hranách cubemapy.
- GL_ARB_depth_clamp
Vypíná ořezávání primitiv na přední a zadní ořezávací rovině, namísto toho se upraví hodnoty zbufferu do povoleného rozsahu a primitiva se vyrenderují. Vhodné pro některé algoritmy jako např. stencil stíny.
- GL_ARB_draw_elements_base_vertex
Přidává nové DrawElements* funkce, které umožňují zadat offset indexu u indexovaných vertexu. (umožňuje vyrenderovat např. podmnožinu modelu, kde by bylo potřeba indexy upravit, nebo pokud je ve vertex bufferech více modelů uložených za sebou)
- GL_ARB_vertex_array_bgra
Podpora obraceného pořadí barevných kanálu tj. BGR a BGRA u barev vertexů. (jako v DX)
- GL_ARB_fragment_coord_conventions
Umožňuje upravit přímo v shaderu zaběhnuté konvence souřadnic přo zpracování pixelů, např. nastavení počátku souřadnic na levý horní roh. (jako v DX)
- GL_ARB_provoking_vertex
Umožňuje nastavit, ze kterého vertexu se u flat stínování vezme barva a jiné atributy vertexu, které se použijí pro výpočet pixelů celého primitiva (čára, trojúhelník). (pro kompatibilitu s DX) OpenGL dříve používalo atributy z posledního vertexu, Direct3D zase z prvního.
Pokud chce výrobce hardwaru podporovat jen část funkcí, přidá jen názvy extenzí samostatně, což se dá považovat za výtažek z Core specifikace.
Následuje seznam funkcí, které nejsou součástí OpenGL 3.2, ale byly vydány ve stejnou dobu sdružením ARB (začlení se, až se jejich užitečnost ověří v praxi):
- GL_ARB_draw_buffers_blend
Pokud se renderuje do více textur zároveň (multiple render targets), umožňuje nastavit blendovací funkci a blendovací rovnici zvlášť pro každou texturu.
- GL_ARB_sample_shading
Standardně pokud při multisamplingu více vzorků pokrývá jedno primitivum (čára, trojúhelník), pixel shader se spustí jen jednou a jeho výsledek se do každého takového vzorku přiřadí. Tato optimalizace může způsobovat aliasing, pokud barva vzorku závisí např. na koordinátech textury. Nově lze tuto optimalizaci potlačit tj. je možno zadat minimální počet unikátních vzorků. Také je možno v pixel shaderu zjistit, jaký vzorek je právě zpracováván včetně jeho přesné pozice v obraze. (možnosti tohoto rozšíření mohou být ohromující...)
- GL_ARB_texture_cube_map_array
Podpora pro pole cubemap textur v shaderu. (podobné jako pole 2D textur v DX10 a GL3)
- GL_ARB_texture_gather
Namísto bilineárního filtru je možno v shaderu získat čtveřici pixelů textury, které by byly k tomuto filtru potřeba, a to jen jedním voláním TEX instrukce. Z pixelů se vrací pouze první kanál (red) do 4D vektoru. Vhodné např. u custom filtrů a při shadow mappingu. (jiné názvy: fetch4, gather4)
- GL_ARB_texture_query_lod
Pomocí této nové funkce v Shading Language lze získat informace, které by použila texturovací jednotka pro výběr mipmapy. Výsledek pravděpodobně vrací texturovací jednotka přímo. Může se hodit pro efektivní určení úrovně level-of-detail u efektů, podle které by se určila např. náročnost osvětlovacího modelu.
Namísto Compute shaderu, který je např. v DX11, lze použít OpenCL, v jehož specifikaci je podrobně popsána interakce s OpenGL včetně sdílení bufferů a textur.
OpenGL nyní dosáhlo na úroveň Direct3D 10.1 a v některých ohledech ho i překonává. Na vývoji se podíleli jak výrobci hardwaru tj. NVIDIA, AMD, Intel, Apple a ARM, tak i výrobci software tj. Blizzard, TransGaming, CodeWeavers, a jiní. ARB poslední dobou vykazuje zvýšenou aktivitu. Za posledních 12 měsíců vydalo 3 verze OpenGL a ohromné množství nových funkcí a vylepšení API. Běžný smrtelník samozřejmě nemusí číst přímo specifikace (systém extenzí může být nepřehledný), nicméně může si počkat na oficiální dokumentaci.
Vzhledem k množství nových věcí v této aktualizaci OpenGL a mému omezenému času je možné, že jsem se při pročítání specifikací někde přehlédl. Připomínky vítány. Některé uvedené příklady použití jsou vlastní nápady.
Mimochodem, NVIDIA už vydala OpenGL 3.2 beta drivery.
Reference:
OpenGL fórum, oficiální oznámení
OpenGL Extension Registry
Příspěvek od uživatele Groovounet
Uživatel Jean-Francois Roy se zde podrobněji zabývá novinkama v GLSL 1.5 _________________ AMD Open Source Graphics Driver Developer |
|