EmaMaker
d0ddf2256f
move chunkmeshdata into its own file
...
And let it be managed by chunkmesher instead of chunkmanager
2023-10-04 13:23:49 +02:00
EmaMaker
88abf21502
multithread: refactor update thread, communication between mesh/gen/upd threads
...
- Use parallel_for to iterate over all the stored chunks
- Only push a chunk to a queue if it is not already present, using chunk state bitfield (solves
memory leak, continously adding new elements to a queue)
- Properly delete an element from chunks concurrent_hash_map using accessor, then free the memory
(solves memory leak: not being able to delete old elements and always adding new ones)
Breaks:
- Rendering (will be properly refactored in a future commit)
- Block picking (will be refactored in a future commit)
2023-10-04 13:10:05 +02:00
EmaMaker
f4947d5f70
debugwindow: catch exception to avoid crash when missing parameters
2023-10-04 12:58:00 +02:00
EmaMaker
4e7fadd2b9
chunk: use chunk state to mark presence of chunk in thread communication queues
2023-10-04 12:57:57 +02:00
EmaMaker
d1b151f92f
chunk: typedef for chunk state
2023-10-04 12:57:57 +02:00
EmaMaker
1a50d1fb84
chunkmgr: span chunk indices in a cube around the player, not a sphere
2023-10-03 22:45:09 +02:00
EmaMaker
60bbc85682
chunk: store index in chunk itself
2023-10-03 22:45:09 +02:00
EmaMaker
490f207e39
chunk/mgr: calculate index belongs to chunk namespace
2023-10-03 22:45:09 +02:00
EmaMaker
c6d00c4200
fix type mismatch in chunk index/coordinates
...
typedef an appropriate chunk_index_t and chunk_intcoord_t
2023-10-03 22:45:09 +02:00
EmaMaker
2a57796ed2
move input handling from main into dedicated file
2023-10-03 22:45:09 +02:00
EmaMaker
ca043bac68
threads: allow for proper shutdown
...
using `if` instead of `while` avoids the need to wait for the queue to empty to shutdown the thread
2023-10-03 22:44:55 +02:00
EmaMaker
f6f4057109
update player debug variables in main instead of chunkmgr
2023-10-03 22:09:03 +02:00
EmaMaker
353ef37186
renderer: perform frustum culling only if chunk has vertices
2023-10-03 22:08:40 +02:00
EmaMaker
880c634be0
camera: set atomic position at startup
...
this avoids the first few chunk update loops recognizing the camera as being positioned at (0,0,0), which in turns avoids wastefully generating chunks out of view at startup
2023-10-03 22:08:40 +02:00
EmaMaker
50bc52a679
debug window: use wireframe from checkbox in rendering
2023-09-20 12:42:05 +02:00
EmaMaker
07068d740a
debug window: use block type from slider in block picking
2023-09-20 12:42:05 +02:00
EmaMaker
52696f2dde
debug window: use crosshair type from slider in shader
2023-09-20 12:42:05 +02:00
EmaMaker
9d2d0c8772
debug window: populate with data
2023-09-20 12:42:05 +02:00
EmaMaker
f526e9b152
create debug window with imgui
2023-09-20 12:42:05 +02:00
EmaMaker
e7c4b2d56b
lib: add dearimgui lib
2023-09-20 12:42:05 +02:00
EmaMaker
a6a419fdff
hud: crosshair with fragment shader
2023-09-20 12:42:05 +02:00
EmaMaker
3f61a6a753
renderer: screenshot by saving render texture to file
2023-09-20 12:37:32 +02:00
EmaMaker
00a4b8e1e2
renderer: properly handle framebuffer resizing
2023-09-20 12:37:32 +02:00
EmaMaker
4b723d58fa
libs: import stb_image_write
2023-09-20 12:37:32 +02:00
EmaMaker
1c0ee1315f
renderer: render scene to a texture
...
And then render the texture onto a quad that fills the screen
The screen-filled quad upon which the texture is rendered must never be rendered in wireframe. Rendering in wireframe only makes sense when rendering the world on the texture
2023-09-20 12:37:32 +02:00
EmaMaker
6670f3b41c
shader: make geometry shader not mandatory
2023-09-20 12:37:32 +02:00
EmaMaker
41275486a6
blockpicking: eventually mesh nearby chunks when destroying a block
...
this prevents stray floating quads when destroy a block near the chunk border
2023-08-12 08:44:46 +02:00
EmaMaker
3d0d8b7593
chunkmgr: chunk can be meshed if all neighbors are generated
...
(Restores seemless chunk borders)
2023-08-08 17:54:20 +02:00
EmaMaker
8d160c3239
Merge pull request 'Responsive block picking during generation and meshing' ( #7 ) from better-generation into main
...
Reviewed-on: #7
2023-07-30 12:30:31 +02:00
EmaMaker
ca04afcc89
Merge pull request 'Better World Generation' ( #6 ) from better-generation into main
...
Reviewed-on: #6
2023-07-30 12:28:59 +02:00
EmaMaker
1bea6c835c
separate mesh and generation threads, with priority queues for input
...
Allows blockpicking while the world is generating, without hiccups
2023-07-30 12:17:51 +02:00
EmaMaker
83f0aafba0
give leaves a sprinkle of color
2023-07-30 12:17:51 +02:00
EmaMaker
b0cf413baf
generator: add comments + a bit of refactor
2023-07-30 12:17:48 +02:00
EmaMaker
baa8d14bb3
generator: optimize leaves generation routine with LUT
2023-07-30 12:17:00 +02:00
EmaMaker
381cd698c7
Initial tree generation
...
Still very slow because multiple noise evaluations are needed
2023-07-30 12:16:32 +02:00
EmaMaker
9bc5bab3b2
mountain terrain with multiple octaves of noise
2023-07-30 12:13:08 +02:00
EmaMaker
8313ee97bc
Merge pull request 'Use Geometry Shader to generate the Mesh' ( #5 ) from vram-reduce into main
...
Reviewed-on: #5
2023-07-19 13:19:18 +02:00
EmaMaker
4fa89fd2f5
gamma correction
2023-07-19 13:06:01 +02:00
EmaMaker
950c43b163
refactor chunk meshing routine
2023-07-19 12:56:55 +02:00
EmaMaker
54c7fa172f
generate mesh from points using geometry shader
2023-07-19 12:42:45 +02:00
EmaMaker
e7fc35ec47
create chunk mesh as cloud of points
2023-07-19 12:42:23 +02:00
EmaMaker
ea036f403c
shader.hpp: add geometry shader support
2023-07-19 12:41:44 +02:00
EmaMaker
bff9e6ad4f
move normal data to own array
2023-07-18 21:18:12 +02:00
EmaMaker
a7b4671517
toggle wireframe with F
2023-07-18 20:12:25 +02:00
EmaMaker
4ada24e0d5
chunkmesher: check for NULLBLK to avoid holes at chunkborders
2023-07-18 20:02:37 +02:00
EmaMaker
73f38e5d2f
Merge pull request 'Seamless chunk borders' ( #4 ) from chunkborders into main
...
Reviewed-on: #4
2023-06-01 21:37:17 +02:00
EmaMaker
393e5ca9b2
chunkmesher: seamless chunkborders by checking neighbouring chunks
2023-06-01 21:31:18 +02:00
EmaMaker
f798575cac
chunkmanager: add function getBlockAtPos, returns block at world pos
...
Returns Block::NULLBLK only to signal an invalid position
2023-06-01 21:31:18 +02:00
EmaMaker
0ebbb897dc
chunk: handle special cases for getBlocks
...
Returning Block::AIR when chunk is not yet generated (CHUNK_STATE_GENERATED set to false) is also a way to avoid thread-unsafe concurrent
access to the IntervalMaps data structure, since CHUNK_STATE_GENERATED is set to false before
generating the Chunk and set again to true after generation is complete
2023-06-01 21:31:18 +02:00
EmaMaker
32d0475dbf
Merge pull request 'multithread blockpicking' ( #2 ) from multithread into main
...
Reviewed-on: #2
2023-06-01 17:47:48 +02:00