Commit graph

589 commits

Author SHA1 Message Date
Jozufozu
9b2b2be3a8 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
6f9cd8c099 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
3f8876b073 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
06359c6ea2 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
9f2aaa933f 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
bc9f156cfd 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
77fd9dab1e 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
6204acf8bf 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
ed47aa226d Revert addition of flw_vertexDiffuse and flw_fragDiffuse 2024-01-22 09:00:18 -08:00
Jozufozu
21549567e7 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
b49073ebee 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
04dff58714 Diewheel
- Remove update json url from mods.toml.
- Change display url to link to github.
2024-01-19 14:08:12 -08:00
Jozufozu
a9dff3aa15 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
0e2a31ccbf 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
c13b7637c5 Scull
- Add header to define uniforms/other api variables for the cull shader.
2024-01-19 11:52:09 -08:00
Jozufozu
233cf4e7a8 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
5f1d1eccb0 Monster mat
- Tweak the matrix and quaternion utility shaders.
2024-01-18 17:23:18 -08:00
Jozufozu
655712aadf 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
3376bf9809 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
f8b695f1e1 Actually use the provided instance 2024-01-17 10:56:34 -08:00
PepperCode1
80127664d2 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
45ba75af78 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
e582379ab5 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
60b3d99a43 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
89f0e54717 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
Jozufozu
381288da52 Little things
- Do not store a list of initialized instancers.
- Remove AbstractInstancer#delete. Only InstancedInstancer was using it
  so move instancer deletion to InstancedDrawManager.
- Improve CompilationHarness builder pattern and reusability.
  - Pass compilation keys directly to compileAndReportErrors.
  - Build the harness at the end of the builder chain rather than at the
    beginning.
  - Use same CompilationHarness for apply shader and scatter shader.
- Remove _ prefix from packed struct fields.
- Make element type's byte size 4-aligned.
- Remove byteSize method from Element.
2024-01-08 13:33:50 -08:00
Jozufozu
0deac32fde Layout down to rest
- Remove BufferLayout and associated classes.
- Replace InternalVertex with new Layout.
- Calculate InternalVertex stuff as static final fields.
- Elements track their own byte size.
  - The byte size of an element type is unchanged.
  - The byte size of an element is 4-aligned.
- Layout byte size now accounts for alignment.
- Generated packed fields are now always prefixed with an underscore.
2024-01-05 23:03:09 -08:00
Jozufozu
5276a4456c Divider?
- Fix absolute reference after moving packages
2024-01-05 18:48:04 -08:00
Jozufozu
dd64ac860c The great migration
- Move gl -> backend.gl
- Move glsl -> backend.glsl
- Move lib.layout -> backend.gl.layout
2024-01-05 18:38:57 -08:00
Jozufozu
6047a05ec6 A lot to unpack here
- Elements are 4 byte aligned and store their offset.
- Make all ElementTypeImpls records.
- Implement unpacking for all types/reprs.
- Add many utilities to GlslExpr to facilitate unpacking.
2024-01-05 18:34:28 -08:00
Jozufozu
733ec60216 Instancing with Layouts
- InstancedArraysComponent now fully uses Layouts.
  - Trivial to get the glsl type name of a given Element.
  - Also quite easy to get the attribute count without actually
    creating the attribute list.
- IndirectComponent is WIP because unpacking is hard.
  - Reorganize so all the unpacking stuff is in one loop.
2024-01-04 23:44:35 -08:00
Jozufozu
bd00bdff97 A tribute from layouts
- Add utility to convert a Layout to a list of VertexAttributes.
2024-01-04 22:31:36 -08:00
Jozufozu
0b59067701 Untyped instance types
- Add SimpleInstanceType and builder.
- Remove OrientedType and TransformedType classes in favor of builder.
2024-01-04 15:21:02 -08:00
PepperCode1
eda75078af Make layout map actually immutable
- Also implement hashCode and equals on *ElementTypeImpl, Layout, and
Layout.Element
2024-01-04 15:19:21 -08:00
PepperCode1
060bf624a0 Add missing underscores 2024-01-04 15:00:11 -08:00
PepperCode1
2cb68fea95 Rewrite the layout API 2024-01-04 14:57:21 -08:00
Jozufozu
c8590629a1 We do a little thieving
- Reimplement stealInstance.
2024-01-04 12:35:58 -08:00
Jozufozu
8221616eff Crumbling inheritance
- Instead of returning a list, collect crumbling instances via consumer.
- This is much friendlier to inheritance and generally better represents
  the behavior we want from Visuals.
2024-01-03 13:57:13 -08:00
Jozufozu
64df7ed981 Pain points
- Add Self parameter to TransformStack.
- Replace duck interface impl of TransformStack for PoseStack with
  lazily constructed wrapper object.
- Document Models.
- Replace PARTIAL_DIR with TRANSFORMED_PARTIAl and allow for arbitrary
  transformations with arbitrary keys.
  - Will be useful for transforming by different enums, or using
    alternative transforms by Direction.
- Add default impl of #delete to Instance.
- Store VisualizationContext in AbstractVisual.
- Reduce usage of @SuppressWarnings in Rotate and Transform.
2024-01-03 12:45:32 -08:00
Jozufozu
588bb4dda3 Buffer built
- Remove BufferBuilderExtension and mixin.
- Missed these in earlier commits.
2023-12-24 12:21:55 -08:00
Jozufozu
02321c52ef Consecutive normal draws
- Don't use MDI on intel, instead submit multiple draw indirect commands
2023-12-24 11:55:33 -08:00
Jozufozu
744199217c Drew buffer
- Remove DrawBuffer and related mixins.
2023-12-20 12:46:01 -08:00
Jozufozu
2dbdf83ec2 Gone, reduced to batches
- Remove BatchingEngine.
- Remove InstanceVertexTransformer and BoundingSphereTransformer.
- Remove fallback RenderType and MaterialVertexTransformer.
2023-12-20 12:46:00 -08:00
Jozufozu
b7a1eba59a To delete or not to delete
- Fix AtomicBitset#nextClearBit
- Add test for AtomicBitset
- Remove unnecessary gl state stuff from IndirectEngine#renderCrumbling.
- Fix instance removal on IndirectEngine.
  - Deleting an instance not at the end of the instancers list would
    cause an exception to be thrown during upload caused by
    out-of-bounds indexing.
  - Fixed by unsetting changed for the tail of the instancers list.
2023-12-20 11:21:18 -08:00
Jozufozu
7565685533 Spooky crumbling from a distance
- Add crumbling renderer for indirect backend.
- As usual, it's ugly.
- Submit one indirect draw per crumbling instance. Could do multidraw
  here, but we'd have to perform the material sort which seems
  unnecessary.
2023-12-15 13:24:09 -08:00
Jozufozu
594bbf411c Layout on me, dev
- Move gl-coupled BufferLayout and co. to lib.
- Add new Layout record to API.
  - List of Elements, a sealed interface of type safe records
    representing most possible vertex attributes.
- Deprecate InstanceType#getLayout.
- Add LayoutBuilder in lib for convenience.
- TODO: use new Layouts in backends.
2023-12-13 13:40:53 -08:00
Jozufozu
3618ba6ca3 TODONE
- Do not check moreThanTwoThirdsChanged in IndirectInstancer#upload
2023-12-10 15:55:04 -08:00
Jozufozu
4e782b8dcd Scattered to the winds
- A scatter command is 2 uints:
  - The first contains the size and source offset in the upper byte and
    lower 3 bytes respectively.
  - The destination offset.
  - All offsets and sizes are in uints, not bytes.
- Use ScatterList write scatter commands.
- Use TransferList to collect transfers.
- Rather than consolidating transfers in a separate pass, do so as they
  are collected.
- Reorganize StagingBuffer.
2023-12-10 15:45:16 -08:00
Jozufozu
1bfb6db6d1 Throw more compute at it
- Use a shader to perform copies.
- Needs optimization, but it works surprisingly well and avoids the
  driver hitch.
2023-12-09 15:32:21 -08:00
Jozufozu
ec6dbfbf49 Un unchanged
- Call setChanged in various visuals' #init.
- Not everything needs it because some just call their frame update
  methods right away.
- Improve lazy update logic for bells.
2023-12-08 18:38:40 -08:00
Jozufozu
1d318ecb02 Bit-ing the atom
- Use an atomic bitset in AbstractInstancer.
- Add method to iterate over each contiguous span of set bits.
2023-12-08 18:05:03 -08:00
Jozufozu
370a891aae DIY
- Visuals must manually call setChanged on Instances.
- Decreases the extent of resource contention and makes what's going on
  more explicit.
- Remove self type parameter from FlatLit, I don't think it was ever
  needed.
2023-12-08 18:05:02 -08:00
PepperCode1
a8b51aacbe Separation, for instance
- Separate instance vertex shaders and instance cull shaders into
different files with separate getters in InstanceType
- Remove all occurrences of Names and Files inner classes
2023-12-08 17:02:12 -08:00
PepperCode1
2c9a3edb97 Untyped vertices
- Remove VertexType
- Rename ReusableVertexList to VertexView and all associated classes,
methods, fields, and variables
- Add VertexView#stride
- Make vertex compiler automatically include layout shader
- Fix instancing and indirect not setting correct vertex count before
writing mesh
2023-12-07 16:49:12 -08:00
Jozufozu
abca3a2389 More smarter less upload
- Only write draw calls when they change.
- Update baseInstance in the apply shader.
- Simplify object upload logic.
2023-12-07 13:46:17 -08:00
Jozufozu
d4a9b51c8b Merge remote-tracking branch 'origin/1.20/next' into 1.20/next
# Conflicts:
#	src/main/java/com/jozufozu/flywheel/backend/compile/PipelineCompiler.java
#	src/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectBuffers.java
#	src/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectCullingGroup.java
#	src/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectDrawManager.java
#	src/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectEngine.java
#	src/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectInstancer.java
#	src/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectModel.java
#	src/main/resources/assets/flywheel/flywheel/internal/indirect/draw.vert
#	src/main/resources/assets/flywheel/flywheel/internal/instancing/main.vert
#	src/main/resources/assets/flywheel/flywheel/internal/layout.vert
2023-12-07 12:56:10 -08:00
Jozufozu
567491ca4d In an abstract sense, buffered
- Abstract indirect buffers to deduplicate code.
- Write buffer handles when updating sizes.
- StagingBuffer internally handles deferring to a memCopy, accepting a
  long consumer
2023-12-06 23:30:01 -08:00
PepperCode1
a4a2d6ba13 Sparse changes
- Add Model.boundingSphere()
- Fix MaterialRenderState not setting up polygon offset correctly
- Fix GlslSwitch using incorrect indentation for first and last line
- Tweak how instanced crumbling works
- Add CutoutShaders.ONE_TENTH
- Rename Contexts.WORLD to DEFAULT
- Rename Material.baseTexture() to texture
- Rename Transparency.LIGHTING to LIGHTNING
- Rename WriteMask.BOTH to COLOR_DEPTH
- Rename SimpleModel to SingleMeshModel and add new SimpleModel that
stores an arbitrary amount of meshes
- Remove flywheel:flywheel/api/* files and assume appropriate symbols
are automatically defined
- Rename many GLSL variables, functions, and constants
- Reorganize GLSL files
- Add NonExtendable annotation to some API classes
- Rename some Java classes, methods, fields, and variables
2023-12-06 22:00:31 -08:00
Jozufozu
d3e7789f13 OSHA Theatre
- Add staging buffer for indirect using unholy amounts of unsafe.
- Make GlFence RAII.
- Make all IndirectBuffers GPU only and use a shared staging buffer for
  transfers.
2023-12-05 14:25:21 -08:00
Jozufozu
1808d615d0 Internal overlay
- Add overlay to internal vertex format.
- Move interval vertex format related constants to helper class.
- Switch strides to long so java stops complaining about implicit casts
  in multiplication.
- Remove VertexTypes#init as it's not needed anymore.
2023-12-04 21:17:57 -08:00
Jozufozu
eace28cdd8 Merge remote-tracking branch 'origin/1.20/next' into 1.20/next
# Conflicts:
#	src/main/java/com/jozufozu/flywheel/backend/engine/indirect/IndirectDrawSet.java
#	src/main/resources/assets/flywheel/flywheel/internal/block.vert
#	src/main/resources/assets/flywheel/flywheel/layout/pos_tex_normal.vert
2023-12-04 00:29:32 -08:00
Jozufozu
e405c41ade More indirecter
- Indirect now supports multiple meshes per model.
- Cull entire models at once and then apply the accumulated instance
  count to each draw command in a separate compute pass.
- Add utility to calculate the bounding sphere for multiple meshes.
- Inline IndirectDrawSet into IndirectCullingGroup.
- Use MemoryBlocks for draw command and model descriptor storage.
- Fix leaked draw commands.
- Add IndirectModel to track bounding sphere and instancer stuffs.
- IndirectDrawCommand now references IndirectModel instead of Instancer.
2023-12-04 00:25:20 -08:00
PepperCode1
0608944743 Materials and You: Volume 3
- Add material properties
  - depthTest
  - useOverlay
- Rename some material properties
  - mip -> mipmap
  - backfaceCull -> backfaceCulling
  - lighting -> useLight
- Fix InstancingEngine and IndirectEngine not binding overlay texture
and setting unnecessary render state
- Fix indirect internal shaders applying light twice
- Fix internal shaders using removed ALPHA_CUTOFF define
- Rename some variables and functions in shader files
- Separate MaterialUtil into MaterialRenderState and MaterialEncoder
- Delete unused Textures class
2023-12-03 18:13:39 -08:00
Jozufozu
4f8e6af3d0 Laying out the API
- Remove BufferLayout from VertexType.
- Remove VertexType from mesh, and only allow writes to a VertexList.
- MeshPools directly refer to BufferLayout instead of going through
  VertexType.
2023-12-03 17:03:13 -08:00
Jozufozu
733d43e3b9 Blocks all the way down
- Instancing and indirect backends use the block format internally.
- Remove layout shaders.
- Do not compile against VertexType.
- Do not sort draw calls by VertexType.
- Remove VertexType#REGISTRY.
2023-12-03 16:27:18 -08:00
Jozufozu
d4426a5f6c Looks good to me
- Make SimpleMaterial.Builder implement Material itself.
- Add way to copy a material.
- Move fog/cutout shaders to their own utility classes.
- Fix crumbling on cutout materials by overriding properties.
- Add helper in glsl for unpacking 2 shorts from one uint.
- Remove Fog enum.
2023-12-02 13:08:53 -08:00
Jozufozu
8a4d319d8d Fog so thick you could cut it
- Add generic ResourceLocation Index in ShaderIndices.
- Add FogShader and CutoutShader API.
- Implement existing fog/cutout configurations as separate shaders.
- Simplify pipeline shaders to accommodate for new api.
- Separate fog and cutout ubershader components.
  - This was much easier than I anticipated, seems we finally have a
    usable compiler/shader stitcher.
- Pass fog and cutout IDs to ubershader via a 2x16 packed uint.
- Remove discardPredicate and fogFilter from default material shader.
2023-12-02 13:08:25 -08:00
Jozufozu
5ae01e4899 We have shards at home
- Break material setup into constituent parts.
- Sort materials by what they setup.
- Fix some shader issues.
2023-12-02 00:40:54 -08:00
Jozufozu
90ae50a5ca Cut it out!
- Down to just one material shader.
- May need some better examples?
2023-12-01 23:59:51 -08:00
Jozufozu
eb60e7d179 Usurper materials, do you have any last words?
- Pipeline shaders now implement all currently used material properties.
- Rename flw_initVertex/flw_initFragment to flw_begin*.
- Rename flw_contextVertex/flw_contextFragment to flw_end*.
- Bind the diffuse texture by hand instead of calling bindActive.
- Add cutout property to materials that need it.
2023-12-01 23:44:04 -08:00
Jozufozu
4cccc9214c Something is materializing
- Add flw_material struct to the shader api.
- Initialized by the pipeline.
2023-12-01 13:51:34 -08:00
Jozufozu
a1ff8dbc0f Make it even shadier
- Reorganize internal package based on backend.
- Add api redefinitions in separate files.
- When compiling, insert pipeline api impls at the top.
2023-12-01 13:18:05 -08:00
Jozufozu
d730ab02a9 A shady API
- Remove storage qualifiers and compile guards from api sources.
- Replace api sources with empty stubs by poisoning the ShaderSources
  cache.
- Pipelines redefine the shader api and are inserted at the top of a
  compilation.
- Declare shader api methods in api sources.
- Fix crash in ErrorBuilder#pointAtLine
2023-12-01 00:26:02 -08:00
Jozufozu
b947470089 Materials and You: Volume 2
- Make the state provided by materials explicit
- Add utility to pack material properties into an int for use in shaders
2023-11-30 23:16:23 -08:00
Jozufozu
b7cbc29764 Put a lid on it
- Apply lid transform in ChestVisual#init.
- Fixes a horrifying bug where all chest lids you haven't looked
  directly at yet appear coinciding at the origin.
2023-11-30 17:14:09 -08:00
Jozufozu
0b165df0e9 More direct buffers
- Merge object and batch ID buffer.
- ShaderCompiler accepts a Compilation callback.
- Use callback to enable the conservative depth extension only in
  fragment shaders.
- Query subgroup size if available and use callback to set a compile
  definition in compute shaders.
2023-11-30 15:45:11 -08:00
PepperCode1
ddd159bb6c Materials and You: Volume 1
- 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
2023-11-30 15:38:14 -08:00
Jozufozu
5f81bc559f Spheres your cubes
- Use sphere-frustum intersection tests in visuals.
- Seems to be ~20x faster.
2023-11-29 20:10:13 -08:00
Jozufozu
bf6401a867 A refined plan
- Clean up and improve functional interfaces used in Plans.
- Allow safely running TaskExecutor#sync* methods off-thread.
- Formalize the concept of "main thread" in task executor.
- Improve tests for main-thread plans.
2023-11-29 20:10:13 -08:00
PepperCode1
5ff194cbc8 Re-reload
- 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
2023-11-29 20:03:26 -08:00
Jozufozu
8c86a66f18 Bit off a bigger batch than I could chew
- Implement crumbling for batching engine.
- It's ugly! (the code)
- Need to support translucency sorting in batching.
  - Plumb RenderType#sortOnUpload through to DrawBuffer.
  - Allocate room in DrawBuffer for BufferBuilder to write indices.
  - Set nextElementByte on injectForRender.
- Remove RenderStage from DrawBuffer, isn't really needed.
- Make some fields public, so they can be accessed by BatchedCrumbling.
- Track TransformCalls in BatchedInstancer.
-
2023-11-28 17:06:48 -08:00
Jozufozu
b668d10036 The boring way
- Just use vanilla's implementation for crumbling.
2023-11-27 12:42:41 -08:00
Jozufozu
7c934f2595 Good enough for government work
- Move crumbling tbn calculation back to the fragment shader.
- Pass the center of the crumbling block position as a uniform.
- Calculate how to flip the crumbling texture such that it tiles well at
  corners in model space.
- Move ugly crumbling code to utility class and improve bucketing.
- Cache uniform locations in GlProgram.
2023-11-26 23:18:09 -08:00
Jozufozu
745295f5ed Relativistic crumbling
- Apply crumbling texture based on model space coordinates, not world
  space.
- Discard based both on crumbling alpha and diffuse alpha.
2023-11-26 19:24:04 -08:00
Jozufozu
08d9f789dc Error in errors
- Parse error format produced by my intel laptop now.
- Fix some off-by-one errors in error reporting.
2023-11-26 16:16:33 -08:00
Jozufozu
c5f2361e6b Consistent batches
- Reintroduce BatchedDrawManager.
- BatchingEngine no longer implements plan itself, instead uses
  composition of other plans.
- Add DynamicNestedPlan, runs many plans provided at execution time.
- Add ContextFunction and ContextSupplier to match *Consumer and
  *Runnable.
- Add unit tests for DynamicNestedPlan and IfElsePlan.
2023-11-26 13:49:54 -08:00
Jozufozu
2039a964e2 Store bought engines
- Add InstancerStorage so engines can share common code.
- Instanced and Indirect DrawManagers extend InstancerStorage, while
  BatchingEngine keeps an anonymous class for it.
- AbstractEngine now has a InstancerStorage getter and does some
  delegation so the implementations don't have to.
- InstancedInstancer directly stores the list of DrawCalls it belongs
  to.
- InstancingEngine no longer accepts a context parameter.
- Make the /flywheel backend command default to the flywheel nampspace.
2023-11-26 12:07:05 -08:00
Jozufozu
8fa095cd16 Buckets of crumbs
- When crumbling, group DrawCalls by ShaderState.
- Pass all instances for a given crumbling progress at once.
- Use a map to associate initialized instancers with draw calls.
- Document most of the fields in InstancedDrawManager.
- Fix race condition in InstancedDrawManager#getInstancer.
- Will follow up for BatchingEngine and IndirectDrawManager.
2023-11-25 14:24:43 -08:00
PepperCode1
e68845ee3e Port fixes and other changes 2023-11-25 14:09:30 -08:00
Jozufozu
b400229ea4 Reduced to ashes
- renderCrumblingInstances accepts a list.
- Implement crumbling for InstancingEngine.
  - It's ugly.
  - Track what draw calls belong with what instancers.
  - DrawCalls lazily create a second VAO for one-off rendering.
  - Bind instance vbo with offset to scratch VAO to emulate a draw with
    baseInstance.
- Ignore discard predicate in crumbling context.
- SimpleContext takes a Consumer to set sampler bindings.
- Fix debugCrumbling command.
- Compile shaders against all contexts.

Side note: not sure if Context is the right place for crumbling. It
feels like it should be a material, but I don't know how that would
work.
2023-11-24 23:10:27 -08:00
Jozufozu
791c2ddf5c Undo invalidate back to delete
- Makes more sense given how the method is used.
2023-11-24 21:21:10 -08:00
Jozufozu
055ac161d8 Plans yet to crumble
- Rename Engine#delete -> #invalidate per pepper's TODO.
- Plans
  - Remove thenMap and andMap from Plan API.
  - Add builder for MapContextPlan for better composition.
  - Add IfElsePlan and Builder to "fork" on a condition.
  - VisualizationManagerImpl no longer rolls a special Plan class and
    instead uses a plan composition chain.
- Crumbling
  - Not implemented yet!! But the skeleton is taking shape.
  - Remove LevelRendererAccessor, and instead directly pass the map of
    destructionProgress to the VisualizationManagerImpl when it's time
    to render crumbling instances.
  - Give Instances a Handle getter.
  - Add way to get a block entity visual at a given position.
  - Add Engine#renderCrumblingInstance stub.
2023-11-24 20:40:14 -08:00
Jozufozu
e5cda8944e Shaking things out
- 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.
2023-11-24 14:29:03 -08:00
Jozufozu
5e42ecc1c6 Finally free
- Free from mojmath, have to flip many matrix field accesses.
- Free the memory allocated in model cache.
  - Shout out to pepper's DebugMemoryBlock telling me *exactly* where a
    leak was from.
- Instancing and batching seem to mostly work, indirect appears to be
  rendering instances in the wrong places, though they are culled from
  their real location.
2023-11-23 23:09:46 -08:00
Jozufozu
7b0b1883ed Loading visualization
- 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.
2023-11-23 22:48:29 -08:00
Jozufozu
8ff208d23e Instant backport
- Switch to 1.20.1
- It still compiles!
2023-11-23 22:45:39 -08:00
Jozufozu
1e9b0ee85c I'm partial to compiler errors
- Update PartialModel events
- Flywheel compiles!
2023-11-23 14:15:01 -08:00
Jozufozu
d9da952dc2 The bakery
- Port model baking infrastructure.
- VirtualEmptyModelData seems like it isn't needed anymore,
  but I left some stubs in.
2023-11-23 14:10:50 -08:00
Jozufozu
3f3f2b5791 Round 2
- 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.
2023-11-23 11:42:11 -08:00
Jozufozu
df93b09f44 First blood
- 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
2023-11-22 21:30:58 -08:00