Skip to content

Releases: scallyw4g/bonsai

v1.6.2

10 Sep 14:14
Compare
Choose a tag to compare
  • 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

10 Sep 14:00
Compare
Choose a tag to compare
v1.6.2-rc1 Pre-release
Pre-release
Changelog

v1.6.1

31 Aug 22:51
Compare
Choose a tag to compare
  • 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 .chunks 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

31 Aug 22:17
Compare
Choose a tag to compare
v1.6.1-rc5 Pre-release
Pre-release
Mark chunk_flag as a @bitfield

v1.6.1-rc4

31 Aug 21:35
Compare
Choose a tag to compare
v1.6.1-rc4 Pre-release
Pre-release
Fix a couple failed assertions

v1.6.1-rc3

31 Aug 18:59
Compare
Choose a tag to compare
v1.6.1-rc3 Pre-release
Pre-release
Remove an annoying assertion

V1.6.1-rc2

31 Aug 18:40
04e9d6e
Compare
Choose a tag to compare
V1.6.1-rc2 Pre-release
Pre-release
Merge pull request #74 from scallyw4g/develop

Develop

V1.6.1-rc1

31 Aug 18:34
Compare
Choose a tag to compare
V1.6.1-rc1 Pre-release
Pre-release
Update changelog

v1.6.0

24 Aug 16:48
Compare
Choose a tag to compare
  • 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 an asyncify_render_function poof routine that
    takes a function prototype and spits out an Async 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

23 Aug 20:53
Compare
Choose a tag to compare
v1.5.2-rc2 Pre-release
Pre-release
Update stdlib