Browse code

WIP: Add GLBackendWxWidgets

Robert Cranston authored on 20/10/2021 21:11:33
Showing 1 changed files
... ...
@@ -2,20 +2,25 @@
2 2
 
3 3
 A [C++11][]/[OpenGL][] \>=[1.0][] [backend][] library.
4 4
 
5
-Currently supported backends:
5
+Currently supported backends (one from each category listed under
6
+[Context/Window Toolkits][] on the OpenGL wiki):
6 7
 
7
-| Name     | Category        | Define           | Include              | Class         |
8
-| --       | --              | --               | --                   | --            |
9
-| [GLFW][] | Windowing/input | `GLBACKEND_GLFW` | `glbackend_glfw.hpp` | `BackendGLFW` |
10
-| [SDL2][] | Multimedia      | `GLBACKEND_SDL`  | `glbackend_sdl.hpp`  | `BackendSDL`  |
8
+| Name          | Category           | Define                | Include                   | Class              |
9
+| --            | --                 | --                    | --                        | --                 |
10
+| [GLFW][]      | Windowing/input    | `GLBACKEND_GLFW`      | `glbackend_glfw.hpp`      | `BackendGLFW`      |
11
+| [SDL2][]      | Multimedia         | `GLBACKEND_SDL`       | `glbackend_sdl.hpp`       | `BackendSDL`       |
12
+| [wxWidgets][] | [Widget toolkit][] | `GLBACKEND_WXWIDGETS` | `glbackend_wxwidgets.hpp` | `BackendWxWidgets` |
11 13
 
12 14
 [`glbackend`]: https://git.rcrnstn.net/rcrnstn/glbackend
13 15
 [C++11]: https://en.wikipedia.org/wiki/C++11
14 16
 [OpenGL]: https://en.wikipedia.org/wiki/OpenGL
15 17
 [1.0]: https://en.wikipedia.org/wiki/OpenGL#Version_history
16 18
 [backend]: https://www.khronos.org/opengl/wiki/Related_toolkits_and_APIs#OpenGL_initialization
19
+[Context/Window Toolkits]: https://www.khronos.org/opengl/wiki/Related_toolkits_and_APIs#Context/Window_Toolkits
17 20
 [GLFW]: https://www.glfw.org
18 21
 [SDL2]: https://www.libsdl.org
22
+[wxWidgets]: https://www.wxwidgets.org
23
+[Widget toolkit]: https://en.wikipedia.org/wiki/Widget_toolkit
19 24
 
20 25
 ## Usage
21 26
 
... ...
@@ -337,12 +342,14 @@ System dependencies that need to be installed:
337 342
 -   Private (tests):
338 343
     -   [GLFW][] (e.g. [`libglfw3-dev`][]).
339 344
     -   [SDL2][] (e.g. [`libsdl2-dev`][]).
345
+    -   [wxWidgets][] (e.g. [`libwxgtk3.0-gtk3-dev`]).
340 346
 
341 347
 [OpenGL Extension Wrangler (GLEW)]: http://glew.sourceforge.net
342 348
 [`libgl1-mesa-dev`]: https://packages.debian.org/search?keywords=libgl1-mesa-dev
343 349
 [`libglew-dev`]: https://packages.debian.org/search?keywords=libglew-dev
344 350
 [`libglfw3-dev`]: https://packages.debian.org/search?keywords=libglfw3-dev
345 351
 [`libsdl2-dev`]: https://packages.debian.org/search?keywords=libsdl2-dev
352
+[`libwxgtk3.0-gtk3-dev`]: https://packages.debian.org/search?keywords=libwxgtk3.0-gtk3-dev
346 353
 
347 354
 ## Build system
348 355
 
Browse code

WIP: Add GLBackendSDL

Robert Cranston authored on 12/10/2021 04:12:23
Showing 1 changed files
... ...
@@ -7,6 +7,7 @@ Currently supported backends:
7 7
 | Name     | Category        | Define           | Include              | Class         |
8 8
 | --       | --              | --               | --                   | --            |
9 9
 | [GLFW][] | Windowing/input | `GLBACKEND_GLFW` | `glbackend_glfw.hpp` | `BackendGLFW` |
10
+| [SDL2][] | Multimedia      | `GLBACKEND_SDL`  | `glbackend_sdl.hpp`  | `BackendSDL`  |
10 11
 
11 12
 [`glbackend`]: https://git.rcrnstn.net/rcrnstn/glbackend
12 13
 [C++11]: https://en.wikipedia.org/wiki/C++11
... ...
@@ -14,6 +15,7 @@ Currently supported backends:
14 15
 [1.0]: https://en.wikipedia.org/wiki/OpenGL#Version_history
15 16
 [backend]: https://www.khronos.org/opengl/wiki/Related_toolkits_and_APIs#OpenGL_initialization
16 17
 [GLFW]: https://www.glfw.org
18
+[SDL2]: https://www.libsdl.org
17 19
 
18 20
 ## Usage
19 21
 
... ...
@@ -334,11 +336,13 @@ System dependencies that need to be installed:
334 336
     -   [OpenGL Extension Wrangler (GLEW)][] (e.g. [`libglew-dev`][]).
335 337
 -   Private (tests):
336 338
     -   [GLFW][] (e.g. [`libglfw3-dev`][]).
339
+    -   [SDL2][] (e.g. [`libsdl2-dev`][]).
337 340
 
338 341
 [OpenGL Extension Wrangler (GLEW)]: http://glew.sourceforge.net
339 342
 [`libgl1-mesa-dev`]: https://packages.debian.org/search?keywords=libgl1-mesa-dev
340 343
 [`libglew-dev`]: https://packages.debian.org/search?keywords=libglew-dev
341 344
 [`libglfw3-dev`]: https://packages.debian.org/search?keywords=libglfw3-dev
345
+[`libsdl2-dev`]: https://packages.debian.org/search?keywords=libsdl2-dev
342 346
 
343 347
 ## Build system
344 348
 
Browse code

Add GLBackendGLFW

Robert Cranston authored on 12/10/2021 04:08:43
Showing 1 changed files
... ...
@@ -4,14 +4,16 @@ A [C++11][]/[OpenGL][] \>=[1.0][] [backend][] library.
4 4
 
5 5
 Currently supported backends:
6 6
 
7
-| Name | Category | Define | Include | Class |
8
-| --   | --       | --     | --      | --    |
7
+| Name     | Category        | Define           | Include              | Class         |
8
+| --       | --              | --               | --                   | --            |
9
+| [GLFW][] | Windowing/input | `GLBACKEND_GLFW` | `glbackend_glfw.hpp` | `BackendGLFW` |
9 10
 
10 11
 [`glbackend`]: https://git.rcrnstn.net/rcrnstn/glbackend
11 12
 [C++11]: https://en.wikipedia.org/wiki/C++11
12 13
 [OpenGL]: https://en.wikipedia.org/wiki/OpenGL
13 14
 [1.0]: https://en.wikipedia.org/wiki/OpenGL#Version_history
14 15
 [backend]: https://www.khronos.org/opengl/wiki/Related_toolkits_and_APIs#OpenGL_initialization
16
+[GLFW]: https://www.glfw.org
15 17
 
16 18
 ## Usage
17 19
 
... ...
@@ -330,10 +332,13 @@ System dependencies that need to be installed:
330 332
 -   Public (interface):
331 333
     -   [OpenGL][] (e.g. [`libgl1-mesa-dev`][]).
332 334
     -   [OpenGL Extension Wrangler (GLEW)][] (e.g. [`libglew-dev`][]).
335
+-   Private (tests):
336
+    -   [GLFW][] (e.g. [`libglfw3-dev`][]).
333 337
 
334 338
 [OpenGL Extension Wrangler (GLEW)]: http://glew.sourceforge.net
335 339
 [`libgl1-mesa-dev`]: https://packages.debian.org/search?keywords=libgl1-mesa-dev
336 340
 [`libglew-dev`]: https://packages.debian.org/search?keywords=libglew-dev
341
+[`libglfw3-dev`]: https://packages.debian.org/search?keywords=libglfw3-dev
337 342
 
338 343
 ## Build system
339 344
 
Browse code

Add GLBackend, GLBackendDefault

Robert Cranston authored on 12/10/2021 00:02:06
Showing 1 changed files
... ...
@@ -2,12 +2,327 @@
2 2
 
3 3
 A [C++11][]/[OpenGL][] \>=[1.0][] [backend][] library.
4 4
 
5
+Currently supported backends:
6
+
7
+| Name | Category | Define | Include | Class |
8
+| --   | --       | --     | --      | --    |
9
+
5 10
 [`glbackend`]: https://git.rcrnstn.net/rcrnstn/glbackend
6 11
 [C++11]: https://en.wikipedia.org/wiki/C++11
7 12
 [OpenGL]: https://en.wikipedia.org/wiki/OpenGL
8 13
 [1.0]: https://en.wikipedia.org/wiki/OpenGL#Version_history
9 14
 [backend]: https://www.khronos.org/opengl/wiki/Related_toolkits_and_APIs#OpenGL_initialization
10 15
 
16
+## Usage
17
+
18
+### Overview
19
+
20
+```cpp
21
+#include <glbackend_default.hpp>
22
+
23
+
24
+constexpr auto size = GLBackend::Size{640, 480};
25
+
26
+
27
+int main()
28
+{
29
+    // Create.
30
+    auto backend = GLBackendDefault("Default", size);
31
+
32
+    // Render loop.
33
+    backend.callback_render([&]()
34
+    {
35
+        glClearColor(1.0F, 0.0F, 0.0F, 0.5F);
36
+        glClear(GL_COLOR_BUFFER_BIT);
37
+        if (backend.key("Enter"))
38
+            backend.tga_write("screenshot.tga");
39
+        if (backend.key("Escape"))
40
+            backend.running(false);
41
+    });
42
+    backend.run();
43
+}
44
+```
45
+
46
+### Global settings
47
+
48
+#### Errors
49
+
50
+After backend construction (see [Lifetime](#lifetime)) errors are non-fatal and
51
+are reported to the output configured with
52
+
53
+```
54
+using OutputCallback = std::function<void(std::string const & message)>;
55
+
56
+static std::ostream * output_stream(std::ostream * output_stream);
57
+static OutputCallback output_callback(OutputCallback output_callback);
58
+```
59
+
60
+(defaults to `std::cerr` and empty, respectively). The old values are returned.
61
+
62
+If the backend is constructed with `debug = true` (see [Lifetime](#lifetime))
63
+and OpenGL \>=4.3 or the extension [`GL_KHR_debug`][] is available, OpenGL
64
+debug messages with a severity other than `GL_DEBUG_SEVERITY_NOTIFICATION` are
65
+also reported using the same output. The messages received from the OpenGL
66
+implementation are modified slightly to remove trailing whitespace and double
67
+quotes surrounding file names in lines starting with *"path":line*.
68
+
69
+[`GL_KHR_debug`]: https://www.khronos.org/registry/OpenGL/extensions/KHR/KHR_debug.txt
70
+
71
+#### File system
72
+
73
+If the value passed to
74
+
75
+```
76
+static std::string directory(std::string directory);
77
+```
78
+
79
+is non-empty it is prepended, with a separating `"/"`, to all relative paths
80
+(defined as paths not starting with `"/"`) given as arguments to other
81
+functions. The old value is returned.
82
+
83
+### Lifetime
84
+
85
+Constructors [`throw`][] [`std::runtime_error`][] on failure, with a `what()`
86
+describing the error.
87
+
88
+To use a backend, instantiate the appropriate `Backend`-derived class. Several
89
+objects can be instantiated, using the same or different underlying backends.
90
+
91
+All the provided `Backend`-derived classes' constructors take the following
92
+arguments, in this order:
93
+
94
+-   Window-related:
95
+    -   `std::string const & title`: The window title.
96
+    -   `int width`: The window width.
97
+    -   `int height`: The window height.
98
+    -   `bool fullscreen = false`: Whether or not to create a fullscreen
99
+        window.
100
+    -   `bool transparent = false`: Whether or not to use the alpha channel of
101
+        the default framebuffer to blend with the background. If this is
102
+        enabled, window decorations are disabled and the window is kept on top
103
+        of other windows.
104
+-   [Context][]-related:
105
+    -   `bool debug = false`: If `false`, creates a [no error][] context. If
106
+        `true`, creates a [debug context][], and enables [debug output][].
107
+    -   `int samples = -1`: The number of samples used in
108
+        [mutlisample][multisampling] anti-aliasing (MSAA) of the default
109
+        framebuffer (`-1` lets the implementation decide).
110
+    -   `int version_major = -1`: The major version with which the OpenGL
111
+        [context][] must be compatible (`-1` lets the implementation decide).
112
+    -   `int version_minor = -1`: The minor version with which the OpenGL
113
+        [context][] must be compatible (`-1` lets the implementation decide).
114
+
115
+The relevant underlying backend is automatically initialized at instantiation.
116
+If no other code has initialized that backend, it is guaranteed to be
117
+terminated when the last instance is destroyed. It is backend-specific if the
118
+backend is terminated even if other code has initialized it.
119
+
120
+The provided `Backend`s create double buffered, 32 bit color (including alpha),
121
+24 bit depth, 8 bit stencil OpenGL [context][]s. If the requested version is
122
+\>=3.2 a [forward compatible][] core context is created.
123
+
124
+The `Backend`s are move(-constructible)-only types.
125
+
126
+[`throw`]: https://en.cppreference.com/w/cpp/language/throw
127
+[`std::runtime_error`]: https://en.cppreference.com/w/cpp/error/runtime_error
128
+[context]: https://www.khronos.org/opengl/wiki/OpenGL_Context
129
+[debug context]: https://www.khronos.org/opengl/wiki/Debug_Context
130
+[debug output]: https://www.khronos.org/opengl/wiki/Debug_Output
131
+[no error]: https://www.khronos.org/opengl/wiki/OpenGL_Context#No_error_contexts
132
+[multisampling]: https://www.khronos.org/opengl/wiki/Multisampling
133
+[forward compatible]: https://www.khronos.org/opengl/wiki/OpenGL_Context#Forward_compatibility
134
+
135
+### Info
136
+
137
+```
138
+std::string info() const;
139
+```
140
+
141
+returns information about the underlying backend.
142
+
143
+### Context
144
+
145
+Each `Backend` instance has its own OpenGL [context][], which is made current
146
+at instantiation. If several `Backend`s are used,
147
+
148
+```
149
+void current();
150
+```
151
+
152
+can be called to make the context of a specific one current.
153
+
154
+### Render loop
155
+
156
+```
157
+void events();
158
+```
159
+
160
+handles events from the underlying backend.
161
+
162
+```
163
+void swap();
164
+```
165
+
166
+swaps the OpenGL default framebuffer.
167
+
168
+```
169
+bool running() const;
170
+bool running(bool running);
171
+```
172
+
173
+queries and sets, respectively, the window "running" state.
174
+
175
+```
176
+float time() const;
177
+float time(float time);
178
+```
179
+
180
+queries and sets, respectively, the current time, in seconds.
181
+
182
+```
183
+using Update = std::function<void(float t, float dt, bool final)>;
184
+using Render = std::function<void()>;
185
+
186
+Backend & update(Update const & update);
187
+Backend & render(Render const & render);
188
+```
189
+
190
+sets the `update` and `render` callbacks, respectively, used by
191
+
192
+```
193
+void run(float dt_max = 0.0F);
194
+```
195
+
196
+which is a convenience function that uses the member functions and callbacks
197
+described in this section to implement a render loop. `t` is the current time,
198
+which is set to `0.0F` at the start of `run`. If `dt_max` is `0.0F`, the
199
+`update` callback is called once for every frame, with `dt` holding the elapsed
200
+time. Otherwise, the `update` callback is called as many times as necessary to
201
+advance through the elapsed time while ensuring `dt` is never larger than
202
+`dt_max`. `final` is `true` if this is the final update of the frame. `render`
203
+is called at the end of each frame. Either of the callbacks can be unset.
204
+
205
+### Input and output
206
+
207
+```
208
+void lock(bool lock);
209
+```
210
+
211
+controls mouse locking. If `true` is passed the mouse is locked, which means it
212
+is hidden and prevented from leaving the window. Passing `false` restores the
213
+normal behavior.
214
+
215
+The input (keyboard and mouse) and output (framebuffer) state can be accessed
216
+in two different ways: registering callbacks and / or polling. The same
217
+function name is used for both methods (with function overloading). These are
218
+described below.
219
+
220
+#### Keyboard
221
+
222
+The
223
+
224
+```
225
+key
226
+```
227
+
228
+*callback / poll* takes as argument a `std::string const & key` and *is called
229
+when / returns `true` if* that key is pressed. Valid arguments are
230
+backend-specific but guaranteed to support:
231
+
232
+-   `"A"` through `"Z"`
233
+-   `"0"` through `"9"`
234
+-   `"Left"`, `"Right"`, `"Up"`, `"Down"`
235
+-   `"Enter"`, `"Escape"`, `"Tab"`, `"Backspace"`
236
+-   `"Control"`, `"Shift"`, `"Alt"`
237
+
238
+#### Mouse
239
+
240
+The
241
+
242
+```
243
+button
244
+```
245
+
246
+*callback / poll* takes as argument an `int button` and *is called when /
247
+returns `true` if* that button is pressed. Valid arguments are backend-specific
248
+but guaranteed to support `1`, `2`, and `3`.
249
+
250
+The
251
+
252
+```
253
+scroll
254
+```
255
+
256
+*callback / poll* takes as *argument / returns* `std::array<float, 2> scroll`.
257
+
258
+The
259
+
260
+```
261
+position
262
+```
263
+
264
+*callback / poll* takes as *argument / returns* `std::array<float, 2>
265
+position`.
266
+
267
+The
268
+
269
+```
270
+move
271
+```
272
+
273
+*callback / poll* takes as *argument / returns* `std::array<float, 2> move`.
274
+
275
+#### Framebuffer
276
+
277
+The
278
+
279
+```
280
+size
281
+```
282
+
283
+*callback / poll* takes as *argument / returns* `std::array<int, 2> size`.
284
+
285
+### Persisting frames
286
+
287
+There is basic support for writing frames to disk, useful for testing or
288
+screenshot functionality.
289
+
290
+Writing is done with
291
+
292
+```
293
+bool frame_tga_write(
294
+    std::string const & path
295
+) const;
296
+```
297
+
298
+As the name suggests, the frame is written as an uncompressed [BGRA][]
299
+[Truevision TGA][] image, selected because it is widely supported and has a
300
+trivial header and data layout. The function returns `true` on success, on
301
+failure an [error](#errors) is emitted and `false` is returned.
302
+
303
+```
304
+bool frame_tga_compare(
305
+    std::string const & path,
306
+    bool write_on_failed_read = false
307
+) const;
308
+```
309
+
310
+can be used to compare the current frame to one written previously. Note that a
311
+general TGA reader is not used; the comparison is done byte for byte, header
312
+included. If the given `path` cannot be read an [error](#errors) is emitted and
313
+if `write_on_failed_read` is `true` the current frame is instead written to
314
+`path`.
315
+
316
+`".tga"` is automatically added to the end of `path`. In addition, `directory`
317
+is applied if appropriate, see [File system](#file-system).
318
+
319
+No function is provided to read the frame without interacting with the file
320
+system. If this is required, simply use [`glReadPixels`][].
321
+
322
+[BGRA]: https://en.wikipedia.org/wiki/RGBA_color_model
323
+[Truevision TGA]: https://en.wikipedia.org/wiki/Truevision_TGA
324
+[`glReadPixels`]: https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glReadPixels.xhtml
325
+
11 326
 ## Dependencies
12 327
 
13 328
 System dependencies that need to be installed:
Browse code

Add project

Robert Cranston authored on 04/06/2021 19:51:44
Showing 1 changed files
... ...
@@ -8,6 +8,107 @@ A [C++11][]/[OpenGL][] \>=[1.0][] [backend][] library.
8 8
 [1.0]: https://en.wikipedia.org/wiki/OpenGL#Version_history
9 9
 [backend]: https://www.khronos.org/opengl/wiki/Related_toolkits_and_APIs#OpenGL_initialization
10 10
 
11
+## Dependencies
12
+
13
+System dependencies that need to be installed:
14
+
15
+-   Public (interface):
16
+    -   [OpenGL][] (e.g. [`libgl1-mesa-dev`][]).
17
+    -   [OpenGL Extension Wrangler (GLEW)][] (e.g. [`libglew-dev`][]).
18
+
19
+[OpenGL Extension Wrangler (GLEW)]: http://glew.sourceforge.net
20
+[`libgl1-mesa-dev`]: https://packages.debian.org/search?keywords=libgl1-mesa-dev
21
+[`libglew-dev`]: https://packages.debian.org/search?keywords=libglew-dev
22
+
23
+## Build system
24
+
25
+This project supports [CMake][] and uses [`cmake-common`][]. There are several
26
+ways to use it in other CMake-based projects:
27
+
28
+-   With [`find_package`][]: ([Package][] and) [install][] it on the system.
29
+
30
+-   With [`add_subdirectory`][]: Bundle it.
31
+
32
+-   With [`FetchContent`][]: Download it as part of the CMake configure step.
33
+
34
+-   With [`cmake-common`][]: Use any of the above methods through a simplified
35
+    interface.
36
+
37
+As usual, use [`add_dependencies`][] or [`target_link_libraries`][] (or
38
+`cmake-common`'s `DEPENDENCIES_*`) to declare the dependency.
39
+
40
+[CMake]: https://cmake.org
41
+[`cmake-common`]: https://git.rcrnstn.net/rcrnstn/cmake-common
42
+[`FetchContent`]: https://cmake.org/cmake/help/v3.14/module/FetchContent.html
43
+[`add_subdirectory`]: https://cmake.org/cmake/help/v3.14/command/add_subdirectory.html
44
+[`find_package`]: https://cmake.org/cmake/help/v3.14/command/find_package.html
45
+[Package]: #Package
46
+[Install]: #Install
47
+[`add_dependencies`]: https://cmake.org/cmake/help/v3.14/command/add_dependencies.html
48
+[`target_link_libraries`]: https://cmake.org/cmake/help/v3.14/command/target_link_libraries.html
49
+
50
+### Configure and generate
51
+
52
+To configure and generate a build tree, use `cmake`:
53
+
54
+```sh
55
+cmake -B _build
56
+```
57
+
58
+To set the build type, pass e.g. `-D`[`CMAKE_BUILD_TYPE`][]`=Release`.
59
+
60
+[`cmake`]: https://cmake.org/cmake/help/v3.14/manual/cmake.1.html#generate-a-project-buildsystem
61
+[`CMAKE_BUILD_TYPE`]: https://cmake.org/cmake/help/v3.14/variable/CMAKE_BUILD_TYPE.html
62
+
63
+### Build
64
+
65
+To build, use [`cmake --build`][]:
66
+
67
+```sh
68
+cmake --build _build
69
+```
70
+
71
+To disable building tests, pass `-D`[`BUILD_TESTING`][]`=OFF`.
72
+
73
+[`cmake --build`]: https://cmake.org/cmake/help/v3.14/manual/cmake.1.html#build-a-project
74
+[`BUILD_TESTING`]: https://cmake.org/cmake/help/v3.14/module/CTest.html
75
+
76
+### Test
77
+
78
+To run tests, use [`ctest`][]:
79
+
80
+```sh
81
+(cd _build && ctest)
82
+```
83
+
84
+To show output from failing tests, pass `--output-on-failure`. To show output
85
+from all tests, pass `--verbose`.
86
+
87
+[`ctest`]: https://cmake.org/cmake/help/v3.14/manual/ctest.1.html
88
+
89
+### Package
90
+
91
+To package, use [`cpack`][]:
92
+
93
+```sh
94
+(cd _build && cpack)
95
+```
96
+
97
+[`cpack`]: https://cmake.org/cmake/help/v3.14/manual/cpack.1.html
98
+
99
+### Install
100
+
101
+To install onto the current system, use [`cmake --install`][]:
102
+
103
+```sh
104
+cmake --install _build
105
+```
106
+
107
+To set the prefix, pass e.g. `-D`[`CMAKE_INSTALL_PREFIX`][]`="$HOME/.local"`.
108
+
109
+[`cmake --install`]: https://cmake.org/cmake/help/v3.14/manual/cmake.1.html#install-a-project
110
+[`CMAKE_INSTALL_PREFIX`]: https://cmake.org/cmake/help/v3.14/variable/CMAKE_INSTALL_PREFIX.html
111
+
11 112
 ## License
12 113
 
13 114
 Licensed under the [ISC License][] unless otherwise noted, see the
Browse code

Add license

Robert Cranston authored on 04/06/2021 16:10:01
Showing 1 changed files
... ...
@@ -7,3 +7,11 @@ A [C++11][]/[OpenGL][] \>=[1.0][] [backend][] library.
7 7
 [OpenGL]: https://en.wikipedia.org/wiki/OpenGL
8 8
 [1.0]: https://en.wikipedia.org/wiki/OpenGL#Version_history
9 9
 [backend]: https://www.khronos.org/opengl/wiki/Related_toolkits_and_APIs#OpenGL_initialization
10
+
11
+## License
12
+
13
+Licensed under the [ISC License][] unless otherwise noted, see the
14
+[`LICENSE`][] file.
15
+
16
+[ISC License]: https://choosealicense.com/licenses/isc
17
+[`LICENSE`]: LICENSE
Browse code

Add readme

Robert Cranston authored on 04/06/2021 16:09:16
Showing 1 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,9 @@
1
+# [`glbackend`][]
2
+
3
+A [C++11][]/[OpenGL][] \>=[1.0][] [backend][] library.
4
+
5
+[`glbackend`]: https://git.rcrnstn.net/rcrnstn/glbackend
6
+[C++11]: https://en.wikipedia.org/wiki/C++11
7
+[OpenGL]: https://en.wikipedia.org/wiki/OpenGL
8
+[1.0]: https://en.wikipedia.org/wiki/OpenGL#Version_history
9
+[backend]: https://www.khronos.org/opengl/wiki/Related_toolkits_and_APIs#OpenGL_initialization