|
1 | 1 | # Learn OpenGL(ES) with Delphi
|
2 | 2 |
|
3 |
| -**Under Construction...** |
4 |
| - |
5 |
| -This is the Delphi version of Joey de Vries's excellent set of [Learn OpenGL](https://learnopengl.com/) tutorials. Those tutorials focus on **modern** desktop OpenGL using C and C++. |
6 |
| - |
7 |
| -This version differs from Joey's version in a couple of areas though: |
8 |
| -* It uses [Delphi](https://www.embarcadero.com/products/delphi) as the programming language. |
9 |
| -* It focuses primarily on a subset of OpenGL called OpenGL ES. In particular OpenGL ES 2.0. |
10 |
| -* As a result, the tutorials are cross-platform and work on Windows, macOS, iOS and Android. |
11 |
| -* For setting up the render window and handling user input, Joey's version uses the [GLFW](http://www.glfw.org/) utility library. However, since GLFW is not supported for iOS and Android, we cannot use it. (If you are interested in Windows and macOS only, you can download my [GLFW Language Bindings for Delphi](https://github.com/neslib/DelphiGlfw)). I could have used another utility library like [SDL2](https://www.libsdl.org/), but decided to write all platform-specific code in Delphi instead, which can be a good learning experience in itself. |
12 |
| -* For 2D and 3D math, Joey's version uses the [GLM](http://glm.g-truc.net/) library. For Delphi, we could use Delphi's built-in math functions (like the `System.Math.Vectors` unit). However, I use this opportunity to plug my [FastMath](https://github.com/neslib/FastMath) library, which API is very similar to Delphi's, but is **much much** faster. Since you probably want to use OpenGL for high performance graphics, you should use a high performance math library as well. |
13 |
| - |
14 |
| -## Delphi Requirements |
15 |
| - |
16 |
| -These tutorials require Delphi 10.1 Berlin or later. The reason for this is that Delphi Berlin re-introduced 8-bit strings on mobile platforms (only of type `RawByteString` though). This makes it easier and faster to interoperate with OpenGL and other C-API's that use 8-bit strings. |
17 |
| - |
18 |
| -If you use an older version of Delphi, you can still use it when you target Windows and/or macOS only. If you want the tutorials to work on mobile platforms as well with an older Delphi version, then you will have to modify the code everywhere RawByteStrings are used and perform your own Unicode-to-MarshaledAString marshalling. |
19 |
| - |
20 |
| -## OpenGL ES |
21 |
| - |
22 |
| -All tutorials uses the OpenGL ES 2.0 subset of OpenGL, unless noted otherwise. The ES suffix stands for Embedded Systems. This flavor of OpenGL is supported on iOS and Android and also forms the basis for WebGL (meaning that these tutorials can be translated to a web-browser as well). |
23 |
| - |
24 |
| -For the most part, as long as you stick to the OpenGL ES subset, your app will work on desktop platforms (Windows and macOS) as well. This makes writing cross-platform OpenGL apps much easier. |
25 |
| - |
26 |
| -## Platform-Specific Glue Code |
27 |
| - |
28 |
| -Setting up the application and handling user input requires platform-specific code. We could use Delphi's FireMonkey framework to handle this for us. However, FireMonkey is not well suited for high-performance apps and games. In addition, FireMonkey on Windows uses DirectX for 3D graphics and not OpenGL. |
29 |
| - |
30 |
| -So, these tutorials don't use FireMonkey at all, but instead handle app setup and input handling manually. More about this is in the "Creating an OpenGL App" tutorial. |
31 |
| - |
32 |
| -## Dependencies |
33 |
| - |
34 |
| -Besides Delphi, these tutorials have a couple of dependencies. These can be downloaded and used for free and don't require any installation into system directories: |
35 |
| - |
36 |
| -* [FastMath](https://github.com/neslib/FastMath) is used for all vector and matrix math. |
37 |
| -* [DelphiStb](https://github.com/neslib/DelphiStb) are Delphi header translations for some awesome public domain C [stb libraries](https://github.com/nothings/stb). We mostly use the `Neslib.Stb.Image` unit for cross-platform loading of image files (since we cannot use FireMonkey for that). |
38 |
| - |
39 |
| -Put the FastMath and DelphiStb libraries at the same directory level as these tutorials. Otherwise, the Delphi projects cannot find them. For example, a directory structure like this: |
40 |
| - |
41 |
| -* C:\Development |
42 |
| - * \Neslib |
43 |
| - * \DelphiLearnOpenGL |
44 |
| - * \DelphiStb |
45 |
| - * \FastMath |
46 |
| - |
47 |
| -## Structure |
48 |
| - |
49 |
| -Learn OpenGL(ES) with Delphi is broken down into a number of general subjects. Each subject contains several sections that each explain different concepts in large detail. Each of the subjects can be found in the Tutorial Index below and each tutorial links to the previous and next tutorials. The subjects are taught in a linear fashion (so it is advised to start from the top to the bottom, unless otherwise instructed) where each page explains the background theory and the practical aspects. |
50 |
| - |
51 |
| -To make the tutorials easier to follow and give them some added structure the site contains blockquotes and code blocks. |
52 |
| - |
53 |
| -### Blockquotes |
54 |
| - |
55 |
| -> :information_source: Information blockquotes encompasses some notes or useful features/hints about OpenGL or the subject at hand. |
56 |
| -
|
57 |
| - |
58 |
| -> :warning: Warning blockquotes will contain warnings or other features you have to be extra careful with. |
59 |
| -
|
60 |
| -> :exclamation:`Windows` Blockquotes starting with an exclamation followed by one or more platforms (`Windows`, `macOS`, `iOS` or `Android`) contain notes specific to those platforms,. |
61 |
| -
|
62 |
| -> :link: Link blockquotes link to the corresponding code in the GitHub repository. |
63 |
| -
|
64 |
| -### Code |
65 |
| -You will find plenty of small pieces of code are located in boxes with syntax-highlighted code as you can see below: |
66 |
| - |
67 |
| -```Delphi |
68 |
| -// This box contains code |
69 |
| -``` |
70 |
| - |
71 |
| -Since these provide only snippets of code, wherever necessary I will provide a link to the entire source code required for a given subject. |
72 |
| - |
73 |
| -## <a name="Contents"></a>Tutorials Index |
74 |
| - |
75 |
| -* Getting Started |
76 |
| - * [OpenGL (ES)](Documentation/1.GettingStarted/1.0a.OpenGL.md) |
77 |
| - * [Creating an OpenGL App](Documentation/1.GettingStarted/1.0b.CreateApp.md) |
78 |
| - * [1.1 Hello Window](Documentation/1.GettingStarted/1.1.HelloWindow.md) |
79 |
| - * [1.2 Hello Triangle](Documentation/1.GettingStarted/1.2.HelloTriangle.md) |
80 |
| - * [1.3 Shaders](Documentation/1.GettingStarted/1.3.Shaders.md) |
81 |
| - * [1.4 Textures](Documentation/1.GettingStarted/1.4.Textures.md) |
82 |
| - * 1.5 Transformations |
83 |
| - * 1.6 Coordinate Systems |
84 |
| - * 1.7 Camera |
85 |
| - * Review |
86 |
| -* Lighting |
87 |
| - * Colors |
88 |
| - * Basic Lighting |
89 |
| - * Materials |
90 |
| - * Lighting Maps |
91 |
| - * Light Casters |
92 |
| - * Multiple Lights |
93 |
| - * Review |
94 |
| -* Model Loading |
95 |
| - * Assimp |
96 |
| - * Mesh |
97 |
| - * Model |
98 |
| -* Advanced OpenGL |
99 |
| - * Depth Testing |
100 |
| - * Stencil Testing |
101 |
| - * Blending |
102 |
| - * Face Culling |
103 |
| - * Framebuffers |
104 |
| - * Cubemaps |
105 |
| - * Advanced Data |
106 |
| - * Advanced GLSL |
107 |
| - * Geometry Shader |
108 |
| - * Instancing |
109 |
| - * Anti Aliasing |
110 |
| -* Advanced Lighting |
111 |
| - * Advanced Lighting |
112 |
| - * Gamma Correction |
113 |
| - * Shadows |
114 |
| - * Shadow Mapping |
115 |
| - * Point Shadows |
116 |
| - * CSM |
117 |
| - * Normal Mapping |
118 |
| - * Parallax Mapping |
119 |
| - * HDR |
120 |
| - * Bloom |
121 |
| - * Deferred Shading |
122 |
| - * SSAO |
123 |
| -* PBR |
124 |
| - * Theory |
125 |
| - * Lighting |
126 |
| - * IBL |
127 |
| - * Diffuse Irradiance |
128 |
| - * Specular IBL |
129 |
| -* In Practive |
130 |
| - * Debugging |
131 |
| - * Text Rendering |
132 |
| - * 2D Game |
133 |
| - * Breakout |
134 |
| - * Setting Up |
135 |
| - * Rendering Sprites |
136 |
| - * Levels |
137 |
| - * Collisions |
138 |
| - * Ball |
139 |
| - * Collision Detection |
140 |
| - * Collision Resolution |
141 |
| - * Particles |
142 |
| - * Postprocessing |
143 |
| - * Powerups |
144 |
| - * Audio |
145 |
| - * Render Text |
146 |
| - * Final Thoughts |
| 3 | +This is the code repository that accompanies the [Learn OpenGL(ES) with Delphi](https://github.com/neslib/DelphiLearnOpenGL/wiki) tutorials. |
0 commit comments