- 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
- 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
- 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
- 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, MaterialSpecs store the information
- RenderMaterials are now generic on InstanceData instead of InstancedModel
- RenderMaterials are directly constructed with and store a MaterialSpec
- Move CreateClient.kineticRenderer to Backend
- InstancedTileRenderers keep track of their own queuedUpdates
- Sort of a listener system for some render events