- Begin context refactor.
- Rename (old) Context -> ContextShader and remove gl program method.
- Add (new) Context which does not need to be registered.
- Contexts are responsible for binding textures given a material.
- Instancers are created in a specific context.
- Add Shader interface for attaching textures.
- Add Textures interface for fetching textures to pass to a Shader.
- Remove texture related code from MaterialRenderState.
- Key culling groups by context.
- Key DrawSets by context.
- Add LineModelBuilder and use that instead of the manual mesh creation
in HitboxComponent.
- Clone mojang's line shader, adapted as a flywheel material.
- Do not scale the view.
- Set flw_vertexPos by multiplying by the inverse view projection.
- Remove centerline material.
- Use #define make padded vec3 uniforms available as actual vec3s.
- Add flw_viewProjectionInverse to uniforms.
- Minecarts actually delete the stuff from SimpleEntityVisual.
- Add entity view vectors to BoundingBoxComponent.
- Add "centerline" material, similar to wireframe.
- Add SmartRecycler to create recyclers based on a parameter.
- Add SimpleEntityVisual which is composed of many EntityComponents.
- Would be nice to expand on this system, particularly to add components
when registering visualizers.
- Misc. doc updates.
- Add BoundingBoxComponent for drawing entity bounding boxes.
- Render lines with a wireframe material.
- Add viewport size and default line width uniforms.
- InstancerProvider now has an implicit render stage based on the type
of visual.
- block entities: AFTER_BLOCK_ENTITIES
- entities: AFTER_ENTITIES
- effects: AFTER_PARTICLES
- Engine no longer extends InstancerProvider and instead has the full
interface that accepts a RenderStage.
- I'm leaving in a few extra render stages for safe keeping.
- Tick visual managers on post LevelTickEvent.
- Remove all field from VisualTickContext, but keep the interface there
for later review.
- Remove tick update limiter, though apparently we were passing the
frame limiter to the tick context :lwe:
- Remove all references to impl from api and lib packages; all internal
interaction with impl now goes through InternalFlywheelApi
- Separate and organize backend and impl mixins and extensions
- Remove camera position component getters from VisualFrameContext
- Improve accuracy of fog data update detection
- Make PoseTransformStack.stack private and add unwrap method
- Rename BackendManager.isOn -> isBackendOn (and associated methods in
other classes)
- Support rendering the fire animation with instances.
- Add scaleX/Y/Z methods to Scale.
- Add Camera to VisualFrameContext.
- Add camera rotation and look vectors to shader uniforms.
- Respect minecraft's entity shadows option.
- Early exit in InstanceRecycler#discardExtra when there's no extra.
- Shadow radius <= 0 disables shadows.
- More documentation in ShadowComponent.
- Add support for entity shadows.
- Create instance type specifically for shadows.
- Add ShadowComponent utility which emulates what EntityRenderDispatcher
does, but based on top of our instance system.
- Add some missing nullability annotations to MinecartVisual.
- Create InstanceRecycler utility for managing dynamic numbers of
instances per frame.
- Add Affine interface which combines Translate Rotate and Scale without
directly using matrices.
- Use joml's rotateAround where applicable.
- Add Transform#transform(Pose)
- Only the ctor for PoseTransformStack is internal.
- Add callback to LitVisual to allow LitVisuals to change sections
- Move visual managers' tick/frame plan creation back into
VisualManagerImpl.
- Some small reorganization in LitVisualStorage.
- Fix TNT minecarts' contents not receiving overlay and scaling
- Fix all types of minecarts using the body model of the standard
minecart
- Add overlay to ColoredLitInstance
- Make default chunk materials not disable overlay
- Rename *Visualizer.shouldSkipRender -> skipVanillaRender
- Rename Simple*Visualizer.configure -> builder
- Rename Simple*Visualizer.*Config -> Builder
- Make Simple*Visualizer.Builder always skip vanilla render by default
- Remove DiffuseLightCalculator and associated methods in RenderMath
- Add BackendImplemented annotation to Backend
- Mark PoseTransformStack as Internal at the class level
- Cull down RenderStage.
- Simplifies the choice users of flywheel have to make.
- Allows more time for the impl to run things off-thread while the rest
of the level renders.
- Add LitVisual interface.
- A NON MOVING visual that provides the sections
it wishes to receive updates for upon creation.
- Cannibalize LightUpdaterImpl into LitVisualStorage.
- Remove everything else related to LightUpdater.
- EntityVisual no longer receives light updates.
- MinecartVisual updates light every tick.
- Add nullability annotations to AbstractVisual#relight.
- Check instanceof before removing from the various lists in Storage.
- Also, don't immediately run SyncedPlan on the main thread. It makes
profiling too difficult as the call stack for its runnable ends up
starting from multiple points.
- Run light updates in parallel to the visual frame plans
- Add null check in AbstractVisual#relight
- Add AbstractVisual#relight taking an iterable.
- Begin frame is after light updates are complete. I tried dividing some
work to run before, but it doesn't really make a difference.
- Remove LightUpdatedLevel.
- Remove FrameContext.
- LightUpdater no longer runs ticks.
- LightUpdater no longer stores things weakly.
- Fix some docs.
- Promote LightUpdater to the API.
- Include LightUpdater in VisualizationContext.
- Explicitly launch a plan to run light updates.
- Misc tweaks:
- The tick/frame limiters are now shared between visual managers.
- The VisualizationManager assembles the frame/tick plans itself to
avoid duplicate context mapping and to allow for reorganization
in later commits.
- Remove most NotNull annotations
- Automatically generate missing package-info.java files which contain
annotations to establish that everything is not null by default
- Remove CurseForge integration from build script
- Fix some other formatting
- Remove *VisualManager classes, promoting *Storage to the top level.
- AbstractVisualManager -> VisualManagerImpl.
- Parameterize VisualizationManagerImpl by the storage type.
- Do not crash when instances passed to api methods are null.
- Ignore null crumbling instances.
- Do not attempt to steal null instances.
- Add nullability annotations where relevant.
- Update docs to indicate null behavior.
- Dump stitched shaders to meaningful paths.
- Simplify dataflow to Compilation.
- Rename some compiler classes to better reflect what they do.
- Inline some utility methods on shader enums.
- Include a marker for each compilation harness in its logs.
- Use a separate instance of logger for compilation stuffs.
- Change CompilerStats info format to log programs before shaders.
- Remove uniform api.
- Do not generate uniform interface blocks.
- Move uniform shader into internal/ and manually include it in the api
impl headers.
- Add flw_ prefix to existing uniforms.
- Separate fog uniforms into their own UBO, uploaded in FogUpdateMixin.
- Drastically simplify UniformBuffer.
- Do not poll for uniform buffer updates. Instead, do the upload at the
beginning of a frame when the engine is flushing.
- Store *Programs inside engines to disallow replacement and use
reference counting to delete programs at the appropriate time
- Move CompilationHarness, Compile, and SourceLoader to compile.core
- Fix packed material comments
- Fix pack.mcmeta pack format
- Remove Embeddium version range
- Log a warning and don't allocate any resources when an instancer is
created with an empty model.
- Log stacktrace starting from the call to InstancerProvider#instancer.
- Revert switch to embeddium dep and comment why the rubidium dep is
there.
- Publish jarjar artifact as default.
- Publish slim artifact without any fancy stuff.
- Update mods.toml
- Switch rubidium to embeddium.
- Set displayURL to modrinth.
- Change version related stuff to $ variables
- Add processResources step to build.gradle to populate mods.toml.
- Add flw_vertexDiffuse and flw_fragDiffuse to glsl api.
- Compute/apply diffuse in the fragment shader.
- Move common glsl between instancing/indirect to common.vert/.frag.
- Add a pittance more documentation to api spec.
- Sneak in a block to build.gradle to always download sources/javadoc.
- Convert InstanceWriters into lambdas passed directly to the builder.
- It's very nice to have everything in one place like that, will make
tweaking the layout much easier.
- Also micro-optimize the cull shader for TransformedInstance.
- 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.