- Do not store a list of initialized instancers.
- Remove AbstractInstancer#delete. Only InstancedInstancer was using it
so move instancer deletion to InstancedDrawManager.
- Improve CompilationHarness builder pattern and reusability.
- Pass compilation keys directly to compileAndReportErrors.
- Build the harness at the end of the builder chain rather than at the
beginning.
- Use same CompilationHarness for apply shader and scatter shader.
- Remove _ prefix from packed struct fields.
- Make element type's byte size 4-aligned.
- Remove byteSize method from Element.
- Remove BufferLayout and associated classes.
- Replace InternalVertex with new Layout.
- Calculate InternalVertex stuff as static final fields.
- Elements track their own byte size.
- The byte size of an element type is unchanged.
- The byte size of an element is 4-aligned.
- Layout byte size now accounts for alignment.
- Generated packed fields are now always prefixed with an underscore.
- Elements are 4 byte aligned and store their offset.
- Make all ElementTypeImpls records.
- Implement unpacking for all types/reprs.
- Add many utilities to GlslExpr to facilitate unpacking.
- InstancedArraysComponent now fully uses Layouts.
- Trivial to get the glsl type name of a given Element.
- Also quite easy to get the attribute count without actually
creating the attribute list.
- IndirectComponent is WIP because unpacking is hard.
- Reorganize so all the unpacking stuff is in one loop.
- Instead of returning a list, collect crumbling instances via consumer.
- This is much friendlier to inheritance and generally better represents
the behavior we want from Visuals.
- Add Self parameter to TransformStack.
- Replace duck interface impl of TransformStack for PoseStack with
lazily constructed wrapper object.
- Document Models.
- Replace PARTIAL_DIR with TRANSFORMED_PARTIAl and allow for arbitrary
transformations with arbitrary keys.
- Will be useful for transforming by different enums, or using
alternative transforms by Direction.
- Add default impl of #delete to Instance.
- Store VisualizationContext in AbstractVisual.
- Reduce usage of @SuppressWarnings in Rotate and Transform.
- Fix AtomicBitset#nextClearBit
- Add test for AtomicBitset
- Remove unnecessary gl state stuff from IndirectEngine#renderCrumbling.
- Fix instance removal on IndirectEngine.
- Deleting an instance not at the end of the instancers list would
cause an exception to be thrown during upload caused by
out-of-bounds indexing.
- Fixed by unsetting changed for the tail of the instancers list.
- Add crumbling renderer for indirect backend.
- As usual, it's ugly.
- Submit one indirect draw per crumbling instance. Could do multidraw
here, but we'd have to perform the material sort which seems
unnecessary.
- Move gl-coupled BufferLayout and co. to lib.
- Add new Layout record to API.
- List of Elements, a sealed interface of type safe records
representing most possible vertex attributes.
- Deprecate InstanceType#getLayout.
- Add LayoutBuilder in lib for convenience.
- TODO: use new Layouts in backends.
- A scatter command is 2 uints:
- The first contains the size and source offset in the upper byte and
lower 3 bytes respectively.
- The destination offset.
- All offsets and sizes are in uints, not bytes.
- Use ScatterList write scatter commands.
- Use TransferList to collect transfers.
- Rather than consolidating transfers in a separate pass, do so as they
are collected.
- Reorganize StagingBuffer.
- Call setChanged in various visuals' #init.
- Not everything needs it because some just call their frame update
methods right away.
- Improve lazy update logic for bells.
- Visuals must manually call setChanged on Instances.
- Decreases the extent of resource contention and makes what's going on
more explicit.
- Remove self type parameter from FlatLit, I don't think it was ever
needed.
- Separate instance vertex shaders and instance cull shaders into
different files with separate getters in InstanceType
- Remove all occurrences of Names and Files inner classes
- Remove VertexType
- Rename ReusableVertexList to VertexView and all associated classes,
methods, fields, and variables
- Add VertexView#stride
- Make vertex compiler automatically include layout shader
- Fix instancing and indirect not setting correct vertex count before
writing mesh
- Abstract indirect buffers to deduplicate code.
- Write buffer handles when updating sizes.
- StagingBuffer internally handles deferring to a memCopy, accepting a
long consumer
- Add Model.boundingSphere()
- Fix MaterialRenderState not setting up polygon offset correctly
- Fix GlslSwitch using incorrect indentation for first and last line
- Tweak how instanced crumbling works
- Add CutoutShaders.ONE_TENTH
- Rename Contexts.WORLD to DEFAULT
- Rename Material.baseTexture() to texture
- Rename Transparency.LIGHTING to LIGHTNING
- Rename WriteMask.BOTH to COLOR_DEPTH
- Rename SimpleModel to SingleMeshModel and add new SimpleModel that
stores an arbitrary amount of meshes
- Remove flywheel:flywheel/api/* files and assume appropriate symbols
are automatically defined
- Rename many GLSL variables, functions, and constants
- Reorganize GLSL files
- Add NonExtendable annotation to some API classes
- Rename some Java classes, methods, fields, and variables
- Add staging buffer for indirect using unholy amounts of unsafe.
- Make GlFence RAII.
- Make all IndirectBuffers GPU only and use a shared staging buffer for
transfers.
- Add overlay to internal vertex format.
- Move interval vertex format related constants to helper class.
- Switch strides to long so java stops complaining about implicit casts
in multiplication.
- Remove VertexTypes#init as it's not needed anymore.
- Indirect now supports multiple meshes per model.
- Cull entire models at once and then apply the accumulated instance
count to each draw command in a separate compute pass.
- Add utility to calculate the bounding sphere for multiple meshes.
- Inline IndirectDrawSet into IndirectCullingGroup.
- Use MemoryBlocks for draw command and model descriptor storage.
- Fix leaked draw commands.
- Add IndirectModel to track bounding sphere and instancer stuffs.
- IndirectDrawCommand now references IndirectModel instead of Instancer.
- Remove BufferLayout from VertexType.
- Remove VertexType from mesh, and only allow writes to a VertexList.
- MeshPools directly refer to BufferLayout instead of going through
VertexType.
- Instancing and indirect backends use the block format internally.
- Remove layout shaders.
- Do not compile against VertexType.
- Do not sort draw calls by VertexType.
- Remove VertexType#REGISTRY.
- Make SimpleMaterial.Builder implement Material itself.
- Add way to copy a material.
- Move fog/cutout shaders to their own utility classes.
- Fix crumbling on cutout materials by overriding properties.
- Add helper in glsl for unpacking 2 shorts from one uint.
- Remove Fog enum.
- Add generic ResourceLocation Index in ShaderIndices.
- Add FogShader and CutoutShader API.
- Implement existing fog/cutout configurations as separate shaders.
- Simplify pipeline shaders to accommodate for new api.
- Separate fog and cutout ubershader components.
- This was much easier than I anticipated, seems we finally have a
usable compiler/shader stitcher.
- Pass fog and cutout IDs to ubershader via a 2x16 packed uint.
- Remove discardPredicate and fogFilter from default material shader.
- Pipeline shaders now implement all currently used material properties.
- Rename flw_initVertex/flw_initFragment to flw_begin*.
- Rename flw_contextVertex/flw_contextFragment to flw_end*.
- Bind the diffuse texture by hand instead of calling bindActive.
- Add cutout property to materials that need it.
- Remove storage qualifiers and compile guards from api sources.
- Replace api sources with empty stubs by poisoning the ShaderSources
cache.
- Pipelines redefine the shader api and are inserted at the top of a
compilation.
- Declare shader api methods in api sources.
- Fix crash in ErrorBuilder#pointAtLine
- Apply lid transform in ChestVisual#init.
- Fixes a horrifying bug where all chest lids you haven't looked
directly at yet appear coinciding at the origin.
- Merge object and batch ID buffer.
- ShaderCompiler accepts a Compilation callback.
- Use callback to enable the conservative depth extension only in
fragment shaders.
- Query subgroup size if available and use callback to set a compile
definition in compute shaders.
- Add MaterialShaders
- MaterialShaders must be registered
- Materials are no longer registered
- Material now returns a MaterialShaders instead of the locations of
each shader
- Rename MaterialIndices to MaterialShaderIndicies
- Improve MaterialShaderIndicies and move it to the backend package
- Use RegisterClientReloadListenersEvent instead of adding listeners
manually
- Clean up and improve functional interfaces used in Plans.
- Allow safely running TaskExecutor#sync* methods off-thread.
- Formalize the concept of "main thread" in task executor.
- Improve tests for main-thread plans.
- Rename ReloadRenderersEvent to ReloadLevelRendererEvent
- Rename Engine#renderCrumblingInstances to #renderCrumbling
- Make all mixin classes package-private and abstract
- Make all event classes final and document which event bus they are
posted on
- Add EndClientResourceReloadEvent
- Replace some usages of ReloadLevelRendererEvent with
EndClientResourceReloadEvent, including ModelHolder and ModelCache
- Always add all existing entities from world to
VisualizationManagerImpl on construction if level is instanceof Level
- Delete all VisualizationManagerImpls on resource reload
- Improve MemoryBlock utility
- Add MemoryBlock#copyTo(MemoryBlock)
- Remove MemoryBlock#reallocTracked and make #realloc create a tracked
block if and only if the existing block is tracked
- Fix reallocating a debug memory block creating a regular memory
block
- Change BakedModelBufferer to only invoke the result consumer if the
data is not empty
- Improve BackendArgument
- Fix classloading BackendArgument early causing it to return
incomplete suggestions
- Always allow specifying namespace, allow matching only by path, and
always display suggested IDs with namespace
- Implement crumbling for batching engine.
- It's ugly! (the code)
- Need to support translucency sorting in batching.
- Plumb RenderType#sortOnUpload through to DrawBuffer.
- Allocate room in DrawBuffer for BufferBuilder to write indices.
- Set nextElementByte on injectForRender.
- Remove RenderStage from DrawBuffer, isn't really needed.
- Make some fields public, so they can be accessed by BatchedCrumbling.
- Track TransformCalls in BatchedInstancer.
-
- Move crumbling tbn calculation back to the fragment shader.
- Pass the center of the crumbling block position as a uniform.
- Calculate how to flip the crumbling texture such that it tiles well at
corners in model space.
- Move ugly crumbling code to utility class and improve bucketing.
- Cache uniform locations in GlProgram.
- Reintroduce BatchedDrawManager.
- BatchingEngine no longer implements plan itself, instead uses
composition of other plans.
- Add DynamicNestedPlan, runs many plans provided at execution time.
- Add ContextFunction and ContextSupplier to match *Consumer and
*Runnable.
- Add unit tests for DynamicNestedPlan and IfElsePlan.
- Add InstancerStorage so engines can share common code.
- Instanced and Indirect DrawManagers extend InstancerStorage, while
BatchingEngine keeps an anonymous class for it.
- AbstractEngine now has a InstancerStorage getter and does some
delegation so the implementations don't have to.
- InstancedInstancer directly stores the list of DrawCalls it belongs
to.
- InstancingEngine no longer accepts a context parameter.
- Make the /flywheel backend command default to the flywheel nampspace.
- When crumbling, group DrawCalls by ShaderState.
- Pass all instances for a given crumbling progress at once.
- Use a map to associate initialized instancers with draw calls.
- Document most of the fields in InstancedDrawManager.
- Fix race condition in InstancedDrawManager#getInstancer.
- Will follow up for BatchingEngine and IndirectDrawManager.
- renderCrumblingInstances accepts a list.
- Implement crumbling for InstancingEngine.
- It's ugly.
- Track what draw calls belong with what instancers.
- DrawCalls lazily create a second VAO for one-off rendering.
- Bind instance vbo with offset to scratch VAO to emulate a draw with
baseInstance.
- Ignore discard predicate in crumbling context.
- SimpleContext takes a Consumer to set sampler bindings.
- Fix debugCrumbling command.
- Compile shaders against all contexts.
Side note: not sure if Context is the right place for crumbling. It
feels like it should be a material, but I don't know how that would
work.
- Rename Engine#delete -> #invalidate per pepper's TODO.
- Plans
- Remove thenMap and andMap from Plan API.
- Add builder for MapContextPlan for better composition.
- Add IfElsePlan and Builder to "fork" on a condition.
- VisualizationManagerImpl no longer rolls a special Plan class and
instead uses a plan composition chain.
- Crumbling
- Not implemented yet!! But the skeleton is taking shape.
- Remove LevelRendererAccessor, and instead directly pass the map of
destructionProgress to the VisualizationManagerImpl when it's time
to render crumbling instances.
- Give Instances a Handle getter.
- Add way to get a block entity visual at a given position.
- Add Engine#renderCrumblingInstance stub.
- Use JOML better where we can.
- Inline MatrixUtil#store and #toJoml
- FlwShaderUniforms keeps a scratch matrix around for mutating the
viewProjection.
- Directly store a Quaternion4f in OrientedInstance to avoid creating
new objects in the batching transformers.
- Move FrameContext creation to a functor.
- We do need to check the renderDebug flag still :ioa:
- Make VisualUpdatePlan's internal plan not null.
- Remove ClientMainMixin :sad:
- Forge's new earlywindow stuff means there's no opportunity for
Flywheel the mod to inject renderdoc before the window is
initialized.
- The workaround for now is to breakpoint in FML's
DisplayWindow#initialize and evaluate
`System.loadLibrary("renderdoc")` manually.
- Free from mojmath, have to flip many matrix field accesses.
- Free the memory allocated in model cache.
- Shout out to pepper's DebugMemoryBlock telling me *exactly* where a
leak was from.
- Instancing and batching seem to mostly work, indirect appears to be
rendering instances in the wrong places, though they are culled from
their real location.
- Fix up/comment out some touchy mixins.
- Get chests to render.
- There's something wrong with the projection matrix.
- Add comment to DebugMemoryBlockImpl's stack walker usage.
- Add Axes class to (temporarily?) replace old mojmath Vector3f.$axis.
- Add helper for getting a random float between 2 values.
- Implement diffuse light formula.
- Fix debug overlay event.
- Try and fix ChunkRebuildHooksMixin but the first parameter isn't
visible. Hopefully stubbing in Object will compile later.
- Make a quick pass resolving conflicts
- Mostly joml related, or to do with the world -> level rename
- Basically left model builders and virtual levels alone
- There are also some forge events that seem to no longer exist
- Start with a cherry pick from 1.20/dev
- Copy over newer gradle wrapper related things from the forge 1.20 mdk
- Follow example from 1.20 mdk to update build.gradle and
settings.gradle
- Update parchment version
- Separate concept of Flags from TaskExecutor.
- Instead, allow TaskExecutor to sync until, or while a given condition
is met.
- Flags directly store their state as an AtomicBoolean.
- Switch `executor.syncOn(flag)` to `executor.syncUntil(flag::isRaised)`
- Remove tests made redundant by improved interface.
- Add ModelPartConverter and remove ModelPartBuilder
- ModelPartConverter can convert ModelParts into Flywheel Meshes,
optionally using a transformation and TextureMapper. A
ModelLayerLocation and TextureAtlasSprite can be used instead to quickly
replicate entity models.
- Add ModelHolder and ModelCache to lazily initialize models and
automatically delete them on renderer reload
- Add SimpleModel and remove SimpleLazyModel
- Add flw.useSerialExecutor system property
- Rename ModelBufferingUtil to BakedModelBufferer
- Remove Instance.copy
- Remove Mesh.name
- Make FlwMemoryTracker thread-safe
- Fix potential thread-safety issues, texture issues, and memory leaks
related to previously memoized models
- Fix MinecartVisual only updating when not visible
- Fix ChestVisual locks not moving when opening the chest
- Add concept of flags to TaskExecutor.
- Can raise and lower flags from any thread.
- Add TaskExecutor#syncTo
- Behaves much like #syncPoint, but exits early as soon as it detects
that the requested flag has been raised.
- Document all methods in TaskExecutor.
- Do not discard tasks when destroying a VisualizationManagerImpl.
- Use flags in VisualizationManagerImpl to track frame plan and tick
plan completion.
- Use flags in BatchingEngine to track stage buffering completion and
flush completion.
- Synchronization is now needed in BatchedDrawTracker#draw.
- Use flags in IndirectEngine and InstancingEngine to track flush
completion.
- Add unit tests to validate flag behavior.
- Rename OnMainThreadPlan -> SyncedPlan.
- Add VisualizationManager and VisualManager API
- Simplify and fix memory leaks in model utilities
- Pass partialTick directly to visuals and remove AnimationTickHolder
- Fix LevelAttached and FlwTaskExecutor not being thread-safe
- Reorganize and rename many things
- Remove unnecessary things
- TransformCall now uses ForEachSlicePlan to reduce the number of
objects created.
- WaitGroup#await can now timeout. This allows the main thread to
contribute more work in a syncPoint.
- Don't normalize in transformNormal, things already are normalized.
- Not totally happy with this but it's functional and better than
directly supplying a GL object.
- Meshes provide an IndexSequence and the length of the sequence.
- IndexSequence can fill a buffer given a length.
- Special case QuadIndexSequence to optimize the most common case.
- All other sequences are treated as if they are unique
- Instancing uses EBOCache to manage ebos
- Indirect does it directly in the meshpool
- Perform various cleanup in batching code
- Remove ClientLevel argument from InstanceVertexTransformer#transform
- Rename Plan#maybeSimplify to simplify
- Rename some classes
- Move TickContext from impl to impl.visualization
- Move VertexListProviderRegistryImpl from impl to impl.vertex
- Add PlannedVisual
- Make ExampleEffect use PlannedVisual
- Remove One2ManyStorage
- Merge Storage, AbstractStorage, and One2OneStorage
- Storage directly provides update and tick plans
- Move work distribution logic to static methods in PlanUtil
- Rename RunOnAllPlan -> ForEachPlan
- Add ContextConsumer and ContextRunnable interfaces and remove
ContextAgnosticPlan
- Add VisualFrameContext for DynamicVisual#beginFrame
- Add VisualTickContext for TickableVisual#tick
- Move checks for update limiting to within the update calls themselves
- Provide update limiting/culling primitives within (B)E Visuals
- Remove methods from *Visual interfaces related to update limiting
- Add thenMap and andMap to Plan
- Add Plan primitive to transform context
- Used in Visual update dispatch
- Update dependencies, forge version
- Bump LICENCE year
- Use fma in MatrixUtil and VertexTransformations
- Remove some dead variables from TransformCall
- Use onSpinWait in WaitGroup#await
- Do not allow adding negative numbers to a WaitGroup
- Thin abstraction for TaskNotifier
- Clean up WorkerThread task polling
- Use builder pattern for defining shader compiler flows
- If only java had type inference extending to builders :whywheel:
- Support glsl 330 on instancing again
- Set uniform block binding at link time
- Remove associated glsl builder code
- Use explicit uint literals in material adapter switch cases
- No need to enable GL_ARB_explicit_attrib_location
- Fix crash trying to generate pretty errors in generated source
- Generate short, unique file names for shaders
- Cleanup some legacy code
- Catch exceptions while compiling shaders for each backend
- Catch errors while loading complex source components
- Allow compilers to progress when such an error occurs, but don't do
any actual compilation.
- Tweak error messages.
- Make resource locations in shaders default to flywheel namespace
- Make PipelineCompiler somehow simpler yet more verbose
- Switch #use to #include
- Stop ignoring errors from within shader compilers
- Track load errors in CompilerStats
- Move LoadError to separate sealed interface, LoadResult.Failure wraps
a LoadError
- Move SourceFile member parsing methods to respective classes
- Add tests for SourceFile loading
- Start work on tests for error messages
- Make ShaderSources return a LoadResult
- Refactor SourceFile loading to do all parsing outside the ctor
- Don't immediately swallow import errors, instead forward them
- Change Span to reference SourceLines instead of SourceFile
- Still WIP, but functional at this stage
- Switch to object oriented vertex array impl
- Expose vao api similar to separate attribute format
- For DSA, directly call methods
- For 33, defer state changes until bindForDraw is called
- Inline instanced mesh #drawInstances method in favor of more
fine-grained control over binding order
- Move buffer binding to GlStateTracker
- Remove raw bindVAO(0) from indirect engine
- Make VertexAttribute a sealed interface.
- Fix ebo restore state by always updating it and never restoring it
- Remove restore state wrapping in DrawCall
- Also misc cleanup.