- 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
- 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
- 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.
- 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
- 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 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
- 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
- Ensure current backend is never null
- Fix StringUtil#countLines
- Use material index instead of file location when adapting material
shader function name
- Merge Includer and Compilation factory into ShaderCompiler and remove
builder
- Remove CompileUtil
- Remove Index
- Remove unnecessary code from ShaderSources
- Move source component classes to backend.compile.component
- Move core compilation classes to backend.compile.core
- Move pipeline classes to backend.compile
- Move GLSLVersion to glsl package
- Move SourceChecks to backend.compile
- Move pipeline code to backend package
- Store compiled programs in FlwPrograms instead of FlwCompiler
- Rename PipelineContext to PipelineProgramKey and remove CullingContext
- Remove PipelineContextSet and CullingContextSet
- Improve quality of dumped sources
- Rename pipeline directory to internal
- Add underscores before more internal GLSL variables
- Remove unnecessary GLSL files
- Remove #removeNow and #getWorldPosition from Instance
- Add #distanceSquared for use in update limiting
- Refactor DistanceUpdateLimiter to directly accept distance squared
- Remove proper name from backend
- Misc. cleanup
- ifs without braces
- some method names
- *make the errors understandable without actually solving them
- Straighten out shader compilation/error generation
- Interpret errors in generated code
- Compilation returns a result type instead of throwing an exception
- Still need to reimplement source checks?
- Make error messages prettier
- Note: heavily broken
- Move all compilation logic into a single package
- FlwCompiler is responsible for compilation
- CompilationEnvironment generates combinations and performs analysis
- Create source components for vertex/fragment ubershader codegen
- More hacky glsl generation utils
- Strip explicit uniform buffers from uniform shaders
- Do not wrap BeginFrameEvent and RenderStageEvent with GL restore state
- Move GL state restoration into InstancingEngine
- Remove BufferUploaderMixin
- Add binding enum values to GlBufferType
- Remove debugNormals config
- Rename some occurrences of "world" to "level"
- Free all DrawBuffers on renderer reload
- Add flw.debugMemorySafety flag to detect leaked untracked MemoryBlocks
- Replace VertexListProviderRegistry with static methods in
VertexListProvider and a VertexFormatMixin
- Make the DrawBuffer constructor accept a VertexFormat instead of a
RenderType
- Merge TStack into TransformStack
- Move all duck interfaces/extensions to extension package
- Make mixin style more consistent
- RenderLists -> InstancingDrawManager, keeps track of:
- Uninitialized models
- All Instancers
- All DrawCalls via DrawSet
- All MeshPools
- One MeshPool is now locked to a single VertexType
- DrawCall binds instance attributes to avoid making assumptions about mesh attribute count
- Yeet crumbling
- Simplify GPUInstancerFactory
- Adapt compilers to work with arbitrary instance types
- Use single compiler for all draw shaders
- Temp solution for instanced array attributes
- Introduce pipeline shaders
- Cull updates based on the view frustum.
- Instances check themselves against a FrustumIntersection object
- Make GlProgram not abstract
- Leave in small debug rendering experiment
- Replace ModelTransformer with modular pipeline that closely resembles
the instancing pipeline
- StructTypes and Materials now provide a VertexTransformer that
mutates a MutableVertexList
- Rewrite all model building to make it cleaner, more flexible, and
easier to use
- Add SimpleMaterial.GlStateShard for easier control over GL state
- Rename and move some classes
- Materials are given the opportunity to setup/clear render state
- Materials bind textures
- Compile all combinations of shader components at load
- Drastically simplify compilation context objects
- Material shaders control cutout and fog
- Remove all GameState related classes
- Remove CoreShaderInfoMap
- Sneaky optimization to instance storage
- Simplify RenderLists
- Give material fragment shaders a use
- Add new variables to api/fragment.glsl
- Add flw_initFragment to context shaders
- Add flw_vertexOverlay
- Normalize flw_vertexLight
- Values are now [0, 1] where 0 is no light and 1 is max light
- All light values sent to layout shaders and instance shaders are now
[0, 15] and not normalized
- Remove util/light.glsl
- Rename program samplers
- Add FileResolution.isWeak()
- Add BackendType.getShortName()
- Tweak default material
- Move ShaderField to parse package
- Organize imports
- Initial work on uniform buffer registry
- Setup skeleton for ComponentRegistry
- InstancingEngine is no longer generic about the program
- ProgramCompiler considers ContextShaders as input
- Support weak file resolutions
- Temporary GLSL version bump to ease UniformProvider growing pains
- Centralize component shaders to Components
- Add RenderStage enum for better control over when a Material should be
rendered
- Add getRenderStage method to Material
- Replace RenderLayerEvent with RenderStageEvent
- Pass more information to RenderContext including camera and projection
matrix
- Pass RenderContext instead of Camera to all beginFrame-related methods
- Remove RenderContext.CURRENT
- Remove FrustumMixin and CameraMixin
- Remove default BasicModelSupplier constructor
- Convert Material to interface and create SimpleMaterial implementation
- Move API instancer classes to instancer package
- Organize imports
- Fix tickable instances ticking while paused
- Fix CME on effect origin shift
- ExampleEffect is now boids fireflies
- Better tick/update load distribution with small instance counts
- Add Effect instancing
- Allows mods to create visual effects without (block) entities
- One effect object maps to many AbstractInstances
- Effect objects are expected to exist in isolation
- Refactor InstanceManager to be composable about how its instances are stored
- EffectInstanceManager uses this to provide a one to many topology
- This is in need of more iteration, and more aspects of InstanceManager should be made composable in the future
- Rename InstanceData -> InstancedPart, and subclasses
- Burger Fences
- Fix GlStateTracker nuking vao element buffer bindings
- GlVertexArray tracks element buffer bindings
- Use vertexAttribPointer offset instead of ..BaseVertex
- Setup code for better crumbling rendering
- Move some logic into CoreShaderInfoMap
- Simplify VertexWriter/VertexList
- Prefer IEventBus#addListener to @SubscribeEvent
- Stop using persistent buffers... for now
- Check for errors immediately after loading shaders
- Done through FileResolution
- Add class SourceChecks to
- Throw away GatherContextEvent, do everything on client init
- Unify FileResolution and Resolver, PartialModel style
- Pass around error reporter to detect errors during load
- Rename MaterialManager -> InstancerManager and Material ->
InstancerFactory
- Create Material class consisting of RenderType and shader files
- Make ModelSuppliers use Materials as keys instead of RenderTypes
- Move diffuse calculation from context shaders to material/shaded.vert
- Merge used templates directly into compilers and remove template
classes
- Overhaul shader pipeline
- Remove VertexType#getShaderHeader in favor of vertex-only "layout
shaders"
- Remove program specs in favor of vertex-only "instance shaders"
- Add API GLSL headers for vertex and fragment shaders that store
common values
- Separate context shaders into vertex and fragment shader files
- Improve import handling
- Ensure imports are not added more than once
- Change regex for import directives to be more in line with C-style
directives
- Move some classes and GLSL files
- Inline all the things
- Now MaterialManager -> Material -> Instancer
- ModelSuppliers store RenderType
- Currently broken, it only renders chunk layers so vanilla instances are invisible
- Only one task engine for everything now
- Fixes crash on LightUpdater init when Flywheel is off
- Attempt to wrangle InstanceWorld init code
- Misc. cleanup/renaming