Commit graph

36 commits

Author SHA1 Message Date
Jozufozu
d69ff7054e Model changes
- 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
2021-07-29 01:37:47 -07:00
Jozufozu
9e066f8d41 Documentation and organization
- 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
2021-07-27 17:31:58 -07:00
Jozufozu
172971d732 Optimize imports 2021-07-23 23:46:30 -07:00
Jozufozu
4b68cd34ef Instanced Shulker boxes
- Preliminary concept of RenderStates
 - Vanilla has this too but it's bloated
2021-07-18 15:05:12 -07:00
Jozufozu
3cc4ec7d6a Utilities created during an attempt at signs
- Cuboids can be inverted across Y and Z
 - TransformStack scaling
 - VecBuffer coloring
2021-07-17 17:06:49 -07:00
Jozufozu
07a2cfd7db Protect against java versioning
- Cast ByteBuffers to Buffer before calling #rewind or #flip
2021-07-12 16:45:36 -07:00
Jozsef
3f03d1f071 Fix else formatting 2021-06-30 13:03:02 -07:00
Jozsef
f615825846 Pre-port tasks I
- 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!
2021-06-30 12:43:54 -07:00
JozsefA
c58674d678 Comment out debug line 2021-06-24 14:21:19 -07:00
JozsefA
de8e324d32 Change behavior of tagged struct parsing in shaders
- 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)
2021-06-24 14:20:24 -07:00
JozsefA
5c1f186264 Fix crash on resource reload
- Properly delete MaterialManagers and ShaderContexts
 - Reload renderers on resource reload
 - More utility methods in WorldAttached
2021-06-24 01:20:03 -07:00
JozsefA
78611b0038 Print final shader source on compilation error 2021-06-23 09:08:34 -07:00
JozsefA
9cc03a81d7 Instanced entities stage 1 2021-06-07 18:12:46 -07:00
JozsefA
d47f898c76 Move away from a static backend class, add a registration event 2021-06-06 15:46:16 -07:00
JozsefA
c4b828ba56 Allocate no more than 3 quad->triangle EBOs ever. 2021-05-31 14:58:49 -07:00
JozsefA
8fab6c4643 Instance triangles 2021-05-30 22:16:03 -07:00
JozsefA
3500b4ec87 Contraption triangles 2021-05-30 20:53:08 -07:00
JozsefA
2300ef2088 Organization, renaming, and fixing a dumb crash 2021-05-30 17:05:41 -07:00
JozsefA
c8814f123b More sane models
- BufferedModel is no longer abstract.
 - InstancedModel no longer inherits from BufferedModel, it accepts one as input.
 - Replace usage of IndexedModel with BufferedModel
2021-05-24 17:50:13 -07:00
JozsefA
9352ef9ede Json program specs, new extension/gamestate system.
- 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.
2021-05-22 17:45:01 -07:00
JozsefA
d58897d59a Nothing in particular 2021-05-20 17:59:26 -07:00
JozsefA
9a178ef9d8 Abstract fog
- WorldPrograms no longer accept an explicit fog mode.
 - They now inherit from a class that takes a list of arbitrary shader extensions
2021-05-19 19:11:06 -07:00
JozsefA
4d755dc506 More simplification
- Move more stuff to the flywheel namespace
 - Give up on ShaderConstants, there's a better way to do it
 - A semblance of better crash reports
2021-05-19 16:35:37 -07:00
JozsefA
55703d8838 Move to the template system and overhaul instance attributes
- 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.
2021-05-18 14:05:52 -07:00
JozsefA
6227e81066 TemplateBuffer is no more
- 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.
2021-05-16 15:39:52 -07:00
JozsefA
9ff193946c Refactor InstancedModel to not rely on inheritance
- Instead, MaterialSpecs store the information
 - RenderMaterials are now generic on InstanceData instead of InstancedModel
 - RenderMaterials are directly constructed with and store a MaterialSpec
2021-05-15 16:41:56 -07:00
JozsefA
79977aee14 Choose between 2 different implementations of a mapped buffer
- MappedBufferRange (GL30) and MappedFullBuffer (GL15) so far
 - Persistent mapping (optionally?) would be nice
2021-05-14 22:51:14 -07:00
JozsefA
a9cdb1ab6b Begin buffer rework 2021-05-14 18:04:25 -07:00
JozsefA
56b2046957 It can actually load and link something
- 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.
2021-05-12 15:14:33 -07:00
JozsefA
f6937ffb0c Only a few moves left
- flywheel stuff only barely depends on create
 - start drafting what multiple backends could look like
2021-05-11 11:02:43 -07:00
JozsefA
05b56b9b5e Error when missing #flwbuiltins in WorldContext 2021-05-07 22:15:07 -07:00
JozsefA
3171a0b7e5 Block breaking animations for arbitrary flywheel tiles.
- Kinda jank so far, but it's great progress.
 - This is also a really good showcase for how flexible the ShaderContext system is.
2021-05-06 18:38:05 -07:00
JozsefA
bc5630e593 ShaderContexts
- A huge step towards more arbitrary shader usage
 - Need to work on registration of the different parts
 - Things are unorganized
2021-05-03 21:46:33 -07:00
JozsefA
fcbab5b820 #flwbuiltins and oh so much less overhead
- 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
2021-05-03 13:42:23 -07:00
JozsefA
2112061db0 Vertex shader abstractions 2021-05-01 23:39:36 -07:00
JozsefA
67e75d747a Move backend 2021-05-01 16:32:09 -07:00