Proceedings of the Advanced Seminar on Modern Opengl
Total Page:16
File Type:pdf, Size:1020Kb
Proceedings of the advanced seminar on modern OpenGL Chair of computer graphics and visualization summer semester 2015 “OpenGL® and the oval logo are trademarks or registered trademarks of Silicon Graphics, Inc. in the United States and/or other countries worldwide.” Preface Table of Contents OpenGL (Open Graphics Library) is a hardware- and platform independent API for the generation 1 Basics 4 of 2D and 3D graphics. Since version 1.0, that was officially specified by the Architecture Review 1.1GrundlagenShader.................................... 5 Board (ARB), it has evolved to be one of the major APIs for GPU based rendering. Today, the specification contains more than 200 commands and data structures for all areas of computation 2 Common applications 12 with graphics cards. During its more than 20 years long development history, the API has undergone massive 2.1OpenGLTessellation................................... 13 changes. Initially, OpenGL was heavily based on abstraction and provided high level function- 2.2TheComputeShader................................... 19 ality to configure an otherwise fixed rendering pipeline. This approach was consistent with GPUs 2.3 Parallel Sorting Algorithms on GPUs . 25 at the time where most of the functionality was hard-wired. However, modern GPUs account for 2.4 State of the art regarding order-independent transparency with modern OpenGL . 31 the demand of high data throughput and flexibility. In order to catch up with this development, the OpenGL API changed drastically, for example by the introduction of shaders or the massive 2.5 Global illumination in real-time . 37 use of buffers. With recent versions of OpenGL 4, a variety of problems that used to be hard to tackle or required tricks and even misuse of the rendering pipeline, can be solved in an efficient 3 Frameworks and technical view 44 and elegant manner. 3.1 Frameworks für GPGPU-Programmierung . 45 This collection contains the work of the advanced seminar on computer graphics and visualiza- 3.2APIAlternativestoOpenGL.............................. 51 tion of the summer semester 2015 on modern GPU programming. It is divided into three areas. 3.3 Review of the advancing progress of Vulkan development . 59 First, basics are laid out that provide a detailed overview on the different shader stages. Then, a selection of common problems is described and elegant solutions are shown. Finally, frameworks for general programming on the GPU and alternative APIs such as DirectX, Mantle or Metal are presented. The collection ends with an overview on Vulkan, which is considered to be the long term successor of OpenGL. 2 Preface Table of Contents OpenGL (Open Graphics Library) is a hardware- and platform independent API for the generation 1 Basics 4 of 2D and 3D graphics. Since version 1.0, that was officially specified by the Architecture Review 1.1GrundlagenShader.................................... 5 Board (ARB), it has evolved to be one of the major APIs for GPU based rendering. Today, the specification contains more than 200 commands and data structures for all areas of computation 2 Common applications 12 with graphics cards. During its more than 20 years long development history, the API has undergone massive 2.1OpenGLTessellation................................... 13 changes. Initially, OpenGL was heavily based on abstraction and provided high level function- 2.2TheComputeShader................................... 19 ality to configure an otherwise fixed rendering pipeline. This approach was consistent with GPUs 2.3 Parallel Sorting Algorithms on GPUs . 25 at the time where most of the functionality was hard-wired. However, modern GPUs account for 2.4 State of the art regarding order-independent transparency with modern OpenGL . 31 the demand of high data throughput and flexibility. In order to catch up with this development, the OpenGL API changed drastically, for example by the introduction of shaders or the massive 2.5 Global illumination in real-time . 37 use of buffers. With recent versions of OpenGL 4, a variety of problems that used to be hard to tackle or required tricks and even misuse of the rendering pipeline, can be solved in an efficient 3 Frameworks and technical view 44 and elegant manner. 3.1 Frameworks für GPGPU-Programmierung . 45 This collection contains the work of the advanced seminar on computer graphics and visualiza- 3.2APIAlternativestoOpenGL.............................. 51 tion of the summer semester 2015 on modern GPU programming. It is divided into three areas. 3.3 Review of the advancing progress of Vulkan development . 59 First, basics are laid out that provide a detailed overview on the different shader stages. Then, a selection of common problems is described and elegant solutions are shown. Finally, frameworks for general programming on the GPU and alternative APIs such as DirectX, Mantle or Metal are presented. The collection ends with an overview on Vulkan, which is considered to be the long term successor of OpenGL. 3 EUROGRAPHICS 2015 / L. Zepner Volume 34 (2015), Number 2 (Editors) Grundlagen Shader L. Zepner1 1TU Dresden, Germany Abstract Dieses Paper gibt einen kurzen Überblick über die sechs Shader der OpenGL API. Zu jedem Shader werden die charakteristischen Eigenschaften, wie Ein- und Ausgaben, als auch Aufgaben definiert und mit knappen Beispielen verdeutlicht. Besonderer Fokus liegt dabei auf dem Unterschied zwischen den einzelnen Shadern und ihrem Beitrag zu einer Grafikanwendung. Categories and Subject Descriptors (according to ACM CCS): I.3.3 [Computer Graphics]: Grundlagen Shader— Vertex-Shader, Fragment-Shader, Tesselation Control-Shader, Tesselation Evaluation-Shader, Geometry-Shader, 1 Basics Compute-Shader 1. Einleitung OpenGL dient als abstrakte Schicht zwischen Anwendung und Hardware und unterteilt das Grafiksystem in verschie- dene Bereiche. Durch die Verwendung der OpenGL API ist es möglich auf dieses Grafiksystem zuzugreifen und plattfor- munabhängig Grafikanwendungen zu entwickeln. Program- mieren lassen sich die Anwendungen über Shader, welche durch fest eingebaute Teile der Pipeline verbunden sind. Shader werden in der OpenGL Shading Language geschrie- ben und in einem Programm-Objekt miteinander verlinkt. Figure 1: Überblick über die Grafikpipeline Jeder Shader hat seinen eigenen Wirkungsbereich und fest- gelegte Ein- und Ausgabemöglichkeiten, welche im Folgen- den beschrieben werden. [SWH13] der Teil, der von einem Nutzer frei definiert werden kann. Die festgelegten Bereiche, hier mit runden Ecken dargestellt, 2. Die Grafikpipeline sind nicht frei programmierbar. [SWH13] Die Grafikpipeline beinhaltet fünf integrierte Shader und Die Grundlage der OpenGL Programmierung ist die Ver- einen extra Shader. Der Compute-Shader besitzt eine Son- wendung von Shadern. Dabei handelt es sich um einzelne derstellung unter den Shadern, da dieser kein Teil der Gra- Programme, welche vom Nutzer implementiert werden kön- fikpipeline ist und in der Regel nur indirekt zum Rendern nen und die dadurch das Rendering der Grafik beeinflussen. von Grafiken genutzt wird. Aus diesem Grund wird er in Ab- Die Grundlage im Hinblick auf die Infrastruktur zwischen schnitt 8 gesondert angesprochen. den einzelnen Teilen bildet die Grafikpipeline. Sie bestimmt In der Minimalkonfiguration besteht ein Shaderprogramm das Verhalten und die Reihenfolge der einzelnen Phasen der aus mindestens einem Vertex-Shader, welcher alleine jedoch Grafikprogrammierung. [RK06] noch keine sichtbare Ausgabe erzeugen kann, weswegen oft Die Figure 1 gibt einen groben Überblick über die einzelnen auch ein Fragment-Shader integriert wird. Punkte, Linien Abschnitte. und Dreiecke bilden die Basiseinheiten von OpenGL auf Die Pipeline setzt sich aus programmierbaren und festge- welchen die Shader operieren und komplexere Primitive ge- legten Funktionsbereichen zusammen. Die Shader werden nerieren. Dieser Prozess unterteilt sich in zwei größere Teile, in der Grafik durch blaue Boxen hervorgehoben, sie sind welche sich in der Pipeline wiederfinden. Zuerst werden die c 2015 The Author(s) Computer Graphics Forum c 2015 The Eurographics Association and John Wiley & Sons Ltd. Published by John Wiley & Sons Ltd. EUROGRAPHICS 2015 / L. Zepner Volume 34 (2015), Number 2 (Editors) Grundlagen Shader L. Zepner1 1TU Dresden, Germany Abstract Dieses Paper gibt einen kurzen Überblick über die sechs Shader der OpenGL API. Zu jedem Shader werden die charakteristischen Eigenschaften, wie Ein- und Ausgaben, als auch Aufgaben definiert und mit knappen Beispielen verdeutlicht. Besonderer Fokus liegt dabei auf dem Unterschied zwischen den einzelnen Shadern und ihrem Beitrag zu einer Grafikanwendung. Categories and Subject Descriptors (according to ACM CCS): I.3.3 [Computer Graphics]: Grundlagen Shader— Vertex-Shader, Fragment-Shader, Tesselation Control-Shader, Tesselation Evaluation-Shader, Geometry-Shader, Compute-Shader 1. Einleitung OpenGL dient als abstrakte Schicht zwischen Anwendung und Hardware und unterteilt das Grafiksystem in verschie- dene Bereiche. Durch die Verwendung der OpenGL API ist es möglich auf dieses Grafiksystem zuzugreifen und plattfor- munabhängig Grafikanwendungen zu entwickeln. Program- mieren lassen sich die Anwendungen über Shader, welche durch fest eingebaute Teile der Pipeline verbunden sind. Shader werden in der OpenGL Shading Language geschrie- ben und in einem Programm-Objekt miteinander verlinkt. Figure 1: Überblick über die Grafikpipeline Jeder Shader hat seinen eigenen Wirkungsbereich und fest- gelegte Ein- und Ausgabemöglichkeiten, welche im Folgen- den