Commit graph

440 commits

Author SHA1 Message Date
Jozufozu
80d41a76af GlBuffer tracks its size
- GlVertexArray#enableArrays
2021-12-22 14:39:34 -08:00
Jozufozu
ede2ba8776 Finally safe vertex formats
- true to false for Pepper
 - IBufferedModel -> BufferedModel
 - VertexFormat -> BufferLayout
 - Use ImmutableList in BufferLayout
 - LayoutItem naming consistency
 - Try to reduce usage of raw BufferLayouts
 - Move vertex interfaces to api package
 - #createWriter and #createReader in VertexType
 - Some documentation
2021-12-22 02:45:45 -08:00
Jozufozu
42365def02 util and core cleanup
- Consolidate/audit utility classes
 - Move more towards sane vertex types
2021-12-22 00:22:41 -08:00
Jozufozu
4f31fa3e9c Make the BatchingEngine not jittery
- Stop having threads compete for a single BufferBuilder
 - ...by skirting around minecraft's BufferSource
 - Begin work on making vertex writing sane
2021-12-21 22:47:29 -08:00
Jozufozu
dc0ba5214b Merge branch '1.18/dev' into 1.18/batching
# Conflicts:
#	src/main/java/com/jozufozu/flywheel/core/model/BlockModel.java
2021-12-21 01:12:47 -08:00
Jozufozu
4908abc9e0 StructType doesn't need #asBatched and #asInstanced
- More organized this way
 - BatchingTransformer function moved into Batched
2021-12-20 22:38:33 -08:00
PepperCode1
3e8644c988 Improve virtual model rendering
- Use VirtualEmptyBlockGetter instead of mc.level
- Move getBufferBuilder from BlockModel to ModelUtil
- Add static .is method to VirtualEmptyModelData
2021-12-20 17:47:30 -08:00
Jozufozu
a43fe2bc9a No need for getDirtyBitSet
- Faster and simpler to just do one loop
2021-12-17 22:41:22 -08:00
Jozufozu
ffe17e4449 Use task engine/sync to update instances 2021-12-17 02:17:39 -08:00
Jozufozu
f651676dea Proper task engine
- Manual threadpool
 - More control
2021-12-17 01:03:52 -08:00
Jozufozu
431ff92861 Simplify SBB
- SBB -> ModelTransformer
 - Shader binding the minecraft way
 - Engines are responsible for ending batches
2021-12-16 23:10:24 -08:00
Jozufozu
be3f47dfbd Naive parallelism
- Submit many tasks to executor and then wait for them all to complete.
 - Use WaitGroup
 - SBB no longer stores params, instead accepts Params arg to render
 - SBB keeps scratch variables local
 - CPUInstancer keeps track of default params
 - Separate #setup and #draw... functions in CPUInstancer
 - Combine DirectBufferBuilder#updateAfterWriting with #intoDirectConsumer
 - DirectVertexConsumer#split to distribute work
2021-12-16 10:49:26 -08:00
Jozufozu
3767390c96 Better SBB params
- Transform interface for grouping traits and combined behavior
 - Move transforms to params, impl Transform
 - Pass Params object to BatchingTransformers instead of SBB
2021-12-16 00:11:47 -08:00
Jozufozu
cc707cf66a Batching Engine
- Implement alternate backend using SBBs
2021-12-15 17:12:48 -08:00
Jozufozu
15ea38ede7 Possible fix(es) for accessor crash
- Haven't been able to reproduce
 - Try forcing PausedPartialTickAccessor to load early
 - Try renaming the method
2021-12-15 16:19:52 -08:00
Jozufozu
17fb8d34ed Fix #extension crash on intel 2021-12-15 13:27:06 -08:00
PepperBell
cb5047f677 Sweeping up
- Remove deprecated methods and fields
- Bump pack format
- Fix CI badge link
- Update VanillaInstances javadoc
- Organize imports
2021-12-14 22:00:44 -08:00
Jozufozu
64a7443dde No need for InstancedMaterialRenderer
- Here's to premature abstraction
2021-12-13 21:27:15 -08:00
Jozufozu
d9fd668bbb AMD driver workaround
- Just don't pool models
2021-12-13 19:55:50 -08:00
Jozufozu
56150b2645 Fix vanishing minecarts 2021-12-12 22:30:46 -08:00
Jozufozu
11e5719e0d Cylindrical fog
- having the world position is very nice
 - mojang manages to do multiple matrix multiplications
2021-12-11 17:31:09 -08:00
Jozufozu
ebfeff0b54 Fix misaligned contraption light
- That was a pain to debug
 - Idk how that ever worked
2021-12-11 15:06:07 -08:00
Jozufozu
79e61b44e5 1.18.1 2021-12-11 14:18:43 -08:00
Jozufozu
2207da5eed Implemented 2021-12-10 14:50:01 -08:00
Jozufozu
21a23d650f Mapped buffer sanity
- 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
2021-12-10 14:45:18 -08:00
Jozufozu
fd8d436640 Worlds are bigger now pt 2
- Stop clamping Y in [0, 256)
2021-12-10 12:31:57 -08:00
Jozufozu
931fffb5f1 Worlds are bigger now
- Stop clamping Y in [0, 256)
2021-12-10 00:28:32 -08:00
Jozufozu
99e15cbcd9 Debugging changes
- 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
2021-12-10 00:07:52 -08:00
Jozufozu
b892f602cb Whoops remove imports 2021-12-09 16:40:01 -08:00
Jozufozu
5374baf241 No more material spec, everything is StructType 2021-12-09 16:34:32 -08:00
Jozufozu
eee9b3fb51 Move api package 2021-12-09 15:27:56 -08:00
Jozufozu
da55941e4f Add RecordingVertexConsumer
- Very basic and untested
2021-12-09 15:19:48 -08:00
Jozufozu
7b3bab6647 Reorganize, rename, refactor, 0.4.0
- 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
2021-12-09 00:42:27 -08:00
Jozufozu
47b110c48c Fix shulker box rendering 2021-12-08 12:48:18 -08:00
Jozufozu
9fe0bae2ad #tick and #beginFrame on creation
- Fixes weird delay in object appearance when reloading chunks
2021-12-08 12:28:22 -08:00
Jozufozu
aaaccc47ee Add instances when chunks are built for rendering
- 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
2021-12-08 12:16:01 -08:00
Jozufozu
b4fe00a314 Fix potential nullpointer rendering breaking overlay
- Should backport for #52
2021-12-07 23:53:13 -08:00
Jozufozu
ef5de609a2 Groups store their types again
- Fix crash rendering breaking overlay
2021-12-07 23:40:45 -08:00
Jozufozu
36f32ececc VAO state clearing handled in InstancingEngine#render 2021-12-07 23:00:32 -08:00
Jozufozu
97949ab1da Cull legacy compat boilerplate
- Minecraft is on GL32 now!
2021-12-07 22:47:05 -08:00
Jozufozu
a90e6a1f56 Quick fix for create's contraptions 2021-12-07 22:45:10 -08:00
Jozufozu
fd0343c48b Merge branch '1.17/dev' into 1.18/dev 2021-12-07 21:29:38 -08:00
Jozufozu
f7c45e5486 Get started on a batching engine
- 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
2021-12-06 23:36:14 -08:00
Jozufozu
ca459dd2ca Update to 1.18 2021-12-06 21:29:21 -08:00
Jozufozu
7813eedf61 Miscellaneous gl changes while debugging
- Only unbind at the end of MaterialManagerImpl#render
 - Add GlBufferType#bind and #unbind
 - Make GlVertexArray#unbind static
2021-12-06 21:11:51 -08:00
Jozufozu
e08633af3c Do a 180
- Fix inconsistency in minecart model
2021-12-06 17:19:21 -08:00
Jozufozu
b9352bc3a4 Vanillaization
- 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
2021-12-06 15:23:26 -08:00
Jozufozu
c54514cf47 No more InstanceData#write 2021-12-02 20:13:55 -08:00
Jozufozu
4677893690 Yeet json extensions that idea doesn't make sense
- Was only ever used for fog
 - Was the same for every material
 - Made things unnecessarily complex
 - Fix fog
 - Convert ProgramState to record
2021-12-02 17:40:23 -08:00
Jozufozu
4ee6a8c9aa Shadows causing trouble? No more shadows 2021-11-27 11:30:38 -08:00
PepperBell
fbc5836afb Improve StitchedSprite functionality
- 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
2021-11-24 18:43:05 -08:00
Jozufozu
881ce3639d Merge remote-tracking branch 'origin/1.16/dev' into 1.17/dev
# Conflicts:
#	changelog.txt
#	gradle.properties
#	src/main/java/com/jozufozu/flywheel/backend/instancing/InstancedRenderDispatcher.java
#	src/main/java/com/jozufozu/flywheel/config/BooleanConfig.java
#	src/main/java/com/jozufozu/flywheel/config/SConfigureBooleanPacket.java
#	src/main/java/com/jozufozu/flywheel/event/ForgeEvents.java
#	src/main/java/com/jozufozu/flywheel/mixin/RenderHooksMixin.java
#	src/main/java/com/jozufozu/flywheel/util/WorldAttached.java
#	src/main/resources/flywheel.mixins.json
2021-11-23 16:49:39 -08:00
Jozufozu
e8f5e4a6c1 Implement TransformStack directly on PoseStack
- Add helper method to cast to the interface.
2021-11-23 15:07:31 -08:00
Jozufozu
0d2907e187 Split TransformStack interface
- 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
2021-11-22 18:05:53 -08:00
PepperBell
f14aca4517 Server crash fix and formatting
- 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
2021-11-18 14:59:39 -08:00
Jozufozu
94e83a10d1 TextureBinder for dealing with vanilla RenderTypes 2021-11-09 16:48:54 -08:00
Jozufozu
af98782a89 Instance init
- So that simi can have his cogs.
 - Inheritance is painful when models are acquired in an instance's ctor
2021-11-09 15:03:52 -08:00
Jozufozu
fe62302d25 Chipping away at light 2021-11-09 14:59:31 -08:00
Jozufozu
1d4bb972b9 Named models 2021-11-08 20:48:02 -08:00
Jozufozu
097ecb062e Invalidate regardless 2021-11-05 16:47:27 -07:00
Jozufozu
e9404d6de3 Revert "Weak hash map in world attached"
This reverts commit 98a3f759b3.
2021-11-05 16:45:39 -07:00
Jozufozu
98a3f759b3 Weak hash map in world attached
- More robust solution that listening to WorldEvent.Unload
2021-10-31 19:54:12 -07:00
Jozufozu
d2b5b1096b Fix world leak 2021-10-31 19:50:01 -07:00
Jozufozu
46ebdfd43b Remove chunk provider mixin and refactor config packets 2021-10-31 17:24:57 -07:00
Jozufozu
0bbfb60d0c Compat work
- No more net.minecraftforge.common.util usages
 - Replace forge lazy with flywheel lazy
 - Replace forge NonNullSupplier with flywheel NonNullSupplier
 - texture2D -> texture
2021-10-12 12:52:02 -07:00
Jozufozu
762e526a27 Revert "Rename/refactor many interfaces"
This reverts commit 66aa987dbd.

Can re-think the names later.
2021-09-30 13:43:09 -07:00
Jozufozu
66aa987dbd Rename/refactor many interfaces
- Drop I prefix
 - Inline IMultiProgram
 - Remove unused method in InstanceRendered
2021-09-28 17:54:47 -07:00
Jozufozu
fe700b8be5 Better Block Entity filtering
- Assumes IInstanceRendered#shouldRenderNormally does not change over a BE's life
2021-09-26 22:30:11 -07:00
Jozufozu
57b67cddcf Testing + fixing 2021-09-26 21:15:02 -07:00
Jozufozu
ef48504caa UNTESTED - Replace ATs
- Matrices use #store
 - Accessor for pausedPartialTick
2021-09-26 19:40:53 -07:00
Jozufozu
0663218b67 GL32 shaders and errors
- Update shaders to glsl 150
 - Objectfy errors
2021-09-20 19:27:04 -07:00
Jozufozu
5c5f48ba4a Small things
- Fix minecarts rendering really far away
 - InstanceManager#getInstance now has one job
 - Instance creation moved to InstanceManager#addInternal
 - TransformStack#translateBack for Vec3i
2021-09-17 15:59:20 -07:00
Jozufozu
5044308c68 F3+A
- Reloading chunks correctly reloads block entity instances
2021-09-17 14:20:35 -07:00
Jozufozu
d53c9b0a32 It renders stuff
- The lightmap moved
 - Begin to move away from access transformers
 - .textureManager -> .getTextureManager()
 - RIP cutout, saw that coming
2021-09-16 20:03:45 -07:00
Jozufozu
8407fed299 Don't crash when block entities are placed
- Block entities got a huge refactor in 1.17, a lot of the old code needs to be rethought
2021-09-15 14:29:58 -07:00
Jozufozu
40034daa64 Minecraft already stores the projection matrix
mixins--
2021-09-15 14:27:51 -07:00
Jozufozu
a930bc97cc It launches
- yeet the fog
 - update mixin compatibility level
2021-09-15 13:49:18 -07:00
137de259e5 Fix obvious errors 2021-09-15 09:26:51 +02:00
2ae580259c Remap, update forge, minecraft and java 2021-09-15 09:14:30 +02:00
Jozufozu
ee7f6fd5e2 fixup! Initial data/struct format refactor 2021-09-14 13:52:52 -07:00
Jozufozu
613c933206 Revert "Parallel light updates"
Caused a crash, likely related to the use of weak references

This reverts commit c68b2bbf91.
2021-09-14 13:19:52 -07:00
Jozufozu
261b901e80 LightPacking utility class 2021-09-14 13:17:13 -07:00
Jozufozu
fbcc1f0a10 Initial data/struct format refactor
- Inspired by jellysquid3's vertex sinks
 - More robust/extensible solution for data writes
2021-09-12 14:49:00 -07:00
Jozufozu
c68b2bbf91 Parallel light updates 2021-09-12 10:29:29 -07:00
Jozufozu
075719e75c Optimize imports 2021-09-12 09:41:45 -07:00
Jozufozu
b75dcb2209 Instancer interface
- Entire material/model system finally cleaned up
2021-09-12 09:40:36 -07:00
Jozufozu
3ef6a163f0 Fix compat with optifine shaders, again 2021-09-09 15:30:50 -07:00
Jozufozu
a6377b5fe8 Fix BeginFrameEvent not firing with sodium installed
- Rendering is still broken, that fix must come from within sodium
2021-09-09 14:07:35 -07:00
Jozufozu
99259ff227 Separate LightVolume and GPULightVolume
- LightVolumes now can act as a light cache with configurable size
 - More GridAlignedBB changes
 - Remove ILightUpdateListeners
 - Simplify pulley rendering using LightVolume
2021-09-08 15:48:49 -07:00
Jozufozu
dc6a9daeb1 Immutable view of GridAlignedBB 2021-09-04 19:57:32 -07:00
Jozufozu
fe304041c5 Moving light updates
- 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
2021-09-04 16:40:40 -07:00
Jozufozu
7ca4ea5c3e Light update convergence
- Move light update logic for all instances to use LightUpdater
 - Begin refactor of LightUpdater to account for moving listeners
2021-08-29 14:40:46 -07:00
Jozufozu
cb10e4e7d1 Merge branch 'dev' into next 2021-08-25 13:21:42 -07:00
Jozufozu
f0f423ca0d Restore single paramater scale function
- Now has default impl in TransformStack
 - MatrixTransformStack now only overrides xyz scale
2021-08-25 13:15:29 -07:00
Jozufozu
98b61b884c Instanced Minecarts
- Rotations in PartBuilder
 - BlockModels are always UNLIT_MODEL format
2021-08-25 12:53:43 -07:00
MehVahdJukaar
d9c631cfe7
Update TransformStack.java 2021-08-25 21:49:06 +02:00
MehVahdJukaar
b0625ef13e
Update MatrixTransformStack.java 2021-08-25 21:40:35 +02:00
MehVahdJukaar
4fbb808832
Added 3 parameter scaling function
Simply adds a 3 parameter function to to MatrixTransformStack so a matrix can be scaled on different axis
2021-08-25 20:21:33 +02:00
Jozufozu
7cb81256a1 Interfaces and less log lines
- MateralManager, MaterialGroup, and InstanceMaterial are all interfaces
 - Separate (T)EI facing API from implementation
 - Comment out debug log in ModelPool
2021-08-23 22:34:27 -07:00
Jozufozu
2137f9e46d Errors and pools
- GlException and error checking WIP
 - Put all models within a material in a ModelPool
 - Instancers directly accept IModels
 - ModelPools are very WIP
2021-08-20 15:05:41 -07:00
Jozufozu
f4f6087e08 Storage clean-up
- Wrapper for sync objects
 - Compat layer for buffer storage
 - Don't get persistent buffers if they're not supported
2021-08-14 15:57:52 -07:00
Jozufozu
b9ac4f1fdc Persistent buffers v1.5
- Add new sync function to GlBuffer
2021-08-14 13:33:17 -07:00
Jozufozu
2ab0e221ce Merge branch 'dev' into shader-pipeline 2021-08-13 16:15:28 -07:00
Jozufozu
f0fc3fffb9 Persistent buffers v1 2021-08-13 16:15:20 -07:00
Jozufozu
b85bf14ad9 Better float array buffering 2021-08-13 13:35:18 -07:00
Jozufozu
11f55d1d56 Random utilities from a messy workspace
- 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"
2021-08-13 11:23:09 -07:00
Jozufozu
4817ce3fe1 Final loader and temporary ShaderSources 2021-08-10 17:39:11 -07:00
Jozufozu
947c611bbc Some decoupling
- 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
2021-08-10 15:20:51 -07:00
Jozufozu
b0c1ebc76f A heck of a lot
- 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
2021-08-10 02:06:22 -07:00
Jozufozu
392cfc9156 Reload
- 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
2021-08-08 22:33:32 -07:00
Jozufozu
9ea3344b6f Merge branch 'dev' into shader-pipeline 2021-08-08 17:07:33 -07:00
Jozufozu
1f2399236f Almost there
- WorldContext sort of uses a shader pipeline interface
 - Smarter import resolution
 - Reorganize shader sources
 - Rewritten shader templating
 - Still need builtin support
2021-08-07 01:00:32 -07:00
Jozufozu
f8ac5166c8 More LightVolume guards
- Should fix odd crash
2021-08-06 12:55:56 -07:00
Jozufozu
f9de5f4721 Merge branch 'dev' into shader-pipeline 2021-08-06 11:45:39 -07:00
Jozufozu
38b848624d Whoops remove that import 2021-08-05 15:05:47 -07:00
Jozufozu
931b4a33ae Event adjustments to work with optifine shadows 2021-08-05 14:53:22 -07:00
Jozufozu
a35c7150c2 More steps towards actually using the new loader 2021-08-05 12:16:17 -07:00
Jozufozu
9e699b7715 Merge branch 'dev' into shader-pipeline 2021-08-05 00:53:29 -07:00
Jozufozu
cda66c0ad8 Fix #23
- Clamp update divisor
2021-08-04 20:50:37 -07:00
Jozufozu
16e8eec6ab Fix nullpointer in ModelRenderer
- Somehow managed to only do a check in a subclass
 - Add #empty() helper method to IModel
2021-08-04 14:35:16 -07:00
Jozufozu
71ff2363a5 Miscellaneous documentation 2021-08-04 14:35:15 -07:00
Jozufozu
7eb0284db9
Simplify synchronization
- Use `synchronized` on the queue sets in favor of explicit locks.
 - Updates and additions work the same now
 - Move updates processing to separate function
2021-08-03 02:06:41 -07:00
Jordan Ramsay
9ae823ef92 Patch to stop the java.util.ConcurrentModificationException. 2021-08-03 16:52:00 +10:00
Jozufozu
d4517fbe94 Wrong display value for chunk caching command 2021-08-02 14:22:21 -07:00
Jozufozu
b530ea1be5 Fix chunk caching race condition add toggle
- /flywheel chunkCaching on|off
 - synchronized ftw
2021-08-02 00:06:26 -07:00
Jozufozu
a5850a46c8 Update changelog and remove dead QuaternionTransformStack.java 2021-07-30 14:34:04 -07:00
Jozufozu
0183451a06 Fix issue with missing banner pattern textures
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.

¯\_(ツ)_/¯
2021-07-29 18:50:47 -07:00
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
17d5081345 Expose ClippingHelper in BeginFrameEvent 2021-07-28 18:13:47 -07:00
Jozufozu
5fd7e10235 More info in RenderLayerEvent 2021-07-28 14:18:24 -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
aaf019f3cb Merge branch 'dev' into shader-pipeline
# Conflicts:
#	src/main/java/com/jozufozu/flywheel/backend/ShaderSources.java
2021-07-26 21:58:53 -07:00
Jozufozu
9c92e4d353 Update LightVolume to use enum wrapper for glActiveTexture 2021-07-26 16:18:38 -07:00
Jozufozu
06b5ba2f6d Consistent naming for normal debug mode 2021-07-26 13:42:38 -07:00
Jozufozu
172971d732 Optimize imports 2021-07-23 23:46:30 -07:00
Jozufozu
52e6d64bd9 MaterialManager and MaterialGroup refactor
- Material manager builder
 - No more overload render method/IProgramCallback
 - MaterialRenderers accept a Program consumer instead
2021-07-23 23:45:31 -07:00
Jozufozu
e4a72544ea Update forge
- but not to 36.2.0 because gradle hates me
2021-07-23 16:45:38 -07:00
Jozufozu
07825fb56f Basic model abstraction
- 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
2021-07-23 12:26:32 -07:00
Jozufozu
a42073f59a Merge branch 'dev' into vanilla-opt
# Conflicts:
#	src/main/java/com/jozufozu/flywheel/backend/instancing/Instancer.java
2021-07-22 14:09:28 -07:00
Jozufozu
fe954898bf Instance stealing 2021-07-22 14:07:02 -07:00
Jozufozu
3b906e39a1 MaterialGroups and massive refactors
- 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
2021-07-21 20:28:20 -07:00
Jozufozu
6f06283f6f Instancers like suppliers
- Instancers accept model suppliers instead of models directly
 - gpu resource allocation is deferred until render time
2021-07-19 15:45:00 -07:00
Jozufozu
7f2d8d8cb2 Prime update divisors
- Smooths out load when ticking too many instances
2021-07-18 18:21:30 -07:00
Jozufozu
e1aa055983 Parallel and caching
- NEEDS MORE TESTING
 - Tick and update instances in parallel
 - Mixin to cache chunk lookups
2021-07-18 18:00:09 -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
faceccb327 Merge branch 'dev' into shader-pipeline 2021-07-15 12:00:40 -07:00
Jozufozu
fdf839cd02 Mojmixins 2021-07-15 11:51:57 -07:00
Jozufozu
2238a00bac Remap to Mojmap, update gradle 2021-07-15 11:36:24 -07:00
Jozufozu
c4c07d8edd Merge branch 'dev' into shader-pipeline 2021-07-14 17:23:47 -07:00
Jozufozu
c6b0996b8a Ready for 0.1.1 (finally)
- Might have bumped the version too early.
 - Fix crash rendering breaking overlay after reloading resource packs.
2021-07-14 16:52:35 -07:00
Jozufozu
ef46e5acbf Fix gl error spam
- CrumblingProgram was trying to upload a uniform before the location was queried.
 - Adjust WorldProgram init to mitigate this in the future.
2021-07-14 15:47:44 -07:00
Jozufozu
d256397cb8 Fix crash on resource reload
- Backend wasn't properly cleaning up its state
 - Sneaky error in WorldAttached
2021-07-14 15:35:52 -07:00
Jozufozu
95dabd900e Better errors still
- 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
2021-07-14 15:20:49 -07:00
Jozufozu
279d3a2de7 Merge branch 'dev' into shader-pipeline 2021-07-13 23:31:16 -07:00
Jozufozu
defc4dace5 Hacky program link debug info
- Log which gl ids are assigned to different programs
 - Log name and basic state information
2021-07-13 15:57:14 -07:00
Jozufozu
9b17c96741 Merge branch 'dev' into shader-pipeline
# Conflicts:
#	src/main/java/com/jozufozu/flywheel/core/WorldContext.java
2021-07-12 23:53:35 -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
Jozufozu
5d47cc6136 Clean up
- 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
2021-07-12 16:42:43 -07:00
Jozufozu
f0822a5cd4 Fix bell not stopping at the bottom of its swing 2021-07-12 15:19:20 -07:00
Jozufozu
88b00e2ce2 Fix import ordering 2021-07-12 15:02:08 -07:00
Jozufozu
37a72842cf Atlases, bells, breaking
- Bell instance
 - Fix some inconsistencies with PartBuilder
 - Store information on texture atlasses
 - Crumbling overlay fixes
2021-07-12 14:52:54 -07:00
Jozufozu
1cfffa4448 Correctly render chests
- Give up on quaternions
 - Lids lazily update transform matrices
 - MatrixTransformStack
2021-07-11 15:54:51 -07:00
Jozufozu
3fb60b06d1 Actually backwards compat is important
- Reintroduce InstancedRenderRegistry#register methods
 - Deprecate the methods
2021-07-10 18:42:15 -07:00
Jozufozu
12abeb0cc5 Rename builders
- *Registrater -> *Config
 - build -> register
2021-07-10 11:36:30 -07:00
Jozufozu
30cc011ee9 Lids everywhere
- Ender chests and trapped chests, too
 - Chests orient themselves correctly
 - Lids do not position themselves correctly
 - Some math, will probably replace with JOML
2021-07-10 11:33:01 -07:00
Jozufozu
cda3a2e11a Merge branch 'dev' into vanilla-opt
# Conflicts:
#	src/main/java/com/jozufozu/flywheel/FlywheelClient.java
2021-07-09 13:45:52 -07:00
Jozufozu
4d91c06e86 PartialModel gets called from the right place 2021-07-09 13:39:56 -07:00
Jozufozu
0c611dbcb3 4d chest
- 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
2021-07-09 13:24:26 -07:00
Jozufozu
1ce6e6a70b Sporadic work done in an airport
- Initial ErrorBuilder class
 - Random documentation
2021-07-07 22:08:33 -07:00
Jozufozu
fff46ec348 Common type and character positions
- Shader source abstractions now inherit from AbstractShaderElement
 - Spans keep track of line and column positions
2021-07-06 12:38:32 -07:00
Jozufozu
b10e4024c3 Load a single file
- Use the new immutable sources system to load a single file
 - It doesn't compile it yet
 - Slightly less verbose name
2021-07-05 12:09:13 -07:00
Jozsef
fa5d586f0a Merge branch 'dev' into shader-pipeline 2021-07-02 13:23:02 -07:00
Jozsef
608204ee0a Crash fix and refactor
- 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<>
2021-07-02 13:12:33 -07:00
Jozsef
15d5396bc9 More loading tweaks
- Immutable function map
 - Parse #use directives on load
 - Recursive include gathering
 - More sane spec loading in WorldContext
 - StateSensitiveMultiProgram builder
 - Rename confusing game state things
2021-07-02 12:34:12 -07:00
Jozsef
1e2c6f49eb Merge branch 'dev' into shader-pipeline 2021-06-30 13:10:50 -07:00
Jozsef
3f03d1f071 Fix else formatting 2021-06-30 13:03:02 -07:00
Jozsef
33cdfb2ae9 Merge branch 'dev' into shader-pipeline
# Conflicts:
#	src/main/java/com/jozufozu/flywheel/backend/ShaderSources.java
2021-06-30 12:58:21 -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
Jozsef
70b58c2838 More fun parsing stuff
- Start loading things via ShaderSources
 - More Span functionality
 - Parse function arguments
2021-06-30 11:42:33 -07:00
JozsefA
5b63d36ab0 Merge branch 'dev' into shader-pipeline 2021-06-27 18:50:38 -07:00
JozsefA
f89673a79e Reset StitchedSprites when the atlas is stitched
- Might fix simi's slime issue
2021-06-26 16:05:15 -07:00
JozsefA
68712430eb Merge branch 'dev' into shader-pipeline 2021-06-26 13:07:27 -07:00
JozsefA
9e983562b8 Always dispatch render layer events 2021-06-26 13:05:21 -07:00
JozsefA
2325db4cdf Start work on shader pipeline system
- Unbulit, untested so far
 - Will ultimately supersede shader contexts/templating
 - Laying framework for better compile errors via Span.java
2021-06-25 18:01:50 -07:00
JozsefA
195a7348f3 Instanced entities are compatible with optifine
- Fix mixin related crash on startup
 - Change defaultRequire to 0
2021-06-24 19:37:31 -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
f8e05d7f8a Fix complaint about an unknown custom packet identifier 2021-06-24 10:42:25 -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
2bde33af00 Cleanup flywheel event listeners, fix crash on server startup 2021-06-23 13:19:03 -07:00
JozsefA
78611b0038 Print final shader source on compilation error 2021-06-23 09:08:34 -07:00
JozsefA
6b67e3d55d Add fabulous depth fix 2021-06-22 20:06:00 -07:00
JozsefA
9565a679be Little tweaks and add the logo to mods.toml 2021-06-19 16:52:23 -07:00
JozsefA
96670f3276 Commands, config, and a logo
- 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!)
2021-06-18 22:52:33 -07:00
JozsefA
3a82535e2d Nuke mod class 2021-06-16 13:03:40 -07:00
JozsefA
7b427e3c92 Yeet 2021-06-16 11:19:33 -07:00
JozsefA
d612cfdd34 Merge remote-tracking branch 'origin/mc1.16/dev' into chromatic-projector 2021-06-11 10:31:18 -07:00
JozsefA
c1dadf3860 Instance managers are abstract 2021-06-10 14:34:16 -07:00
JozsefA
b4a1fbf2c7 Instanced entities are lit 2021-06-09 00:26:54 -07:00
JozsefA
9cc03a81d7 Instanced entities stage 1 2021-06-07 18:12:46 -07:00
JozsefA
285b8f98cf Instanced entities stage 0 2021-06-07 02:43:36 -07:00
JozsefA
d47f898c76 Move away from a static backend class, add a registration event 2021-06-06 15:46:16 -07:00
JozsefA
457fff78f3 Mostly untangle the loading functions, enforce triangles 2021-06-04 17:55:05 -07:00
JozsefA
9bac709dfd Event system, sort of untangle backend 2021-06-04 15:56:46 -07:00
JozsefA
bef6d77a59 Start working on instanced enti- oh wait I've got to do all this other stuff first
- 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
2021-06-03 21:23:06 -07:00
JozsefA
d7ed765dde Debug text 2021-06-01 13:47:38 -07:00
JozsefA
c4b828ba56 Allocate no more than 3 quad->triangle EBOs ever. 2021-05-31 14:58:49 -07:00
JozsefA
a526156440 Move a package 2021-05-31 12:51:11 -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
de451553dd Use VAOs for contraption structures 2021-05-25 12:46:34 -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
db53b7a3cf Fix gl error spam 2021-05-23 19:36:44 -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
695fe98d28 MaterialSpecs choose their model formats 2021-05-16 20:37:26 -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
c1b7a1c19d Extremely fancy shader templating
- 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.
2021-05-11 18:24:12 -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
70401e4ac4 More tweaking
- FLWFinalizeColor takes care of assigning gl_FragColor
 - Multiply crumbling alpha with diffuse alpha
2021-05-08 23:29:02 -07:00
JozsefA
05b56b9b5e Error when missing #flwbuiltins in WorldContext 2021-05-07 22:15:07 -07:00
JozsefA
aa1a45f164 Block breaking overlay is animated now 2021-05-07 21:24: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
9736ba19b5 Things here and there
- Move CreateClient.kineticRenderer to Backend
 - InstancedTileRenderers keep track of their own queuedUpdates
 - Sort of a listener system for some render events
2021-05-04 23:56:50 -07:00
JozsefA
55e3f50f64 MaterialSpecs act alone
- No more awkward MaterialType/MaterialSpec business
 - MaterialTypes are registered directly
 - FastRenderDispatcher merged with backend
2021-05-04 21:00:55 -07:00
JozsefA
b6f13aa7ff More granularity for shader context loading 2021-05-04 16:22:27 -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
35768b5ade Step towards arbitrary shader contexts 2021-05-02 14:16:02 -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