Commit Graph

2587 Commits

Author SHA1 Message Date
Jozufozu
07f7165025 Spring cleaning
- Move PlanStorage to lib as PlanMap and add documentation
- Remove FastPlanStorage in favor of ForEachPlan
- Move plan distribution next to other distribution methods
- Rename PlanUtil -> Distribute
2024-02-18 12:03:07 -06:00
Jozufozu
f3a88c25d5 Apply directly to the engine!
- Move Engine#intancer to DirectInstancerProvider interface
- InstancerProvider allows access to the DirectInstancerProvider it's
  wrapping. This is to allow mods to change the context or RenderStage
  if they need
- Mark new methods and interfaces as experimental
- Should we mark them for removal in version 2?
- Remove NonExtendable from some context interfaces
2024-02-17 11:36:43 -07:00
Jozufozu
9ffdf3dadf Plans all the way down
- Remove PlannedVisual
- Dynamic/Tickable visuals create plans
- Add Simple*Visual to lib to replace the old api interfaces
- Better dynamic plan storage, no need to optimize on every change
- Special case the Simple*Visuals in Storage as to not lose performance
- Needs better documentation
- Add RunnablePlan
2024-02-16 21:17:17 -08:00
Jozufozu
9b9089ea64 Oopershaders
- Do not crash when an ubershader'd component is missing
- Reset instancing/indirect programs immediately on reload to invalidate
  them in case ubershader loading fails
2024-02-16 13:58:04 -08:00
Jozufozu
51458c2768 NEA: Not Enough Attributes
- Transformed had snuck up to attribute location 17
- Combine overlay and light attributes into one
- Flip order of overlay and light in instances to be consistent with
  the internal vertex layout
2024-02-16 13:34:34 -08:00
Jozufozu
dc928b7b7e Taking textures back out of context
- Contexts shouldn't be responsible for binding the api defined textures
- Move light and overlay binding to TextureBinder
- Clean up & standardize material/texture setup/teardown calls
- Revert removal of MaterialRenderState texture stuff
- Add SimpleContext + Builder
- Rename Textures -> TextureSource
- Add API methods to set basic float uniforms, more to come later
- Throw errors if a context tries to set uniforms/textures with reserved
  names.
2024-02-12 23:00:40 -08:00
Jozufozu
4e230f7623 Putting crumbling in context
- Oops didn't actually put everything in last time.
- Create one context per crumbling stage.
- Let contexts handle setting both the diffuse and crumbling texture.
2024-02-11 20:49:30 -08:00
Jozufozu
eae5240c63 Putting everything in context
- 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.
2024-02-11 17:49:32 -08:00
Jozufozu
40a50642f3 Lines aren't too bad
- 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.
2024-02-02 14:15:36 -08:00
Jozufozu
d5732bd788 What a view!
- Add entity view vectors to BoundingBoxComponent.
- Add "centerline" material, similar to wireframe.
- Add SmartRecycler to create recyclers based on a parameter.
2024-02-01 20:31:38 -08:00
Jozufozu
82470debb4 Flywheel ECS
- 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.
2024-02-01 20:31:37 -08:00
Jozufozu
cdfe144131 Lines are hard
- Add BoundingBoxComponent for drawing entity bounding boxes.
- Render lines with a wireframe material.
- Add viewport size and default line width uniforms.
2024-02-01 16:56:01 -08:00
Jozufozu
c5687ccf43 Now you see me
- Fix entities sometimes freezing when they first appear.
- Fix bounding sphere calculation for multiple combined meshes.
- Fix shadow bounding sphere transformer outputting incorrect radius.
2024-01-31 21:53:49 -08:00
Jozufozu
b3ade312eb It bytes back
- Fix time/constant ambient light flags being written to the wrong
  offsets.
- Align uniform buffer size to 16 instead of the offset alignment.
2024-01-30 18:10:35 -08:00
Jozufozu
a33a2d2940 Exit stage left
- 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.
2024-01-29 23:21:07 -08:00
Jozufozu
94a9146abc What makes it tick
- 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:
2024-01-28 20:58:07 -08:00
PepperCode1
55254a6876 Streamlined internal referencing
- 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)
2024-01-28 15:27:02 -08:00
Jozufozu
9ab8559efe This is fine
- 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.
2024-01-27 22:27:31 -08:00
Jozufozu
0177849395 Don't tell me what to do!
- 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.
2024-01-27 16:14:04 -08:00
Jozufozu
a04c3f52b2 Throwing shade
- 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.
2024-01-27 15:25:48 -08:00
Jozufozu
fb95556623 Bink and it's gone
- Remove jarjar stuffs from gradle script
2024-01-26 16:46:54 -08:00
Jozufozu
5fc4a74860 Get some bounding spheres at home
- Compute bounding spheres with the AABB method. Should be pretty well
  suited for funny block game.
- Remove Miniball from dependencies.
2024-01-26 16:40:15 -08:00
Jozufozu
d84c5dc3e8 A fine change
- 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.
2024-01-26 12:56:25 -08:00
Jozufozu
55e38a52f4 Lit beyond bounds
- 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.
2024-01-25 21:17:50 -08:00
PepperCode1
72c755ae13 Explosive changes
- 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
2024-01-25 13:14:39 -08:00
Jozufozu
7cfaf06f36 Back me up here!
- Add @BackendImplemented annotation to API and use where needed.
- Add @ApiStatus.NonExtendable to interfaces that are missing it.
2024-01-24 12:09:54 -08:00
Jozufozu
91a1b4adc9 A smaller stage
- 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.
2024-01-22 21:35:16 -08:00
Jozufozu
3435d9f74d Don't take this out of context
- Make all context records in the API interfaces.
- Move records to impl package.
- Update *Visual docs.
- Inline TickContext.
2024-01-22 15:49:15 -08:00
Jozufozu
331c33b975 Changing assumptions
- The SyncedPlan no longer runs immediately if executed on the main
  thread.
- Update tests/names to reflect this change.
2024-01-22 14:37:30 -08:00
Jozufozu
59cb5f7dbf Pretty lit
- 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.
2024-01-22 14:09:29 -08:00
Jozufozu
a0eab9a250 Light refactoring
- 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.
2024-01-22 14:09:20 -08:00
Jozufozu
91738e38a8 Light updated
- 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.
2024-01-22 14:09:07 -08:00
PepperCode1
f9e5d33296 Automated nullability
- 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
2024-01-22 11:12:48 -08:00
PepperCode1
470f207189 Revert addition of flw_vertexDiffuse and flw_fragDiffuse 2024-01-22 09:00:18 -08:00
Jozufozu
500bd7ab0c Store away some classes
- Remove *VisualManager classes, promoting *Storage to the top level.
- AbstractVisualManager -> VisualManagerImpl.
- Parameterize VisualizationManagerImpl by the storage type.
2024-01-19 16:20:42 -08:00
Jozufozu
238fd68ef4 safety = null
- 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.
2024-01-19 16:20:34 -08:00
Jozufozu
04b8a6ff07 Diewheel
- Remove update json url from mods.toml.
- Change display url to link to github.
2024-01-19 14:08:12 -08:00
Jozufozu
59fec85584 Stop playing hide and seek
- 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.
2024-01-19 13:20:57 -08:00
Jozufozu
a6ee564784 Marker?
- 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.
2024-01-19 12:29:35 -08:00
Jozufozu
4aa833e027 Scull
- Add header to define uniforms/other api variables for the cull shader.
2024-01-19 11:52:09 -08:00
Jozufozu
113408a07a We had lost track of time
- Add some uniforms related to game time.
- Move frustum planes to the top as its better for alignment.
- Make constantAmbientLight a uint.
2024-01-18 18:17:09 -08:00
Jozufozu
e5428d20e8 Monster mat
- Tweak the matrix and quaternion utility shaders.
2024-01-18 17:23:18 -08:00
Jozufozu
af56417d23 Update uniform providers (again)
- 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.
2024-01-18 17:07:10 -08:00
Jozufozu
5a4bbd3a39 We had ConcurrentHashMap at home
- Use ConcurrentHashMap in InstancerStorage.
- Fix exception thrown by stack walking while warning about empty models
2024-01-17 11:55:41 -08:00
PepperCode1
a93e061013 Actually use the provided instance 2024-01-17 10:56:34 -08:00
PepperCode1
4ad80e132e Fix crash after compilation error during in-world resource reload
- 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
2024-01-17 10:37:39 -08:00
Jozufozu
ad27133253 Feeling empty
- 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.
2024-01-16 16:59:15 -08:00
Jozufozu
de622ccc51 Insanity ball
- 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.
2024-01-15 17:41:17 -08:00
Jozufozu
740c76f8bf Frag shader go brr
- 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.
2024-01-15 14:09:19 -08:00
Jozufozu
2ba8641d65 Write me
- 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.
2024-01-08 16:50:22 -08:00