2 Fases ◦ Data van CPU overbrengen naar GPU Mesh data, Render State, Blend State... ◦ GPU rendert scene Programeerbare shaders verwerken input Scene wordt naar de Frame Buffer geschreven
Vroeger (OpenGL 1): ◦ Fixed Function Pipeline: voorgeprogrameerde manier van belichten ◦ Direct Mode: Data wordt direct vanaf de CPU gerenderd met de GPU Nu (OpenGL 3+): ◦ Programmeerbare Shaders: volledige controlle over rendering proces ◦ Buffer Objects: Data van de CPU wordt op de GPU gebufferd voordat het gerenderd wordt
Resources alloceren ◦ We vragen OpenGL om ruimte te maken voor een resource op de GPU glCreateShader, glGenVertexArray, glGenBuffers... ◦ Bind resource aan de huidige context glBindVertexArray, glBindBuffer ◦ Upload data naar de GPU glBufferData...
Shaders verwerken input en renderen de scene 4 soorten shaders ◦ Vertex shaders ◦ Geometry shaders ◦ Tesselation shaders ◦ Fragment shaders (DX Pixel Shaders)
We bufferen Data naar de GPU VertexArrayObject: ◦ Bevat buffers (VBO) met info voor een Mesh VertexBufferObject: ◦ Bevat Data zoals vertices, normals, colors, texCoords...
1. Maak nieuwe VAO aan 2. Bind de VAO aan de context 3. Maak VBOs aan, voor elk atribuut één 4. Bind VBO 5. Upload Data naar VBO
Shaders zijn geschreven in OpenGL Shading Language (GLSL) ◦ Lijkt erg op C Interface CPU/GPU ◦ in: input van GPU, bijvoorbeeld een vertex of color ◦ out: output van Vertex Shader vor Fragment Shader ◦ uniform: constante gezet vanaf CPU Straks klein voorbeeld
1. Maak shaders aan 2. Upload source (in de vorm van een string) 3. Compileer shaders 4. Maak GLSL Programma aan 5. Voeg shaders aan programma toe 6. Link de shaders in het programma
1. Clear het screen 2. Bind GLSL Program 3. Zet uniforms in de shaders 4. Bind VAO 5. glDrawArrays 6. Unbind VAO 7. Unbind GLSL Program 8. SwapBuffers