- Separate common project into 4 source sets
- Declare outgoing configurations for forge/fabric to depend on
- Re-compile source from each source set in each platform's compileJava
- Organize almost all remaining code into one of four modules
- Fix some incorrect inter-module dependencies
- Get Fabric into a working state
- The config, client commands, and model builders are still missing and registry freezing happens too late
- Move common build script stuff to buildSrc
- Set ideaSyncTask finalizedBy generatePackageInfos directly in
package-infos.gradle
- Enable loom multiproject optimization, though not sure if it makes a
difference for us yet
- Apply java, maven-publish to all projects
- Prefer the tasks.named() syntax for configuring tasks
- Separate shared configuration for platform projects into a separate
configure block
- Add more fields to processResources
- Make helper methods static
- Exclude duplicated package infos
- Make model builders abstract
- Move BakedModelBufferer as is into forge project
- Create Forge*ModelBuilders with modeldata parameters
- Wrap ModelBuilder ctors in factory methods
- Add FlywheelLibPlatform api, similar to api.internal package but for
lib-only/platform specific stuff
- Move TransformStack wrapping into FlywheelLibPlatform
- Create vanilla renderer through FlywheelLibPlatform
- Handle partial model initialization in separate event handler class
- Fix test configuration in common project
- Trying to get xplat forge working, fabric can wait until the common
project compiles
- Move backend manager event handling to separate class
- Move commands into forge for now
- Make FlwConfig an interface and move concrete impl into forge
- Remove event parameters from handlers than don't actually use them
- Add platform specific blockstate light emission for uniforms
- Remove example effect
- Add accessor for LevelRenderer#ticks
- Move loom.runs into subprojects closure
- Move common code sharing into subprojects closure
- Apply java plugin
- Fix runs not being generated by moving generatePackageInfos to the
bottom
- Move common gradle business from each subproject into the
rootProject.subprojects closure
- Add fabric.mod.json
- Register forge mixin configs
- Make blaze3d mixins remap = false
- Separate common, forge, and fabric mod entrypoints
- Do not clear instance handles when clearing an instancer
- Fixes case where a stolen handle gets cleared after changing
instancers
- Use a concurrent queue for initializing instancers in DrawManager
- Fixes race condition where only one of two instancers created in the
same moment get initialized
- Freeze registries in FMLLoadCompleteEvent
- Pass registry objects into freeze callback consumers
- Should make it more difficult to pass a callback to the wrong
registry
- Allow array elements in layouts with lengths in range [1, 256]
- Align each layout element to its primitive size instead of always
aligning to 4 bytes; this is the same as C struct alignment
- Rename package lib.visual.components -> component
- Add more methods to layout API interfaces to allow retrieving
information such as padding size and alignment
- Move Visual*Contexts inside their respective *Visual interfaces
- Acknowledge that TickableVisual.Context has no methods
- api_impl.vert: no need to try to pack in/out variables
- Go through some TODOs
- Simplify FlatLit interface and directly store packed light
- Rename getters in Events
- Document Effects
- LitVisualStorage: atomics are slow
- BakedModelBufferer: vanilla leaks too, they'll be freed when the game
exits
- Allow the user to configure the number of worker threads
- Allow the user to disable parallelism entirely without a jvm flag
- Move thread count logic into FlwTaskExecutor and make
ParallelTaskExecutor simply take a thread count as a parameter
- Always compile with highest supported GLSL version
- Allow indirect shaders to compile with as low as GLSL 420
- Fix GL extension checks for indirect
- Explicitly initialize GlCompat as early as possible to avoid invalid
initialization off render thread
- Fix exception thrown uploading indirect instances when an instance was
added in the same frame that the tail instance was deleted. We'd leave
behind some set changed bits out of bounds of the instance list, and
try to access those indices later
- Add out of bounds guards within forEachSetSpan, though I don't think
they're actually necessary
- Add AtomicBitset#set and #clear range methods
- Update all changed bits at once when deleting instances rather than
doing it in the loop
- Start iterating from the first set bit rather than 0 to save
potentially thousands of iterations
- Smarter model index uploading
- Draw! meshes in contractual order on instancing engine
- Rename DrawSet -> InstancedRenderStage and consolidate associated code
inside the class
- Re-use GroupKey between engines
- Sort instanced draws based on material and mesh index in model
- Make doCrumblingSort abstract on the instancer class and re-use it
between engines
- Cannibalize shade separated vertex consumer to function as the mesh
emitter for baked model buffering
- Create one MeshEmitter per chunk RenderType to allow more coherency
during multi block buffering
- MeshEmitters own BufferBuilders, and the buffering functions call
#begin on the mesh emitters directly
- Each time the emitter sees a quad with a different shade flag than the
previous run of quads, it emits a mesh and begins again
- Finally, the buffering functions call #end on the mesh emitters to
emit trailing meshes and clear transient state
- Add diffuse debug mode
- Order indirect draws by mesh index first
- Remove non-shade separated option from buffering utilities because it
allows you to opt in to incorrect behaviour
- Remove TessellatedModel
- Document mesh ordering contract in Model
- Remove Visual#shouldReset and associated logic
- Instead, delete and add visuals when the level renderer is notified
of a block state change (that has a block entity)
- This does remove some control from BEVs, but it greatly simplifies the
API and API contract
- Hook into ClientChunkCache#onLightUpdate for light updates to be
compatible with both vanilla and starlight at once
- Bump embeddium/occulus versions
- Move embedding uniform names to static finals and fix culling program
complaining about missing uniform names
- Light minecart visuals on init
- Upload instancers and model indices in separate loops in an
IndirectCullingGroup
- Reset changed bitset and update last* in separate method
- Don't need to upload instances anymore if the model index changes
- Compose transformations of embeddings
- Make EmbeddedEnvironment abstract and move light stuffs into
TopLevelEmbeddedEnvironment
- Add NestedEmbeddedEnvironment that only handles matrices, and tracks
a parent EmbeddedEnvironment
- AbstractEmbeddedEnvironment handles most of the deletion/update logic,
and also creates further NestedEmbeddedEnvironments
- EnvironmentStorage now only tracks environments and does not creat
them.
- Store packed instances in a uint[] in indirect
- Split the object buffer into an instance buffer and a model index
buffer
- Rename StructInstanceComponent to SsboInstanceComponent
- Expand abstraction in InstanceAssemblerComponent to allow both types
of instance assemblers to reuse per-element unpacking generation
- Separate FlwInstance struct generation into separate component,
InstanceStructComponent
- Also inline LayoutInterpreter into this class
- Move necessary internal definitions for components from api_impl to
common components_header shaders
- Use the same api_impl shader between pipelines
- Do not delete light volume memory when invalidated. Keep the block
around, and then use it again later when we collect more light
- Do not allocate fresh memory blocks when growing a light volume. Turns
out self-blitting is perfectly fine since we always start from the
volume's origin
- Inline BoxSet back into light volume. The precise tracking it did is
no longer relevant now that the embedding api has been simplified
- Light volumes now directly
- Simplify light invalidation api/impl
- There are 2 use cases for invalidating collected light:
- The embedding visual receives a light update
- The embedding visual moves
- In either case, it's in the visual's best interest to re-collect any
light it might need, rather than relying on the impl to copy
potentially outdated light.
- Do not sample the light volume if no light is collected
- Improve debug modes
- Calculate colors in the fragment shader to reflect any per-fragment
material/embedding alterations to the vertex output
- Fix light volume debug mode spewing rainbow seizure garbage
- Add light color debug mode
- Fix frame uniforms reserving too much space
- Fix level uniforms reserving too little space
- Actually move flw_constantAmbientLight to level uniforms
Squashed commit history:
* Add basic view.h matrices
* Add last values
* Add clean matrices
* Finish adding most view.h things to frame.glsl
* Document cameraIn- uniforms
* Add options uniform
* Begin on player uniforms
* Add more player uniforms
* Add level uniforms
* Fix uniform bindings
* Update options
* Fix offset alignments
* Add new uniforms to cull shader
* Fix simple things
* Make alpha 1 if team exists but does not have a color
* Fix mixin method names
* Provide all uniforms to cull shaders
* Move constant ambient light uniform to level group
* Level uniforms gets context from context
* Remove `clean` matrices for now
- Track exactly what blocks are contained in a light volume via BoxSet
- Fix segfault when a volume is expanded
- Shrink the volume when enough data is discarded
- I think the texture management is broken for this case