annotate README.md @ 1443:768bf1a8407b default tip main

add: hello-triangle example, did: update according readme parts
author sam <sam@basx.dev>
date Mon, 24 Feb 2025 10:09:41 +0700
parents 0f3f2017b054
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
922
9d30ec7fb91e add: some notes
sam <sam@basx.dev>
parents: 337
diff changeset
1 Note: If you are reading this on Github, please not that this is only a mirror
1266
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
2 repository and the newest code is hosted on my mercurial repository at
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
3 https://hg.basx.dev/games/semicongine/.
922
9d30ec7fb91e add: some notes
sam <sam@basx.dev>
parents: 337
diff changeset
4
289
0eef4eba9c17 add: another completed feature
Sam <sam@basx.dev>
parents: 274
diff changeset
5 # Semicongine
41
cc8724250d65 fix: organize notes a bit
Sam <sam@basx.dev>
parents: 8
diff changeset
6
926
f8974736e446 did: smile, just for the sake of testing mercurial hooks :)
sam <sam@basx.dev>
parents: 925
diff changeset
7 Hi there
8
1134f41a49e9 add: a few missing changes
Sam <sam@basx.dev>
parents:
diff changeset
8
213
b5d9410a8184 add: resource packaging and loading for different resource types, simplify build commands, update readme
Sam <sam@basx.dev>
parents: 202
diff changeset
9 This is a little game engine, mainly trying to wrap around vulkan and the
b5d9410a8184 add: resource packaging and loading for different resource types, simplify build commands, update readme
Sam <sam@basx.dev>
parents: 202
diff changeset
10 operating system's windowing, input and audio system. I am using the last
b5d9410a8184 add: resource packaging and loading for different resource types, simplify build commands, update readme
Sam <sam@basx.dev>
parents: 202
diff changeset
11 programming language you will ever need, [Nim](https://nim-lang.org/)
41
cc8724250d65 fix: organize notes a bit
Sam <sam@basx.dev>
parents: 8
diff changeset
12
1301
bf92a730c83a add: documentation location
sam <sam@basx.dev>
parents: 1275
diff changeset
13 The (incomplete, autogenerated) API documentation is hosted at <https://semicongine.diademgames.com/>.
bf92a730c83a add: documentation location
sam <sam@basx.dev>
parents: 1275
diff changeset
14
1266
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
15 ## Features
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
16
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
17 The engine currently features the following:
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
18
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
19 - No dependencies outside of this repo (except zip/unzip on Linux). All
1275
9d6ce3c34c38 fix: Readme wording
sam <sam@basx.dev>
parents: 1269
diff changeset
20 dependencies are included (`libs` for library dependencies, `tools` for
9d6ce3c34c38 fix: Readme wording
sam <sam@basx.dev>
parents: 1269
diff changeset
21 binaries/scripts, `semicongine/thirdparty` for code dependencies)
1266
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
22 - Low-level, Vulkan-base rendering system
1275
9d6ce3c34c38 fix: Readme wording
sam <sam@basx.dev>
parents: 1269
diff changeset
23 - All vertex/uniform/descriptors/shader-formats can and must be defined
9d6ce3c34c38 fix: Readme wording
sam <sam@basx.dev>
parents: 1269
diff changeset
24 "freely". The only restriction that we currently have, is that vertex data is
9d6ce3c34c38 fix: Readme wording
sam <sam@basx.dev>
parents: 1269
diff changeset
25 non-interleaved.
1266
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
26 - A ton of compiletime checks to ensure the defined mesh-data and shaders are
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
27 compatible for rendering
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
28 - Simple audio mixer, should suffice for most things
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
29 - Simple input-system, no controller support at this time
1275
9d6ce3c34c38 fix: Readme wording
sam <sam@basx.dev>
parents: 1269
diff changeset
30 - Resource packaging of images, audio and 3D files as either folders, zip files or embedded in the executable
1267
4cf9872f7bb6 did: rename back to old name (no v2)
sam <sam@basx.dev>
parents: 1266
diff changeset
31 - Simple font and text rendering
1266
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
32 - A few additional utils like a simple storage API, a few algorithms for
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
33 collision detection, noise generation and texture packing, and a simple
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
34 settings API with hot-reloading
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
35
1367
0f3f2017b054 add: some reminders what we would like to do
sam <sam@basx.dev>
parents: 1302
diff changeset
36 ## Wishlist
0f3f2017b054 add: some reminders what we would like to do
sam <sam@basx.dev>
parents: 1302
diff changeset
37
1443
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
38 - Macro-based internal DSL to convert Nim code into GLSL/slang at compile time
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
39 - Better memory management
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
40 - Simple buffer resizing
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
41 - Mechanism to mark unused buffers
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
42 - Use mapped GPU buffers without copying (implement seq with pointers to GPU memory)
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
43 - Do not keep copy of content for un-mapped buffers around (only pass data on creating or update)
1367
0f3f2017b054 add: some reminders what we would like to do
sam <sam@basx.dev>
parents: 1302
diff changeset
44
1266
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
45 ## Hello world example
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
46
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
47 Attention, this project is not optimized for "hello world"-scenarios, so you
1302
4f1c3994009d add: some words to trigger CI docs
sam <sam@basx.dev>
parents: 1301
diff changeset
48 have to write quite a few lines to get something to display:
1266
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
49
1269
81450075ad89 fix: readme markup
sam <sam@basx.dev>
parents: 1267
diff changeset
50 ```nim
1266
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
51
1443
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
52 import ../semicongine
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
53 import ../semicongine/rendering
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
54 import ../semicongine/input
1266
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
55
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
56 # required
1443
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
57 initEngine("Hello triangle")
1266
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
58
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
59 # set up a simple render pass to render the displayed frame
1443
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
60 var renderpass = createDirectPresentationRenderPass(
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
61 depthBuffer = false, samples = VK_SAMPLE_COUNT_1_BIT
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
62 )
1266
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
63
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
64 # the swapchain, needs to be attached to the main renderpass
1443
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
65 setupSwapchain(renderpass = renderpass)
1266
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
66
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
67 # render data is used for memory management on the GPU
1443
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
68 var renderdata = initRenderData()
1266
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
69
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
70 type
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
71 # define a push constant, to have something moving
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
72 PushConstant = object
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
73 scale: float32
1443
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
74
1266
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
75 # This is how we define shaders: the interface needs to be "typed"
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
76 # but the shader code itself can freely be written in glsl
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
77 Shader = object
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
78 position {.VertexAttribute.}: Vec3f
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
79 color {.VertexAttribute.}: Vec3f
1443
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
80 pushConstant {.PushConstant.}: PushConstant
1266
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
81 fragmentColor {.Pass.}: Vec3f
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
82 outColor {.ShaderOutput.}: Vec4f
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
83 # code
1443
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
84 vertexCode: string =
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
85 """void main() {
1266
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
86 fragmentColor = color;
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
87 gl_Position = vec4(position * pushConstant.scale, 1);}"""
1443
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
88 fragmentCode: string =
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
89 """void main() {
1266
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
90 outColor = vec4(fragmentColor, 1);}"""
1443
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
91
1266
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
92 # And we also need to define our Mesh, which does describe the vertex layout
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
93 TriangleMesh = object
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
94 position: GPUArray[Vec3f, VertexBuffer]
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
95 color: GPUArray[Vec3f, VertexBuffer]
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
96
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
97 # instantiate the mesh and fill with data
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
98 var mesh = TriangleMesh(
1443
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
99 position: asGPUArray([vec3(-0.5, -0.5), vec3(0, 0.5), vec3(0.5, -0.5)], VertexBuffer),
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
100 color: asGPUArray([vec3(0, 0, 1), vec3(0, 1, 0), vec3(1, 0, 0)], VertexBuffer),
1266
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
101 )
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
102
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
103 # this allocates GPU data, uploads the data to the GPU and flushes any thing that is host-cached
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
104 # this is a shortcut version, more fine-grained control is possible
1443
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
105 assignBuffers(renderdata, mesh)
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
106 renderdata.flushAllMemory()
1266
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
107
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
108 # Now we need to instantiate the shader as a pipeline object that is attached to a renderpass
1443
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
109 var pipeline = createPipeline(Shader(), renderPass = renderPass)
1266
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
110
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
111 # the main render-loop will exit if we get a kill-signal from the OS
1443
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
112 while updateInputs():
1266
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
113 # starts the drawing for the next frame and provides us necesseary framebuffer and commandbuffer objects in this scope
1443
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
114 withNextFrame(framebuffer, commandbuffer):
1266
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
115 # start the main (and only) renderpass we have, needs to know the target framebuffer and a commandbuffer
1443
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
116 withRenderPass(
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
117 renderPass,
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
118 framebuffer,
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
119 commandbuffer,
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
120 frameWidth(),
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
121 frameHeight(),
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
122 vec4(0, 0, 0, 0),
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
123 ):
1266
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
124 # now activate our shader-pipeline
1443
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
125 withPipeline(commandbuffer, pipeline):
1266
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
126 # and finally, draw the mesh and set a single parameter
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
127 # more complicated setups with descriptors/uniforms are of course possible
1443
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
128 renderWithPushConstant(
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
129 commandbuffer = commandbuffer,
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
130 pipeline = pipeline,
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
131 mesh = mesh,
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
132 pushConstant = PushConstant(scale: 0.3),
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
133 )
1266
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
134
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
135 # cleanup
1443
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
136 checkVkResult vkDeviceWaitIdle(engine().vulkan.device)
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
137 destroyPipeline(pipeline)
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
138 destroyRenderData(renderdata)
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
139 destroyRenderPass(renderpass)
768bf1a8407b add: hello-triangle example, did: update according readme parts
sam <sam@basx.dev>
parents: 1367
diff changeset
140 destroyVulkan()
1266
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
141
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
142 ```
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
143
1275
9d6ce3c34c38 fix: Readme wording
sam <sam@basx.dev>
parents: 1269
diff changeset
144 ## Future development
41
cc8724250d65 fix: organize notes a bit
Sam <sam@basx.dev>
parents: 8
diff changeset
145
1266
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
146 For now all features that I need are implemented. I will gradually add more
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
147 stuff that I need, based on the games that I am developing. Here are a few
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
148 things that I consider integrating at a later point, once I have gather some
9e4dc93d4fa9 did: completely rewrite readme
sam <sam@basx.dev>
parents: 926
diff changeset
149 more experience what can/should be used across different projects:
194
93f661a20f74 did: a bit of cleanup with the config, also add some documentation
Sam <sam@basx.dev>
parents: 187
diff changeset
150
1269
81450075ad89 fix: readme markup
sam <sam@basx.dev>
parents: 1267
diff changeset
151 - [ ] More support for glTF format (JPEG textures, animations, morphing)
1275
9d6ce3c34c38 fix: Readme wording
sam <sam@basx.dev>
parents: 1269
diff changeset
152 - [ ] Some often used utils like camera-controllers, offscreen-rendering, shadow-map rendering, etc.
9d6ce3c34c38 fix: Readme wording
sam <sam@basx.dev>
parents: 1269
diff changeset
153 - [ ] Some UI-stuff
1269
81450075ad89 fix: readme markup
sam <sam@basx.dev>
parents: 1267
diff changeset
154 - [ ] Controller support