Commit Graph

91 Commits (fix-multithread)

Author SHA1 Message Date
EmaMaker e593696af3 restore seamless chunk borders 2023-10-03 20:47:53 +02:00
EmaMaker df933bebdd refactor message-sending system between main and update thread
restores blockpicking with new multithread system
2023-10-03 18:43:33 +02:00
EmaMaker 950e8c68ab separate input handling from main 2023-10-03 18:16:45 +02:00
EmaMaker 4c46811a25 delete meshes relative to deleted chunks 2023-10-03 18:04:06 +02:00
EmaMaker bc3c5587f8 calculateIndex belongs to Chunk namespace 2023-10-03 15:42:01 +02:00
EmaMaker b95ea49c93 gpu printed in debug window 2023-10-03 15:35:56 +02:00
EmaMaker 90fabf73ee add to queues only if completely free 2023-10-03 15:35:34 +02:00
EmaMaker da6ceeb605 set generation/meshing queue flags before pushing to queues 2023-10-03 12:31:02 +02:00
EmaMaker ca44c0f284 initial update/mesh/render thread communication refactor
Quirks to iron out:
- Some stuff is rendered wrong/not rendered (chunks missing)
- Still no way to delete stuff from ChunksToRender
2023-10-03 12:27:01 +02:00
EmaMaker a05d019c69 use concurrent_hash_map and parallel_for for chunk update
memory VIRT is higher, RES is the same. memory usage stabilizes after a while
2023-10-01 19:45:51 +02:00
EmaMaker 49edf2de85 move chunk update back to secondary thread 2023-10-01 18:12:14 +02:00
EmaMaker 8a3c963721 solve some memory leaks regarding thread communication queues
also temporarly move chunk update in primary thread
2023-10-01 18:11:54 +02:00
EmaMaker 1ec529fae5 fallimentary attempt at fixing memory management with onetbb 2023-09-30 15:09:26 +02:00
EmaMaker 00cdd22e10 renderer: try frustum culling only if chunk has vertices 2023-09-22 09:06:48 +02:00
EmaMaker a65fc44069 renderer: correct distance check 2023-09-21 17:13:21 +02:00
EmaMaker 3f02ca91db chunkmgr: proper use of int instead of uint in chunk indices 2023-09-21 16:58:18 +02:00
EmaMaker 01f1f9da16 squashed commits
erase chunk buffers only after marking as to be deleted

update chunks around player with a cube instead of concentric spheres

only generate chunks around player, update all chunks use onetbb::parallel_for
2023-09-21 15:49:50 +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 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 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 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 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 950c43b163 refactor chunk meshing routine 2023-07-19 12:56:55 +02:00
EmaMaker e7fc35ec47 create chunk mesh as cloud of points 2023-07-19 12:42:23 +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 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 105fff0029 write number of triangles to Chunk only when sending to GPU
previously the current number of vertices was stored in the chunk, and the same variable got later reused for the number of triangles. This modification increases clarity and avoid glitches when blockpicking
2023-05-26 23:07:04 +02:00
EmaMaker 6113886117 multithreaded blockpicking 2023-05-26 23:03:18 +02:00
EmaMaker 0acb8c7c1e free chunks from memory 2023-05-20 22:15:32 +02:00
EmaMaker e225babb0c chunkmesher: external queue of chunk mesh data
instead of every chunk having its own queue

This decreases usage of ram
2023-05-20 22:15:32 +02:00
EmaMaker 78e3bc11e6 initial update and render with concurrent DS 2023-05-20 22:15:15 +02:00
EmaMaker 1d3132cf3c use oneTBB library 2023-04-29 14:54:09 +02:00
EmaMaker 52537715ef chunks: make chunk state atomic 2023-04-23 16:28:36 +02:00
EmaMaker 3daf994ac3 opengl: disable vsync
This way I can better watch how changes affect FPS/frame times, rather than have it capped at
60FPS/16.6ms
Does not introduce visible tearing.

The engine runs at about 170 FPS on my Tesla M40, and so does minecraft. It never goes past that, I think this is a
limitation of using prime offloading. Runs at 300FPS on average on the Radeon HD6850 to which I
normally offload the Tesla to
2023-04-10 00:45:25 +02:00