Releases: scallyw4g/bonsai
v1.6.2
-
Change color from a 16-bit palette index to 16-bit HSV encoded color
Handling color in the same way MagicaVoxel does (by using a fixed 255 element palette)
turned out to be a bad idea for several reasons. Firstly, if you import
multiple models from different sources, and those sources have more than 255
combined colors, what do you do? I opted to go for a 16-bit palette, but at
that point you might as well just do 16-bit color and be done with it. So,
that's what I did here.This change ended up being pretty sweeping, affecting world gen, asset/level
loading, particle systems, rendering. -
Implement HSV color picker
-
Implement a Modal widget in the UI
-
Change "SeedBrushWithSelection" to work with destructive brush previews
-
Fix a race condition sometimes causing the main thread to unlock before the render thread had completed
-
Fix some edge cases with negatively offset brushes and small selection regions
-
Fix v3_u8 normal data being incorrectly encoded on negative edge
-
Fix a frame of lag when changing the selection region with a brush active
v1.6.2-rc1
Changelog
v1.6.1
-
Change untextured_3d_geometry_buffer to have a
data_type Type
This is a pretty major internal change. untextured_3d_geometry_buffers can
now switch between 32-bit float and 8-bit int. When loading a model from
disk, the size of the model is taken into account and the appropriate type
is chosen dynamically.This required a fair rewrite of the low-level vertex buffering routines to
be able to handle the permutations. This is still somewhat of a WIP; I
didn't finish all of them and the ones not done fall-back to the most
general routine, which is the slowest. I expect I'll rewrite/delete this
code again before performance in that code is the biggest problem I have. -
Change world updates to happen in serial on a dedicated thread
Previous to this, multiple world updates could be in-flight at any given
time, which if overlapping would stomp on each other. Serializing updates
onto a single thread ensures that:
a) Updates are correct
b) Updates happen in the order they were issued
c) Chunks affected by multiple updates on a single frame only have their
mesh rebuilt once(c) is accomplished by completing all queued update jobs and then issuing
the chunk mesh rebuild jobs, one per unique chunk updated. -
Add ability to create new assets from a world selection and serialize
.chunk
assets to disk
The selection region is saved out as a world_chunk -
Add ability to load asset
.chunk
s from disk -
Add abiltiy to render AssetType_WorldChunk
-
Fix layered brush previews crashing the program
-
Fix crash in AreEqual if null pointers were passed
-
Fixed failing tests, added test runs to CI/CD
v1.6.1-rc5
Mark chunk_flag as a @bitfield
v1.6.1-rc4
Fix a couple failed assertions
v1.6.1-rc3
Remove an annoying assertion
V1.6.1-rc2
Merge pull request #74 from scallyw4g/develop Develop
V1.6.1-rc1
Update changelog
v1.6.0
-
Renderer now lives on its own thread.
This is a major architectural change that deserves far more of an
explanation than I'm going to provide here.I've been wanting to split the renderer onto it's own thread for quite some
time, mostly as an academic exercise.It turned out to create more maintenance burden than I would have liked,
although it does make a few operations easier/cleaner, such as freeing GPU
resources from worker threads.The API is a message-queue based system for which most of the boilerplate is
generated by poof. There's anasyncify_render_function
poof routine that
takes a function prototype and spits out anAsync
version of the function
which pushes a render job onto a work queue. At this point it's up to the
programmer to remember to go actually call the function in the renderer
(which is made easier by being reminded of the new, non-enumerated case by the compiler). -
Debug system once again welded directly into the program instead of compiled to a DLL
I got tired of maintaining globals in so many places and decided the cost of
having the debug system split out into a DLL was not worth the flexibility
of being able to load it in other programs. If I want to use the profiler
in other programs, I'll just compile it in. -
Special, compressed vertex data type for world_chunk
I wanted to see how much performance I could squeeze out of compressing
position and normal data for chunks to 8 bit int from 32 bit float. Turns
out not a massive amount (deferred renderer is mostly texture-bound), but
it did shave off a bit. -
Many other misc fixes
I didn't document them along the way, and wrote this months after the work was
done, so .. who knows.
v1.5.2-rc2
Update stdlib