- MappedBuffer no longer abstract
- Mappable interface used within MappedBuffer
- MappedBuffer is mapped before ctor
- No more subclasses, no more thin wrapping overrides
- Use try with resources for buffer mapping
- Better error handling with mapped buffers
- Unimplemented exception as a procrastination method
- MapBufferRange compat layer not needed, missed that
- Don't need MappedFullBuffer anymore
- Add guard for size in GPULightVolume#bind
- LightVolume#getStride not needed
- Replace usaged of GlError#poll with #pollAndThrow
- VecBufferConsumer doesn't need a format
- Move most user facing interfaces to flywheel.api package
- Refactor InstanceData to have no package private classes
- Remove 'I' prefix from many interfaces
- ILightUpdateListener -> LightListener
- IMultiProgram -> ContextAwareProgram
- IFlatLight -> FlatLit
- All materials use the same vertex format: UNLIT_MODEL
- RIP ChunkIter, may you rule over the depths of hell in peace
- Fix memory leak when instance worlds get reset
- Server worlds are not flywheel worlds
- Nothing to do on world load anymore
- An Engine is a MaterialManager and a RenderDispatcher
- Refactor InstanceManager's ctor to use the MaterialManager interface instead of the concrete type
- MaterialManagerImpl -> InstancingEngine
- Add skeleton for BatchingEngine
- Hack in InstanceWorld to switch between the 2
- Rename/move existing MaterialManager impl to new package
- IModels now accept a VertexConsumer
- IRenderState -> RenderType
- AbstractInstancer for dealing with InstanceData tidyness
- Alter crumbling renderer to match new system
- Add hack to keep track of bound atlas textures
- Make StitchedSprite work like PartialModel
- Allow StitchedSprite instances to be created directly
- Allow StitchSprites to be created for any atlas
- Use texture stitch post event instead of lazy computation for filling
StitchedSprites
- Remove legacy method from AngleHelper
- Change artifact name from flywheel to flywheel-forge
- Organize imports
- Now individual components Translate Rotate and Scale
- Internal change to ModelData, store matrices directly
- Implement Translate Rotate and Scale for ModelData
- Implement Translate and Rotate for OrientedData
- Clean usages of ModelData to use new api when possible
- WriteSafe and WriteUnsafe for matrices
- Fix matrix mixins being applied on dedicated server
- Expand PartialModel functionality: add location getter and model
setter
- Remove Loader.getResourceType since selective reloading is deprecated
- Organize imports and mixin order
- Other formatting
- Update Gradle and Forge
- Fix minecarts rendering really far away
- InstanceManager#getInstance now has one job
- Instance creation moved to InstanceManager#addInternal
- TransformStack#translateBack for Vec3i
- LightVolumes now can act as a light cache with configurable size
- More GridAlignedBB changes
- Remove ILightUpdateListeners
- Simplify pulley rendering using LightVolume
- Better system for moving objects that want to receive light updates
- LightProvider interface to better abstract light lookups
- All light listeners use GridAlignedBBs
- More utility in GridAlignedBB
- MateralManager, MaterialGroup, and InstanceMaterial are all interfaces
- Separate (T)EI facing API from implementation
- Comment out debug log in ModelPool
- More documentation/clean up some old docs
- isFirstLoad check on GatherContextEvent
- Instancers no longer crash on empty model
- setIdentity on MatrixTransformStack
- more utilities for TransformStack
- ModelData "nullification"
- New Loader class in charge of loading and compiling everything
- ShaderSources now only loads sources
- ShaderSources is immutable now
- Resolver singleton in charge of managing name resolutions
- ProgramSpecs go through Resolver
- WorldShaderPipeline no longer needs reference to ShaderSources
- Reorganize everything
- Isolate SourceFile related things
- Should consider decoupling ShaderLoader from resource loading
- Document a lot of newer things
- Index functions
- Awkward WorldContext builder
- Template responsible for providing shader inputs
- Template is now an abstract class
- Template provides GLSL version
- ProgramSpecs now only accept one file
- Redo shader loading
- Now loads an immutable SourceFile containing some metadata
- Replace legacy compilation pipeline with improved new one using new api
- Builtins are defined in one file, now "header"
- New ErrorReporter/ErrorBuilder methods
- Fancier shader loading errors
- Use `synchronized` on the queue sets in favor of explicit locks.
- Updates and additions work the same now
- Move updates processing to separate function
Fixes#12
What the heck
CrumblingRenderer gets classloaded early because of its event listener.
CrumblingRenderer had an innocent static reference to a member of ModelBakery.
This caused ModelBakery to classload before additional enums could be injected into BannerPattern.
¯\_(ツ)_/¯
- Buffered models directly consume IModels
- Document IModel more
- Move contraption world render spoofing to flywheel
- Miscellaneous new RenderMaths
- Added WorldModel, renders many blocks given a world instance
- Fix broken transparency on contraptions when using Flywheel
- Add a package-info.java to many packages.
- Annotate the world parameter in Backend#canUseInstancing as nullable.
- New utility constructor for BlockModel
- Note that IDynamicInstance#beginFrame and ITickableInstance#tick are run in parallel.
- Refactor internals of InstancedRenderDispatcher to group things by InstanceWorlds.
- InstanceWorlds take over most responsibility for dispatching calls.
- Simplify massive private call chains in InstanceMaterial.
- Reorganize methods and add some documentation in MaterialManager, MaterialGroup, InstanceMaterial, and Instancer.
- Remove unused field from MaterialSpec.
- Remove unused fields from Instancer and InstanceMaterial
- Document RenderLayer
- Add RenderLayer field to RenderLayerEvent
- Stop providing a buffered model supplier
- Instead, provide an IModel supplier
- IModel exposes basic properties of models
- IModel exposes a method to copy the model to a VecBuffer
- Move material stuff to its own package
- The various render functions in the material tree now bind to specific render layers
- Instancers can choose which layer to use
- The layers are SOLID, CUTOUT, and TRANSPARENT
- More layers are likely unnecessary, but we'll see
- Deprecate functions in MaterialManager in favor of more builderesque ones using MaterialGroups
- Actually can print something that underlines a span
- Resolve imports and use the resolutions during building
- Doesn't actually make sense to have #checkErrors
- Simplify some regexes
- Parse structs
- Material managers should not be inside WorldContext
- InstancedRenderDispatcher now stores the material managers
- Delete crumbling material manager on renderer reload
- CrumblingRenderer gets its own class
- CrumblingRenderer is less jank overall
- Defer InstancedRenderRegistry deprecated function removal until 0.3
- Ender chests and trapped chests, too
- Chests orient themselves correctly
- Lids do not position themselves correctly
- Some math, will probably replace with JOML
- Refactor InstancedRenderRegistry to allow for 3rd party TEs to have instances
- Add ChestInstance, incomplete but there
- Add basic api for building vanilla formatted models
- Better instance factory registration
- Check that sectionY is within the bounds of the chunk's section array, fixes#2
- Refactor usages of Tile and Entity InstanceManagers to refer to the base class InstanceManager<>
- Immutable function map
- Parse #use directives on load
- Recursive include gathering
- More sane spec loading in WorldContext
- StateSensitiveMultiProgram builder
- Rename confusing game state things
- Rename Client to FlywheelClient
- Remove Shadow plugin
- Remove generated source set
- Remove unused properties in gradle.properties
- Organize all imports
- Thanks for the list pepper!
- Explicit call to Shader#parseStructs is required before they can be read.
- Fixes a startup crash on some drivers (apparently nvidia is cool with #[...], but other drivers fail)
- Added /flywheel backend command to replace /create experimentalRendering
- Added /flywheel normalOverlay command
- Need to think more about a good way to do this in a client only way
- Added basic config
- Logo in README.md (thanks, dani!)
- Separate model-level instance management from object-level instance management
- Separate material management from rendering
- A few things here and there related to entity instancing
- Add a rudimentary command to spawn superglue
- BufferedModel is no longer abstract.
- InstancedModel no longer inherits from BufferedModel, it accepts one as input.
- Replace usage of IndexedModel with BufferedModel
- Program specs are now loaded from json instead of being defined in code and registered manually.
- Within the json spec, a program can define a list of states.
- A state consists of:
- A "when" clause.
- A list of strings to be #defined.
- A list of extensions to apply at program link time.
- Each frame, the first state whose "when" clause returns true will be used.
- A when clause consists of:
- A state provider defined by a resource location.
- A value to match.
- When the value returned by the provider matches the value defined in the when clause, the when clause is considered to be 'true'.
- There is syntactic sugar for when a provider returns a boolean value.
- This system is in its infancy, and there is plenty of room for improvement.
- All material shaders now use the template system.
- Because of the template system, we can know what attributes a material has, along with how they're formatted.
- All of the *Attribute enums are effectively inlined, as the context they used to provide is no longer needed.
- Instead, BufferBuilderReader can decode parts of a BufferBuilder.
- BufferedModel and its subclasses are now created directly with a ByteBuffer.
- ContraptionModel renamed to IndexedModel.
- InstancedModel and IndexedModel both now take model formats as arguments.
- All of this allows for better abstraction, composition, and control of models rendered with Flywheel.
- Instead, MaterialSpecs store the information
- RenderMaterials are now generic on InstanceData instead of InstancedModel
- RenderMaterials are directly constructed with and store a MaterialSpec
- Lots of refactoring in the shader loading code.
- Abstract all the different shader source transformations into ProcessingStage.
- An ordered list of ProcessingStages is called a ShaderTransformer.
- When you acquire sources, a Shader now keeps track of the source location, shader type, and source code all together.
- Nothing is properly hooked up yet.
- A single shader file will be able to be compiled with different opengl targets.
- I plan on using this to implement meshlet rendering as an alternate backend-backend that will be used when available.
- It could also be used to enable compatibility with opengl 3.0 or potentially even 2.0.
- Move CreateClient.kineticRenderer to Backend
- InstancedTileRenderers keep track of their own queuedUpdates
- Sort of a listener system for some render events
- Put a lot of the reusable code in a sort of standard library
- Need to evaluate just how much should be lumped in there
- Still need to allow for users to create alternate contexts for the builtins
- Normal world and contraptions are still hardcoded contexts