OpenGL II.

Slides:



Advertisements
Hasonló előadás
Bevezetés.  A számítógépes grafika inkrementális képszintézis algoritmusának hardver realizációja  Teljesítménykövetelmények:  Animáció: néhány nsec.
Advertisements

 Nincs szinkronizáció és kommunikáció  Csővezeték alkalmazása  Párhuzamosítás Proc 2Proc 1 Csővezeték Proc 1 Proc 21 Proc 22 Párhuzamosság.
6. előadás (2005. április 5.) Struktúrák Úniók Új adattípus definíálása Dinamikus memória foglalás 1.
Számítógépes grafika 3. gyakorlat.
Rekurzív algoritmusok
OpenGL 4 shaderek, GLSL Valasek Gábor
Számítógépes Grafika OpenGL 4 shaderek, GLSL. OpenGL 4 A következő programozható fázisok vannak a 4.x-es OpenGL-ben: Vertex shader Tesselation control.
Grafikus hardver/szoftver alapok Szirmay-Kalos László.
Kauzális modellek Randall Munroe.
Profitmaximalizálás  = TR – TC
Végeselemes modellezés matematikai alapjai
Szerkezetek Dinamikája
MÉZHAMISÍTÁS.
Hőtan BMegeenatmh 5. Többfázisú rendszerek
Szerkezetek Dinamikája
OpenCL bővítmények.
Képzőművészet Zene Tánc
Penicillin származékok szabadgyökös reakciói
Boros Sándor, Batta Gyula
Kalandozások az álomkutatás területén
Nemzetközi tapasztalatok kihűléssel kapcsolatban
Brachmann Krisztina Országos Epidemiológiai Központ
Poszt transzlációs módosulások
Vitaminok.
Data Mining Machine Learning a gyakorlatban - eszközök és technikák
Összefoglalás.
Varga Júlia MTA KRTK KTI Szirák,
További MapReduce szemelvények: gráfproblémák
Járműcsarnokok technológiai méretezése
VÁLLALATI PÉNZÜGYEK I. Dr. Tóth Tamás.
Vizuális adatanalízis
Klasszikus Szabályozás elmélet
Érzékelők és beavatkozók Széchenyi István Egyetem
Grosz Imre docens: Munkaállomások
A HAJTÁS.
A 12. C a PÁNKE Húsvéti Játszóházának rendezvényén
8. Szabály: A játék kezdete és újraindítása
Stabilizotóp-geokémia IV
T:Puhatestűek Mollusca
19. század – II..
A SZÁMVITELI RENDSZER, A SZÁMVITELI TÖRVÉNY.
Egyenletes mozgás.
9. Üstököskutatás Németh Zoltán
A~30 tömegszámú egzotikus atommagok vizsgálata radioaktív nyalábokkal
Fizika II..
Tartalom Radiometria / fotometria Fény mennyiségei Melléklet
PHÖNIX-BRV KFT Ózd Vincze Tamás
Földműveléstan és területfejlesztés
Folyadékok és gázok mechanikája
Klasszikus Szabályozás elmélet
GYÖKVONÁS, NÉGYZETGYÖKÖS EGYENLETEK
Exponenciális kisimítás
HIDROSZTATIKA, HIDRODINAMIKA
A grafikus hardware programozása
OpenGL 2. gyakorlat Valasek Gábor
Az elektromos munka.
A vállalati döntések modellezése
elektromágneses hullám
Vásárhelyi Pál Szakgimnázium és Kollégium Fluidumkitermelő technikus
Mesterséges neuronhálók Rekonstrukciós hálók
Hőközlés – Alapfogalmak Hővezetés és hősugárzás
Vizualizáció és képszintézis
Vállalatok és a jelen érték
Vizualizáció és képszintézis
Kép- és modellalkotó eszközök az orvosi gyakorlatban
OpenGL IV.
OpenGL III.
OpenGL V.
Bevezetés GPGPU Alkalmazások.
CUDA – OpenGL.
Előadás másolata:

OpenGL II

MipMap MipMap glTexImage2D(GL_TEXTURE_2D, level, GL_RGBA32F, ...); glFramebufferTexture2D(GL_FRAMEBUFFER, ..., TexID, mipLevel);

Geometria generálása Üres vertex array Leképzés a host memóriába Felszabadítás az OpenGL számára glBufferData(GL_ARRAY_BUFFER, dataSize, NULL, GL_STATIC_DRAW); float* vertices = (float*)glMapBuffer(GL_ARRAY_BUFFER, GL_WRITE_ONLY); glUnmapBuffer(GL_ARRAY_BUFFER);

Geometria shader Opcionális lépcső Primitíveken dolgozik Bemenet: egy primitív Kimenet: egy vagy több A shader kimenete visszaköthető Vertex Shader Geometria Shader Fragmens Shader

Geometria shader Bementi primitívek Pont Szakasz Háromszög GL_POINTS Szakasz GL_LINES, GL_LINE_STRIP, GL_LINE_LOOP Háromszög GL_TRIANGLES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN Adjacencia információ glProgramParameteri(shader, GL_GEOMETRY_INPUT_TYPE, tipus);

Geometria shader Adjacencia Szakasz Háromszög GL_LINES_ADJACENCY GL_LINE_STRIP_ADJACENCY Háromszög GL_TRIANGLES_ADJACENCY GL_TRIANGLE_STRIP_ADJACENCY 1 2 3 4 5 6 7 8 1 2 4 5 3 6 1 2 3 4 5 6

Geometria shader Kimeneti primitívek Pont Szakasz Háromszög GL_POINTS GL_LINE_STRIP Háromszög glProgramParameteri(shader, GL_GEOMETRY_OUTPUT_TYPE, tipus); glProgramParameteri(shader, GL_GEOMETRY_VERTICES_OUT, darab);

Geometria shader Speciális bemeneti változók gl_ClipDistance[] : vágási információk gl_PointSize[] : vertex méret a vertex shaderből gl_Position : vertex pozíció gl_PrimitiveIDIn : a feldolgozott primitív sorszáma Speciális kimeneti változók A bemeneti változók gl_Layer : melyik rétegbe tegye a fragmens shader (pl. cube map rendereléshez)

Geometria shader Primitívek generálása Vertex információk beállítása Vertex lezárása Primitív lezárása EmitVertex(); EndPrimitive();

Geometria shader Példa #version 130 #extension GL_EXT_geometry_shader4 : enable in vec2 vTexCoord[]; out vec2 fTexCoord; void main(void){ for(int i=0; i < gl_VerticesIn; ++i){ gl_Position = gl_PositionIn[i]; fTexCoord = vTexCoord[i]; EmitVertex(); } EndPrimitive(); gl_Position = gl_PositionIn[i].yxzw; fTexCoord = vTexCoord[i].yx;

Geometria shader Primitívek újrafeldolgozása Transform feedback Feedback mód Megadja a használható primitíveket Feedback buffer kiválasztása Tulajdonságok kiválasztása Vertex Shader glBeginTransformFeedback(mode); // glDrawArrays(...); glEndTransformFeedback(); Feedback Buffer Geometria Shader glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, index, buffer); Fragmens Shader glTransformFeedbackVaryings(...);

Geometria shader Információ a geometria shader működéséről Primitive query Query mód GL_PRIMITIVES_GENERATED Mennyi primitívet állított elő a geometria shader GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN Mennyi primitívet tudott a feedback bufferbe írni a shader GLuint outputQuery; glGenQueries(1, &outputQuery); glBeginQuery(mode, outputQuery); ... glEndQuery(mode);

Geometria shader Információ a geometria shader működéséről A Query eredményének lekérdezése GLuint outPointCount = 0; GLuint succeded = 0; while(!succeded){ glGetQueryObjectiv(outputQuery, GL_QUERY_RESULT_AVAILABLE, &succeded); } glGetQueryObjectiv(outputQuery, GL_QUERY_RESULT, &outPointCount);

Atomikus számláló Számláló létrehozása Számláló inicializálása Számláló bekötése glGenBuffers(1, &atomicBuffer); glBindBuffer(GL_ATOMIC_COUNTER_BUFFER, atomicBuffer); glBufferData(GL_ATOMIC_COUNTER_BUFFER, sizeof(GLuint), NULL, GL_DYNAMIC_DRAW); glBindBuffer(GL_ATOMIC_COUNTER_BUFFER, 0); glBindBuffer(GL_ATOMIC_COUNTER_BUFFER, atomicBuffer); GLuint* ptr = (GLuint*)glMapBufferRange(GL_ATOMIC_COUNTER_BUFFER, 0, sizeof(GLuint), GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT | GL_MAP_UNSYNCHRONIZED_BIT); ptr[0] = 0; glUnmapBuffer(GL_ATOMIC_COUNTER_BUFFER); glBindBufferBase(GL_ATOMIC_COUNTER_BUFFER, 0, atomicBuffer);

Atomikus számláló Számláló a shaderben GLSL 420-tól elérhető Deklaráció Műveletek layout(binding = 0, offset = 0) uniform atomic_uint counter; uint atomicCounter(atomic_uint c​); uint atomicCounterIncrement(atomic_uint c​); uint atomicCounterDecrement(atomic_uint c​);

Atomikus számláló