Full Code of Argon4W/AcceleratedRendering for AI

main 2644bed53eb0 cached
359 files
805.2 KB
230.8k tokens
1515 symbols
1 requests
Download .txt
Showing preview only (948K chars total). Download the full file or copy to clipboard to get everything.
Repository: Argon4W/AcceleratedRendering
Branch: main
Commit: 2644bed53eb0
Files: 359
Total size: 805.2 KB

Directory structure:
gitextract_d9366gy4/

├── .gitattributes
├── .github/
│   └── workflows/
│       └── build.yml
├── .gitignore
├── LICENSE
├── README.md
├── build.gradle
├── changelogs/
│   ├── changelog-1.0.0.md
│   ├── changelog-1.0.1.md
│   ├── changelog-1.0.2.md
│   ├── changelog-1.0.3.md
│   ├── changelog-1.0.4.md
│   ├── changelog-1.0.5.1.md
│   ├── changelog-1.0.5.md
│   ├── changelog-1.0.6.md
│   ├── changelog-1.0.7.md
│   └── changelog-1.0.8.md
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── images/
│   ├── LOGO.psd
│   └── benchmark.psd
├── settings.gradle
└── src/
    └── main/
        ├── java/
        │   └── com/
        │       └── github/
        │           └── argon4w/
        │               └── acceleratedrendering/
        │                   ├── AcceleratedRenderingModEntry.java
        │                   ├── compat/
        │                   │   ├── AbstractCompatMixinPlugin.java
        │                   │   ├── curios/
        │                   │   │   ├── CuriosCompatFeature.java
        │                   │   │   └── mixins/
        │                   │   │       └── CuriosLayerMixin.java
        │                   │   ├── immediatelyfast/
        │                   │   │   └── mixins/
        │                   │   │       ├── BatchableBufferSourceMixin.java
        │                   │   │       ├── BatchingBuffersMixin.java
        │                   │   │       └── WrappedRenderLayerMixin.java
        │                   │   └── iris/
        │                   │       ├── IrisCompatBuffers.java
        │                   │       ├── IrisCompatBuffersProvider.java
        │                   │       ├── IrisCompatFeature.java
        │                   │       ├── environments/
        │                   │       │   └── IrisBufferEnvironment.java
        │                   │       ├── interfaces/
        │                   │       │   ├── IIrisAcceleratedBufferBuilder.java
        │                   │       │   ├── IIrisMeshInfo.java
        │                   │       │   └── IIrisMeshInfoCache.java
        │                   │       ├── mixins/
        │                   │       │   ├── acceleratedrendering/
        │                   │       │   │   ├── AcceleratedBufferBuilderMixin.java
        │                   │       │   │   ├── AcceleratedBufferSourceMixin.java
        │                   │       │   │   ├── AcceleratedRenderingModEntryMixin.java
        │                   │       │   │   ├── CoreBuffersProviderMixin.java
        │                   │       │   │   ├── FlattenMeshInfoCacheMixin.java
        │                   │       │   │   ├── IBufferEnvironmentPresetsMixin.java
        │                   │       │   │   ├── MeshUploaderMixin.java
        │                   │       │   │   ├── MeshUploadingProgramDispatcherMixin.java
        │                   │       │   │   ├── RenderTypeUtilsMixin.java
        │                   │       │   │   ├── SimpleMeshInfoCacheMixin.java
        │                   │       │   │   ├── SimpleMeshInfoMixin.java
        │                   │       │   │   └── UnsafeMemoryMeshInfoCacheMixin.java
        │                   │       │   ├── iris/
        │                   │       │   │   ├── FullyBufferedMultiBufferSourceMixin.java
        │                   │       │   │   ├── HandRendererMixin.java
        │                   │       │   │   ├── IrisVertexFormatsMixin.java
        │                   │       │   │   ├── ModelToEntityVertexSerializerMixin.java
        │                   │       │   │   └── ShadowRendererMixin.java
        │                   │       │   ├── plugin/
        │                   │       │   │   └── IrisCompatMixinPlugin.java
        │                   │       │   └── vanilla/
        │                   │       │       └── LevelRendererMixin.java
        │                   │       └── programs/
        │                   │           ├── IrisPrograms.java
        │                   │           ├── culling/
        │                   │           │   ├── IrisCullingProgramDispatcher.java
        │                   │           │   └── IrisCullingProgramSelector.java
        │                   │           └── processing/
        │                   │               └── IrisPolygonProcessor.java
        │                   ├── configs/
        │                   │   ├── FeatureConfig.java
        │                   │   ├── FeatureStatus.java
        │                   │   └── PipelineSetting.java
        │                   ├── core/
        │                   │   ├── CoreBuffers.java
        │                   │   ├── CoreBuffersProvider.java
        │                   │   ├── CoreFeature.java
        │                   │   ├── CoreStates.java
        │                   │   ├── backends/
        │                   │   │   ├── DebugOutput.java
        │                   │   │   ├── GLConstants.java
        │                   │   │   ├── Sync.java
        │                   │   │   ├── VertexArray.java
        │                   │   │   ├── buffers/
        │                   │   │   │   ├── EmptyServerBuffer.java
        │                   │   │   │   ├── IClientBuffer.java
        │                   │   │   │   ├── IServerBuffer.java
        │                   │   │   │   ├── ImmutableBuffer.java
        │                   │   │   │   ├── MappedBuffer.java
        │                   │   │   │   └── MutableBuffer.java
        │                   │   │   ├── programs/
        │                   │   │   │   ├── BarrierFlags.java
        │                   │   │   │   ├── ComputeProgram.java
        │                   │   │   │   ├── ComputeShader.java
        │                   │   │   │   └── Uniform.java
        │                   │   │   └── states/
        │                   │   │       ├── EmptyBindingState.java
        │                   │   │       ├── FramebufferBindingState.java
        │                   │   │       ├── IBindingState.java
        │                   │   │       ├── buffers/
        │                   │   │       │   ├── BlockBufferBindingStateType.java
        │                   │   │       │   ├── BufferBlockType.java
        │                   │   │       │   ├── SimpleBlockBufferBindingState.java
        │                   │   │       │   └── cache/
        │                   │   │       │       ├── BlockBufferBindingCacheType.java
        │                   │   │       │       ├── FlattenBlockBufferBindingCache.java
        │                   │   │       │       ├── IBlockBufferBindingCache.java
        │                   │   │       │       ├── SimpleBlockBufferBinding.java
        │                   │   │       │       ├── SimpleBlockBufferBindingCache.java
        │                   │   │       │       └── UnsafeMemoryBlockBufferBindingCache.java
        │                   │   │       ├── scissors/
        │                   │   │       │   ├── MojangScissorBindingState.java
        │                   │   │       │   ├── OpenGLScissorBindingState.java
        │                   │   │       │   └── ScissorBindingStateType.java
        │                   │   │       └── viewports/
        │                   │   │           ├── MojangViewportBindingState.java
        │                   │   │           ├── OpenGLViewportBindingState.java
        │                   │   │           └── ViewportBindingStateType.java
        │                   │   ├── buffers/
        │                   │   │   ├── AcceleratedBufferSources.java
        │                   │   │   ├── EmptyAcceleratedBufferSources.java
        │                   │   │   ├── accelerated/
        │                   │   │   │   ├── AcceleratedBufferSource.java
        │                   │   │   │   ├── AcceleratedRingBuffers.java
        │                   │   │   │   ├── IAcceleratedBufferSource.java
        │                   │   │   │   ├── IAccelerationHolder.java
        │                   │   │   │   ├── builders/
        │                   │   │   │   │   ├── AcceleratedBufferBuilder.java
        │                   │   │   │   │   ├── AcceleratedEntityOutlineGenerator.java
        │                   │   │   │   │   ├── AcceleratedSheetedDecalTextureGenerator.java
        │                   │   │   │   │   ├── AcceleratedSpriteCoordinateExpander.java
        │                   │   │   │   │   ├── AcceleratedVertexConsumerWrapper.java
        │                   │   │   │   │   ├── BufferSourceExtension.java
        │                   │   │   │   │   ├── IAcceleratableBufferSource.java
        │                   │   │   │   │   ├── IAcceleratedVertexConsumer.java
        │                   │   │   │   │   ├── IBufferGraph.java
        │                   │   │   │   │   └── VertexConsumerExtension.java
        │                   │   │   │   ├── layers/
        │                   │   │   │   │   ├── LayerDrawType.java
        │                   │   │   │   │   ├── LayerKey.java
        │                   │   │   │   │   ├── functions/
        │                   │   │   │   │   │   ├── CustomLayerFunction.java
        │                   │   │   │   │   │   ├── EmptyLayerFunction.java
        │                   │   │   │   │   │   └── ILayerFunction.java
        │                   │   │   │   │   └── storage/
        │                   │   │   │   │       ├── ILayerContexts.java
        │                   │   │   │   │       ├── ILayerStorage.java
        │                   │   │   │   │       ├── LayerStorageType.java
        │                   │   │   │   │       ├── SeparatedLayerStorage.java
        │                   │   │   │   │       ├── SimpleLayerContexts.java
        │                   │   │   │   │       ├── empty/
        │                   │   │   │   │       │   ├── EmptyLayerContexts.java
        │                   │   │   │   │       │   └── EmptyLayerStorage.java
        │                   │   │   │   │       └── sorted/
        │                   │   │   │   │           ├── SortedLayerContexts.java
        │                   │   │   │   │           └── SortedLayerStorage.java
        │                   │   │   │   ├── pools/
        │                   │   │   │   │   ├── DrawContextPool.java
        │                   │   │   │   │   ├── ElementBufferPool.java
        │                   │   │   │   │   ├── StagingBufferPool.java
        │                   │   │   │   │   └── meshes/
        │                   │   │   │   │       ├── FlattenMeshInfoCache.java
        │                   │   │   │   │       ├── IMeshInfoCache.java
        │                   │   │   │   │       ├── MeshInfoCacheType.java
        │                   │   │   │   │       ├── MeshUploaderPool.java
        │                   │   │   │   │       ├── SimpleMeshInfo.java
        │                   │   │   │   │       ├── SimpleMeshInfoCache.java
        │                   │   │   │   │       └── UnsafeMemoryMeshInfoCache.java
        │                   │   │   │   └── renderers/
        │                   │   │   │       ├── DecoratedRenderer.java
        │                   │   │   │       ├── IAcceleratedRenderer.java
        │                   │   │   │       ├── IBufferDecorator.java
        │                   │   │   │       └── SheetedDecalTextureRenderer.java
        │                   │   │   ├── environments/
        │                   │   │   │   ├── IBufferEnvironment.java
        │                   │   │   │   └── VanillaBufferEnvironment.java
        │                   │   │   └── memory/
        │                   │   │       ├── IMemoryInterface.java
        │                   │   │       ├── IMemoryLayout.java
        │                   │   │       ├── NullMemoryInterface.java
        │                   │   │       ├── SimpleDynamicMemoryInterface.java
        │                   │   │       ├── SimpleMemoryInterface.java
        │                   │   │       └── VertexLayout.java
        │                   │   ├── meshes/
        │                   │   │   ├── ClientMesh.java
        │                   │   │   ├── EmptyMesh.java
        │                   │   │   ├── IMesh.java
        │                   │   │   ├── MeshType.java
        │                   │   │   ├── ServerMesh.java
        │                   │   │   ├── collectors/
        │                   │   │   │   ├── CulledMeshCollector.java
        │                   │   │   │   ├── IMeshCollector.java
        │                   │   │   │   └── SimpleMeshCollector.java
        │                   │   │   └── data/
        │                   │   │       ├── MeshData.java
        │                   │   │       └── cache/
        │                   │   │           ├── IMeshDataCache.java
        │                   │   │           ├── IgnoreMeshDataCache.java
        │                   │   │           ├── MeshDataCacheType.java
        │                   │   │           ├── MeshDataCaches.java
        │                   │   │           └── SimpleMeshDataCache.java
        │                   │   ├── mixins/
        │                   │   │   ├── GameRendererMixin.java
        │                   │   │   ├── LevelRendererMixin.java
        │                   │   │   ├── buffers/
        │                   │   │   │   ├── BufferBuilderMixin.java
        │                   │   │   │   ├── BufferSourceMixin.java
        │                   │   │   │   ├── EntityOutlineGeneratorMixin.java
        │                   │   │   │   ├── MinecraftMixin.java
        │                   │   │   │   ├── OutlineBufferSourceMixin.java
        │                   │   │   │   ├── SheetedDecalTextureGeneratorMixin.java
        │                   │   │   │   ├── SpriteCoordinateExpanderMixin.java
        │                   │   │   │   ├── VertexConsumerMixin.java
        │                   │   │   │   ├── VertexDoubleConsumerMixin.java
        │                   │   │   │   └── VertexMultipleConsumerMixin.java
        │                   │   │   └── compatibility/
        │                   │   │       ├── MinecraftMixin.java
        │                   │   │       ├── ParticleEngineMixin.java
        │                   │   │       ├── RenderTypeMixin.java
        │                   │   │       └── WindowMixin.java
        │                   │   ├── programs/
        │                   │   │   ├── ComputeShaderDefinition.java
        │                   │   │   ├── ComputeShaderProgramLoader.java
        │                   │   │   ├── ComputeShaderPrograms.java
        │                   │   │   ├── LoadComputeShaderEvent.java
        │                   │   │   ├── culling/
        │                   │   │   │   ├── ICullingProgramDispatcher.java
        │                   │   │   │   ├── ICullingProgramSelector.java
        │                   │   │   │   ├── LoadCullingProgramSelectorEvent.java
        │                   │   │   │   ├── PassThroughCullingProgramDispatcher.java
        │                   │   │   │   └── PassThroughCullingProgramSelector.java
        │                   │   │   ├── dispatchers/
        │                   │   │   │   ├── EmptyProgramDispatcher.java
        │                   │   │   │   ├── FixedPolygonProgramDispatcher.java
        │                   │   │   │   ├── IPolygonProgramDispatcher.java
        │                   │   │   │   ├── MeshUploadingProgramDispatcher.java
        │                   │   │   │   └── TransformProgramDispatcher.java
        │                   │   │   ├── overrides/
        │                   │   │   │   ├── IShaderProgramOverride.java
        │                   │   │   │   ├── IShaderProgramOverrides.java
        │                   │   │   │   ├── ITransformShaderProgramOverride.java
        │                   │   │   │   ├── IUploadingShaderProgramOverride.java
        │                   │   │   │   ├── LoadShaderProgramOverridesEvent.java
        │                   │   │   │   └── OverrideProgramType.java
        │                   │   │   └── processing/
        │                   │   │       ├── EmptyPolygonProcessor.java
        │                   │   │       ├── IPolygonProcessor.java
        │                   │   │       └── LoadPolygonProcessorEvent.java
        │                   │   └── utils/
        │                   │       ├── CullerUtils.java
        │                   │       ├── DirectionUtils.java
        │                   │       ├── EmptyIterator.java
        │                   │       ├── FastColorUtils.java
        │                   │       ├── FuzzyMatrix4f.java
        │                   │       ├── IntArrayHashStrategy.java
        │                   │       ├── LoopResetPool.java
        │                   │       ├── MemUtils.java
        │                   │       ├── MutableSize.java
        │                   │       ├── PackedVector2i.java
        │                   │       ├── PoseStackExtension.java
        │                   │       ├── RegistryFilter.java
        │                   │       ├── RenderTypeUtils.java
        │                   │       ├── ResourceLocationUtils.java
        │                   │       ├── SimpleCachedArray.java
        │                   │       ├── SimpleResetPool.java
        │                   │       ├── SimpleTextureTarget.java
        │                   │       ├── TextureUtils.java
        │                   │       └── Vertex.java
        │                   └── features/
        │                       ├── culling/
        │                       │   ├── OrientationCullingFeature.java
        │                       │   ├── OrientationCullingProgramDispatcher.java
        │                       │   ├── OrientationCullingProgramSelector.java
        │                       │   └── OrientationCullingPrograms.java
        │                       ├── emf/
        │                       │   ├── IEMFModelVariant.java
        │                       │   └── mixins/
        │                       │       ├── EMFModelPartMixin.java
        │                       │       └── EMFModelPartWithStateMixin.java
        │                       ├── entities/
        │                       │   ├── AcceleratedEntityRenderingFeature.java
        │                       │   ├── AcceleratedEntityShadowRenderer.java
        │                       │   └── mixins/
        │                       │       ├── EntityRenderDispatcherMixin.java
        │                       │       └── InventoryScreenMixin.java
        │                       ├── filter/
        │                       │   ├── FilterFeature.java
        │                       │   ├── FilterType.java
        │                       │   └── mixins/
        │                       │       ├── AbstractContainerScreenMixin.java
        │                       │       ├── BlockEntityRenderDispatcherMixin.java
        │                       │       ├── ClientHooksMixin.java
        │                       │       ├── ItemRendererMixin.java
        │                       │       └── LevelRendererMixin.java
        │                       ├── ftb/
        │                       │   └── mixins/
        │                       │       └── BaseScreenMixin.java
        │                       ├── geckolib/
        │                       │   └── mixins/
        │                       │       ├── GeoBoneMixin.java
        │                       │       └── GeoRendererMixin.java
        │                       ├── items/
        │                       │   ├── AcceleratedItemRenderingFeature.java
        │                       │   ├── AcceleratedQuadsRenderer.java
        │                       │   ├── BakedModelExtension.java
        │                       │   ├── IAcceleratedBakedModel.java
        │                       │   ├── IAcceleratedBakedQuad.java
        │                       │   ├── colors/
        │                       │   │   ├── BlockLayerColors.java
        │                       │   │   ├── EmptyBlockColor.java
        │                       │   │   ├── EmptyItemColor.java
        │                       │   │   ├── FixedColors.java
        │                       │   │   ├── ILayerColors.java
        │                       │   │   └── ItemLayerColors.java
        │                       │   ├── contexts/
        │                       │   │   ├── AcceleratedModelRenderContext.java
        │                       │   │   ├── AcceleratedQuadsRenderContext.java
        │                       │   │   └── DecorationRenderContext.java
        │                       │   ├── gui/
        │                       │   │   ├── GuiBatchingController.java
        │                       │   │   ├── GuiRenderTypes.java
        │                       │   │   ├── contexts/
        │                       │   │   │   ├── BlitDrawContext.java
        │                       │   │   │   ├── DecoratorDrawContext.java
        │                       │   │   │   ├── FillDrawContext.java
        │                       │   │   │   ├── GradientDrawContext.java
        │                       │   │   │   ├── HighlightDrawContext.java
        │                       │   │   │   ├── IGuiElementContext.java
        │                       │   │   │   ├── ItemRenderContext.java
        │                       │   │   │   └── string/
        │                       │   │   │       ├── ComponentStringDrawContext.java
        │                       │   │   │       ├── FormattedStringDrawContext.java
        │                       │   │   │       ├── IStringDrawContext.java
        │                       │   │   │       ├── Outline8StringDrawContext.java
        │                       │   │   │       └── RawStringDrawContext.java
        │                       │   │   └── renderer/
        │                       │   │       ├── AcceleratedBlitRenderer.java
        │                       │   │       ├── AcceleratedFillRenderer.java
        │                       │   │       └── AcceleratedGradientRenderer.java
        │                       │   └── mixins/
        │                       │       ├── ItemRendererMixin.java
        │                       │       ├── ModelBlockRendererMixin.java
        │                       │       ├── accessors/
        │                       │       │   ├── BlockColorsAccessor.java
        │                       │       │   └── ItemColorsAccessor.java
        │                       │       ├── compatibility/
        │                       │       │   ├── ClientHooksMixin.java
        │                       │       │   └── GuiLayerManagerMixin.java
        │                       │       ├── gui/
        │                       │       │   ├── AbstractContainerScreenMixin.java
        │                       │       │   ├── FontMixin.java
        │                       │       │   ├── GuiGraphicsMixin.java
        │                       │       │   └── GuiMixin.java
        │                       │       └── models/
        │                       │           ├── BakedCompositeModelMixin.java
        │                       │           ├── BakedModelMixin.java
        │                       │           ├── BakedQuadMixin.java
        │                       │           ├── BakedSeparateTransformsModelMixin.java
        │                       │           ├── MultipartBakedModelMixin.java
        │                       │           ├── SimpleBakedModelMixin.java
        │                       │           └── WeightedBakedModelMixin.java
        │                       ├── modelparts/
        │                       │   └── mixins/
        │                       │       └── ModelPartMixin.java
        │                       ├── simplebedrockmodel/
        │                       │   └── mixins/
        │                       │       └── BedrockPartMixin.java
        │                       ├── text/
        │                       │   ├── AcceleratedBakedGlyphRenderer.java
        │                       │   ├── AcceleratedTextRenderingFeature.java
        │                       │   └── mixins/
        │                       │       ├── BakedGlyphEffectMixin.java
        │                       │       └── BakedGlyphMixin.java
        │                       └── touhoulittlemaid/
        │                           └── mixins/
        │                               ├── GeoBoneMixin.java
        │                               └── IGeoRendererMixin.java
        └── resources/
            ├── META-INF/
            │   ├── accesstransformer.cfg
            │   └── neoforge.mods.toml
            ├── acceleratedrendering.compat.curios.mixins.json
            ├── acceleratedrendering.compat.immediatelyfast.mixins.json
            ├── acceleratedrendering.compat.iris.mixins.json
            ├── acceleratedrendering.core.mixins.json
            ├── acceleratedrendering.feature.entities.mixins.json
            ├── acceleratedrendering.feature.entitymodelfeature.mixins.json
            ├── acceleratedrendering.feature.filter.mixins.json
            ├── acceleratedrendering.feature.ftb.mixins.json
            ├── acceleratedrendering.feature.geckolib.mixins.json
            ├── acceleratedrendering.feature.items.mixins.json
            ├── acceleratedrendering.feature.modelparts.mixins.json
            ├── acceleratedrendering.feature.simplebedrockmodel.mixins.json
            ├── acceleratedrendering.feature.text.mixins.json
            ├── acceleratedrendering.feature.touhoulittlemaid.mixins.json
            └── assets/
                └── acceleratedrendering/
                    ├── lang/
                    │   ├── en_us.json
                    │   └── zh_cn.json
                    └── shaders/
                        ├── compat/
                        │   ├── culling/
                        │   │   ├── iris_block_quad_culling_shader.compute
                        │   │   ├── iris_block_triangle_culling_shader.compute
                        │   │   ├── iris_entity_quad_culling_shader.compute
                        │   │   └── iris_entity_triangle_culling_shader.compute
                        │   ├── processing/
                        │   │   ├── iris_block_quad_processing_shader.compute
                        │   │   ├── iris_block_triangle_processing_shader.compute
                        │   │   ├── iris_entity_quad_processing_shader.compute
                        │   │   ├── iris_entity_triangle_processing_shader.compute
                        │   │   ├── iris_glyph_quad_processing_shader.compute
                        │   │   └── iris_glyph_triangle_processing_shader.compute
                        │   ├── transform/
                        │   │   ├── iris_block_vertex_transform_shader.compute
                        │   │   ├── iris_entity_vertex_transform_shader.compute
                        │   │   └── iris_glyph_vertex_transform_shader.compute
                        │   └── uploading/
                        │       ├── iris_block_mesh_uploading_shader.compute
                        │       ├── iris_entity_mesh_uploading_shader.compute
                        │       └── iris_glyph_mesh_uploading_shader.compute
                        └── core/
                            ├── culling/
                            │   ├── block_quad_culling_shader.compute
                            │   ├── block_triangle_culling_shader.compute
                            │   ├── entity_quad_culling_shader.compute
                            │   ├── entity_triangle_culling_shader.compute
                            │   ├── pass_through_quad_culling_shader.compute
                            │   ├── pass_through_triangle_culling_shader.compute
                            │   ├── pos_tex_color_quad_culling_shader.compute
                            │   ├── pos_tex_color_triangle_culling_shader.compute
                            │   ├── pos_tex_quad_culling_shader.compute
                            │   └── pos_tex_triangle_culling_shader.compute
                            ├── transform/
                            │   ├── block_vertex_transform_shader.compute
                            │   ├── entity_vertex_transform_shader.compute
                            │   ├── pos_color_tex_light_vertex_transform_shader.compute
                            │   ├── pos_color_vertex_transform_shader.compute
                            │   ├── pos_tex_color_vertex_transform_shader.compute
                            │   ├── pos_tex_vertex_transform_shader.compute
                            │   └── pos_vertex_transform_shader.compute
                            └── uploading/
                                ├── block_mesh_uploading_shader.compute
                                ├── entity_mesh_uploading_shader.compute
                                ├── pos_color_mesh_uploading_shader.compute
                                ├── pos_color_tex_light_mesh_uploading_shader.compute
                                ├── pos_mesh_uploading_shader.compute
                                ├── pos_tex_color_mesh_uploading_shader.compute
                                └── pos_tex_mesh_uploading_shader.compute

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitattributes
================================================
# Disable autocrlf on generated files, they always generate with LF
# Add any extra files or paths here to make git stop saying they
# are changed when only line endings change.
src/generated/**/.cache/cache text eol=lf
src/generated/**/*.json text eol=lf


================================================
FILE: .github/workflows/build.yml
================================================
name: Build

on: [push, pull_request, workflow_dispatch]

jobs:
  build:
    runs-on: ubuntu-22.04
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup Java 21
        uses: actions/setup-java@v4
        with:
          distribution: 'temurin'
          java-version: 21

      - name: Get Short Identifier
        uses: benjlevesque/short-sha@v2.2
        id: short-sha

      - name: Build
        id: build
        run: |
          chmod +x ./gradlew
          ./gradlew build
          VERSION_IDENTIFIER=SNAPSHOT+${{ steps.short-sha.outputs.sha }}
          FILE_NAME="$(ls ./build/libs -1 | head -n 1)"
          NEW_NAME="${FILE_NAME%.jar}-${VERSION_IDENTIFIER}.jar"
          mv "./build/libs/$FILE_NAME" "./build/libs/$NEW_NAME"
          echo "artifact_name=$NEW_NAME" >> "$GITHUB_OUTPUT"
          echo "artifact_path=./build/libs/$NEW_NAME" >> "$GITHUB_OUTPUT"

      - name: GitHub Action Artifact
        uses: actions/upload-artifact@v4
        with:
          name: ${{ steps.build.outputs.artifact_name }}
          path: ${{ steps.build.outputs.artifact_path }}


================================================
FILE: .gitignore
================================================
# eclipse
bin
*.launch
.settings
.metadata
.classpath
.project

# idea
out
*.ipr
*.iws
*.iml
.idea

# gradle
build
.gradle

# other
eclipse
run
runs
run-data

repo

================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2023 Argon4W

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
# 加速渲染 ([EN version](#english))

加速渲染是一个客户端实体渲染优化MOD.
目的是改善在渲染大量实体或拥有大量顶点的复杂MOD实体的情况下产生的渲染性能问题,
与此同时尽可能与光影MOD和其他MOD及其自定义实体兼容.

![Benchmark](images/benchmark.jpg)

## 🍝赞助
加速渲染基本由我一人完成, 花费了数千小时对其进行开发和测试, 才得以发布.
来自广大玩家们的赞助将用于加速渲染后续的更快的开发, 创新和优化, 感谢所有支持者!
如果你喜欢这个MOD, 并且想要支持加速渲染的开发, 请前往[爱发电](https://afdian.com/a/argon4w)为狐狸买一份意面

## ✨为什么需要这个MOD

Minecraft拥有一个羸弱的, 继承使用OpenGL立即模式的老版本的渲染系统以用来渲染实体和方块实体.
这个渲染系统会在**CPU**上**单线程**每帧变换和上传实体渲染所需要的顶点.
这就导致有巨量的时间被浪费在这些单线程执行的操作上, 导致了在渲染大量顶点时CPU其他核心和GPU空闲, 而FPS却十分低的奇异景象.

## ⚙️工作原理

加速渲染构建了一个独特的渲染管线, 将变换前的顶点缓存至模型中, 并在需要渲染时将其提交到GPU使用计算着色器进行多线程并行变换.
之后使用原本渲染系统中所使用的着色器进行渲染绘制. 通过这个渲染管线, 加速渲染可以在将实体渲染效率大幅提升,
将CPU压力转移的同时维持对光影MOD的兼容性 (当前兼容Iris Shaders). 并且所有渲染特性都可以被关闭以保证兼容性.

## 🖥️硬件要求

加速渲染因为使用了持久映射缓冲区(Persistently Mapped Buffer)和计算着色器, 因此需要OpenGL 4.6才能正常工作.
理论上NVIDIA GT 400 Series, Intel HD Graphics 520/530及以上的显卡可以满足这个要求.
加速渲染已经在发布前在NVIDIA GTX 1660Ti Max-Q, NVIDIA RTX 3070Ti Laptop, NVIDIA RTX 4090 Laptop, RX 580, RX 5600XT上经过测试.
移动设备目前**不受支持**.

## 🛠️配置
配置文件可以在``<Minecraft安装位置>/.minecraft/config/acceleratedrendering-client.toml``找到. 你可以通过配置文件修改加速特性或在游戏内进行修改.
部分特性可能需要重启游戏才能生效. 你可以在``模组 > Accelerated Rendering > 配置``找到游戏内配置编辑器.
如要让加速物品渲染正常工作, 请在"核心配置" (Core Settings) 处开启"强制加速半透明" (Force Translucent Acceleration).

<a id="english"></a>
# AcceleratedRendering

This is a client side only entity rendering optimization MOD, aiming at improving performance when rendering large amount of entities
or complex modded entities with significant amount of vertices with compute shaders on GPU while being compatible with shader packs,
other MODs and their entities.

![Benchmark](images/benchmark.jpg)

## 🍝Sponsorship

This MOD is almost fully done by myself and took thousands of hours of my own time working and testing on it to be released.
Sponsorships from players can ensure the future development, innovation and optimization of this MOD. Thanks for everyone
that support this MOD! If you like it and want to support my work on the development of AcceleratedRendering, please consider sponsoring me at [爱发电](https://afdian.com/a/argon4w)

## ✨Why you need this MOD

Minecraft has a poor immediate rendering system for rendering entities (including block entities) that is inherited from
OpenGL immediate rendering mode that older versions of Minecraft uses. It transforms and uploads vertices on a **single render thread** on **CPU**
every frame the entities are rendered, which results in huge amount of time being spent on these operations and left CPU and GPU idle with a very low FPS
when rendering large amount of vertices.

## ⚙️How it works

AcceleratedRendering constructs a unique rendering pipeline that caches the "original" vertices (vertices before the transform)
into meshes and transforms them to be parallel in GPU using compute shaders. Then it draws the transformed vertices with the original shader.
In this way, this MOD can make entity rendering much more efficient by shifting the transforming stress off from the CPU
while still being compatible with shader packs (currently support Iris Shaders). All acceleration features can be disabled
for better compatibility.

## 🖥️Hardware Requirements

AcceleratedRendering requires OpenGL 4.6 to work properly for the usage of persistently mapped buffers and compute shaders.
Graphics cards like NVIDIA GT 400 Series and Intel HD Graphics 520/530 or newer will fit this requirement.
This MOD has been tested on NVIDIA GTX 1660Ti Max-Q, NVIDIA RTX 3070Ti Laptop, NVIDIA RTX 4090 Laptop, RX 580, RX 5600XT.
Mobile devices currently are **not supported**.

## 🛠️Configuration

Configuration file can be found in ``<your Minecraft>/.minecraft/config/acceleratedrendering-client.toml``. You can modify
acceleration features in this file or in game (some specific configurations require a game restart to take effect).
In-game configuration editor can be found in ``Mods > Accelerated Rendering > Config``.
"Force Translucent Acceleration" in "Core Settings" is required to be enabled for accelerated item rendering to work properly.


================================================
FILE: build.gradle
================================================
plugins {
    id 'java-library'
    id 'eclipse'
    id 'idea'
    id 'maven-publish'
    id 'net.neoforged.gradle.userdev' version '7.0.189'
}

tasks.named('wrapper', Wrapper).configure {
    // Define wrapper values here so as to not have to always do so when updating gradlew.properties.
    // Switching this to Wrapper.DistributionType.ALL will download the full gradle sources that comes with
    // documentation attached on cursor hover of gradle classes and methods. However, this comes with increased
    // file size for Gradle. If you do switch this to ALL, run the Gradle wrapper task twice afterwards.
    // (Verify by checking gradle/wrapper/gradle-wrapper.properties to see if distributionUrl now points to `-all`)
    distributionType = Wrapper.DistributionType.BIN
}

version = mod_version
group = mod_group_id

repositories {
    mavenLocal()

    exclusiveContent {
        forRepository {
            maven {
                name = "Modrinth"
                url = "https://api.modrinth.com/maven"
            }
        }
        filter {
            includeGroup "maven.modrinth"
        }
    }

    maven {
        url 'https://jitpack.io'
        content {
            includeGroup "com.github.TartaricAcid"
        }
    }

    maven {
        url "https://cursemaven.com"
        content {
            includeGroup "curse.maven"
        }
    }
}

base {
    archivesName = mod_id
}

// Mojang ships Java 21 to end users starting in 1.20.5, so mods should target Java 21.
java.toolchain.languageVersion = JavaLanguageVersion.of(21)

minecraft.accessTransformers.file rootProject.file('src/main/resources/META-INF/accesstransformer.cfg')
//minecraft.accessTransformers.entry public net.minecraft.client.Minecraft textureManager # textureManager

// Default run configurations.
// These can be tweaked, removed, or duplicated as needed.
runs {
    // applies to all the run configs below
    configureEach {
        // Recommended logging data for a userdev environment
        // The markers can be added/remove as needed separated by commas.
        // "SCAN": For mods scan.
        // "REGISTRIES": For firing of registry events.
        // "REGISTRYDUMP": For getting the contents of all registries.
        systemProperty 'forge.logging.markers', 'REGISTRIES'

        // Recommended logging level for the console
        // You can set various levels here.
        // Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels
        systemProperty 'forge.logging.console.level', 'debug'

        modSource project.sourceSets.main
    }

    client {
        // Comma-separated list of namespaces to load gametests from. Empty = all namespaces.
        systemProperty 'forge.enabledGameTestNamespaces', project.mod_id
    }

    server {
        systemProperty 'forge.enabledGameTestNamespaces', project.mod_id
        programArgument '--nogui'
    }

    // This run config launches GameTestServer and runs all registered gametests, then exits.
    // By default, the server will crash when no gametests are provided.
    // The gametest system is also enabled by default for other run configs under the /test command.
    gameTestServer {
        systemProperty 'forge.enabledGameTestNamespaces', project.mod_id
    }

    data {
        // example of overriding the workingDirectory set in configureEach above, uncomment if you want to use it
        // workingDirectory project.file('run-data')

        // Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources.
        programArguments.addAll '--mod', project.mod_id, '--all', '--output', file('src/generated/resources/').getAbsolutePath(), '--existing', file('src/main/resources/').getAbsolutePath()
    }
}

// Include resources generated by data generators.
sourceSets.main.resources { srcDir 'src/generated/resources' }

// Sets up a dependency configuration called 'localRuntime'.
// This configuration should be used instead of 'runtimeOnly' to declare
// a dependency that will be present for runtime testing but that is
// "optional", meaning it will not be pulled by dependents of this mod.
configurations {
    runtimeClasspath.extendsFrom localRuntime
}

dependencies {
    // Specify the version of Minecraft to use.
    // Depending on the plugin applied there are several options. We will assume you applied the userdev plugin as shown above.
    // The group for userdev is net.neoforged, the module name is neoforge, and the version is the same as the neoforge version.
    // You can however also use the vanilla plugin (net.neoforged.gradle.vanilla) to use a version of Minecraft without the neoforge loader.
    // And its provides the option to then use net.minecraft as the group, and one of; client, server or joined as the module name, plus the game version as version.
    // For all intends and purposes: You can treat this dependency as if it is a normal library you would use.
    implementation "net.neoforged:neoforge:${neo_version}"

    // Example optional mod dependency with JEI
    // The JEI API is declared for compile time use, while the full JEI artifact is used at runtime
    // compileOnly "mezz.jei:jei-${mc_version}-common-api:${jei_version}"
    // compileOnly "mezz.jei:jei-${mc_version}-neoforge-api:${jei_version}"
    // We add the full version to localRuntime, not runtimeOnly, so that we do not publish a dependency on it
    // localRuntime "mezz.jei:jei-${mc_version}-neoforge:${jei_version}"

    // Example mod dependency using a mod jar from ./libs with a flat dir repository
    // This maps to ./libs/coolmod-${mc_version}-${coolmod_version}.jar
    // The group id is ignored when searching -- in this case, it is "blank"
    // implementation "blank:coolmod-${mc_version}:${coolmod_version}"

    // Example mod dependency using a file as dependency
    // implementation files("libs/coolmod-${mc_version}-${coolmod_version}.jar")

    // Example project dependency using a sister or child project:
    // implementation project(":myproject")

    // For more info:
    // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html
    // http://www.gradle.org/docs/current/userguide/dependency_management.html54
    implementation "maven.modrinth:sodium:mc1.21.1-0.6.13-neoforge"
    implementation "maven.modrinth:iris:1.8.8+1.21.1-neoforge"
    implementation "maven.modrinth:jei:YAcQ6elZ"
    implementation "maven.modrinth:modern-ui:3.12.0.2"

    implementation "curse.maven:architectury-api-419699:5786327"
    implementation "curse.maven:ftb-teams-forge-404468:7369021"
    implementation "curse.maven:ftb-quests-forge-289412:7429016"
    implementation "curse.maven:certain-questing-additions-1372051:7450467"

    implementation "maven.modrinth:kotlin-for-forge:5.11.0"
    implementation "maven.modrinth:elytra-trims:3.9.3"

    implementation "maven.modrinth:entitytexturefeatures:7.0.13-neoforge-1.21"
    implementation "maven.modrinth:entity-model-features:3.0.17-neoforge-1.21"
    implementation "maven.modrinth:touhou-little-maid:1.5.0-neoforge+mc1.21.1"
    compileOnly "maven.modrinth:geckolib:QEqpUJ1G"
    implementation "maven.modrinth:immediatelyfast:1.6.8+1.21.1-neoforge"
    compileOnly "maven.modrinth:curios:9.5.1+1.21.1"
    implementation "curse.maven:ftb-library-forge-404465:7420412"
    compileOnly "org.projectlombok:lombok:1.18.38"

    annotationProcessor "org.projectlombok:lombok:1.18.38"
}

// This block of code expands all declared replace properties in the specified resource targets.
// A missing property will result in an error. Properties are expanded using ${} Groovy notation.
// When "copyIdeResources" is enabled, this will also run before the game launches in IDE environments.
// See https://docs.gradle.org/current/dsl/org.gradle.language.jvm.tasks.ProcessResources.html
tasks.withType(ProcessResources).configureEach {
    var replaceProperties = [
            minecraft_version      : minecraft_version,
            minecraft_version_range: minecraft_version_range,
            neo_version            : neo_version,
            neo_version_range      : neo_version_range,
            loader_version_range   : loader_version_range,
            mod_id                 : mod_id,
            mod_name               : mod_name,
            mod_license            : mod_license,
            mod_version            : mod_version,
            mod_authors            : mod_authors,
            mod_description        : mod_description
    ]
    inputs.properties replaceProperties

    filesMatching(['META-INF/neoforge.mods.toml']) {
        expand replaceProperties
    }
}

// Example configuration to allow publishing using the maven-publish plugin
publishing {
    publications {
        register('mavenJava', MavenPublication) {
            from components.java
        }
    }
    repositories {
        maven {
            url "file://${project.projectDir}/repo"
        }
    }
}

tasks.withType(JavaCompile).configureEach {
    options.encoding = 'UTF-8' // Use the UTF-8 charset for Java compilation
}

// IDEA no longer automatically downloads sources/javadoc jars for dependencies, so we need to explicitly enable the behavior.
idea {
    module {
        downloadSources = true
        downloadJavadoc = true
    }
}


================================================
FILE: changelogs/changelog-1.0.0.md
================================================
## 加速渲染 1.0.0-1.21.1 ALPHA
- 支持加速原版/类原版MOD生物渲染.
- 支持加速原版/类原版MOD方块实体渲染.
- 支持加速物品模型渲染 **(需要开启``核心配置 > 强制加速半透明``)**.
- 支持加速最新版车万女仆渲染.
- 支持加速GeckoLib模型生物/方块实体渲染.

## Accelerated Rendering 1.0.0-1.21.1 ALPHA
- Supports acceleration for rendering vanilla entities/vanilla-like modded entities.
- Supports acceleration for rendering vanilla block entities/vanilla-like modded block entities.
- Supports acceleration for rendering item models **(``Core Settings > Force Translucent Acceleration`` is required to be enabled)**.
- Supports acceleration for rendering maids in latest version of Touhou Little Maid.
- Supports acceleration for rendering GeckoLib entities/block entities.

================================================
FILE: changelogs/changelog-1.0.1.md
================================================
## 加速渲染 1.0.1-1.21.1 ALPHA
- 添加了``核心配置 > 用立即上传模型``选项以保证绘制顺序, 提供更好的兼容性.
- 添加了``Curios兼容性配置``以控制Curios饰品/装备的渲染加速.
- 添加了``过滤器设置``以阻止部分在渲染加速后会导致需渲染异常的生物/方块实体被加速, 提供更好的兼容性.
- 修复了在与Iris环境下将``视频设置... > 图像品质``设置为 ``极佳!``导致的渲染异常.

## Accelerated Rendering 1.0.1-1.21.1 ALPHA
- Adds ``Core Settings > Enable Uploading Mesh Immediately`` to ensure the draw order for better compatibility.
- Adds ``Curios Compatibility Settings`` to control the acceleration of curios accessories/equipments.
- Adds ``Filter Settings`` to filter entities/block entities that will cause glitches when accelerated.
- Fixes rendering glitches when set ``Video Settings... > Graphics`` to ``Fabulous!`` with Iris installed.

================================================
FILE: changelogs/changelog-1.0.2.md
================================================
## 加速渲染 1.0.2-1.21.1 ALPHA
- 添加了新的Shader Overrides API功能, 以实现更好MOD兼容性.
- 添加了新的Batching Layer API功能, 以实现更好的MOD兼容性.
- 添加了``ModelBlockRenderer#renderModel``的渲染加速以支持展示实体渲染加速.
- 添加了``加速物品渲染配置 > 启用手中物品加速``选项以支持加速在手中物品的渲染加速.
- 添加了``加速物品渲染配置 > 启用GUI物品加速``选项以支持加速在GUI中物品的渲染加速.
- 添加了``加速物品渲染配置 > 启用GUI物品合批``选项以支持合并GUI中物品的绘制, 更好的支持在GUI中物品的渲染加速.
- 添加了``核心配置 > 合批层储存类型``选项以控制是否将半透明和不透明模型合并渲染
- 添加了``过滤器设置 > 启用物品过滤器``选项以阻止部分在渲染加速后会导致需渲染异常的物品被加速, 提供更好的兼容性.
- 修复了在Iris环境下开启部分光影包时半透明模型与不透明模型合并渲染导致的半透明模型渲染异常
- 修复了在ImmediatelyFast环境下渲染HUD时导致的渲染异常.
- 修复了在机械动力环境下实体与机械动力方块/结构一同出现时导致的渲染异常.

## Accelerated Rendering 1.0.2-1.21.1 ALPHA
- Adds Shader Overrides API to achieve better MODs compatibility.
- Adds Batching Layer API to achieve better MODs compatibility.
- Adds ``ModelBlockRenderer#renderModel`` acceleration support to accelerate rendering of display entities.
- Adds ``Accelerated Item Rendering Settings > Enable Hand Acceleration`` to support the acceleration of items rendering in hands.
- Adds ``Accelerated Item Rendering Settings > Enable GUI Acceleration`` to support the acceleration of items rendering in GUI.
- Adds ``Accelerated Item Rendering Settings > Enable GUI Item Batching`` to support batching draw calls of items in GUI to ensure better acceleration of item rendering in GUI.
- Adds ``Core Settings > Batching Layer Storage Type`` to control if the pipeline should combine the rendering of opaque and translucent geometries together.
- Adds ``Filter Settings > Enable Item Filter`` to filter items that will cause glitches when accelerated.
- Fixes visual glitches on translucent geometries with specific shader pack due to combined rendering of opaque and translucent geometries when Iris is installed.
- Fixes visual glitches on HUD rendering when ImmediatelyFast is installed.
- Fixes visual glitches when entities and flywheel accelerated geometries rendering on screen at the same time when Create is installed.

================================================
FILE: changelogs/changelog-1.0.3.md
================================================
## 加速渲染 1.0.3-1.21.1 ALPHA
- 修复了物品装饰 (如通用机械的等级标识) 加速没有正确还原帧缓冲状态导致的渲染异常.
- 修复了四顶点同UV的面在静态剔除中被错误剔除导致的渲染异常.

## Accelerated Rendering 1.0.3-1.21.1 ALPHA
- Fixes visual glitches caused by item decoration (like tier in Mekanism) acceleration not restoring FBO state correctly.
- Fixes visual glitches caused by static culler exceptionally culled quads with same UV on both four vertices.

================================================
FILE: changelogs/changelog-1.0.4.md
================================================
## 加速渲染 1.0.4-1.21.1 ALPHA
- 修复了与使用块缓冲的MOD和光影的兼容性.
- 移植到1.20.1 Forge.

## 注意事项
- 1.20.1移植需要使用**Java 21**进行启动.
- 1.20.1移植的游戏内配置节目需要安装Configured以启用.
- 1.20.1移植的GeckoLib加速需要安装MixinBooster以启用.
- 1.20.1移植的车万女仆加速需要安装MixinBooster以启用.

## Accelerated Rendering 1.0.4-1.21.1 ALPHA
- Fixes compatibility with mods and shaders that uses block buffers.
- Ports to 1.20.1 Forge.

## Important Notes
- 1.20.1 port requires **Java 21** to boot.
- 1.20.1 port requires Configured to modify configurations in game.
- 1.20.1 port of GeckoLib acceleration requires MixinBooster to enable.
- 1.20.1 port of TouhouLittleMaid acceleration requires MixinBooster to enable.

================================================
FILE: changelogs/changelog-1.0.5.1.md
================================================
## 加速渲染 1.0.5.1-1.21.1 ALPHA
- 修复了在模型面没有自定义颜色的情况下获取颜色导致崩溃.

## Accelerated Rendering 1.0.5.1-1.21.1 ALPHA
- Fixes crashes by requesting colors from BakedQuad when the quad is not tinted.

================================================
FILE: changelogs/changelog-1.0.5.md
================================================
## 加速渲染 1.0.5-1.21.1 ALPHA
- 修复了方块模型加速时从错误的位置获取RenderType导致崩溃.

## Accelerated Rendering 1.0.5-1.21.1 ALPHA
- Fixes crashes by requesting RenderType from wrong place when accelerating block models.

================================================
FILE: changelogs/changelog-1.0.6.md
================================================
## 加速渲染 1.0.6-1.21.1 ALPHA
- 添加了``核心配置 > 启用缓存动态RenderType``选项以支持对动态渲染类型的加速.
- 添加了``核心配置 > 模型合并类型``选项以支持对完全一致模型的合并以改善显存占用.
- 改善了过滤器的灵活性, 现在可以在过滤器列表中使用正则表达式.
- 修复了GUI物品合批时没有正确还原帧缓冲状态导致的渲染异常.
- 修复了自定义渲染阶段被错误加速导致的渲染异常.
- 修复了物品附魔光效无法正确渲染导致的渲染异常.
- 修复了可能的部分特殊物品渲染导致的内存泄漏问题.

## Accelerated Rendering 1.0.6-1.21.1 ALPHA
- Adds ``Core Settings > Enable Cache Dynamic Render Type`` to support the acceleration of dynamic render types.
- Adds ``Core Settings > Mesh Merge Type`` to support reducing VRAM usage by merging duplicated meshes together.
- Improves filter flexibility. Regular Expression can now be used in filter values.
- Fixes visual glitches on container GUI rendering due to not correctly restoring framebuffer state.
- Fixes visual glitches on geometries rendered in custom rendering stages due to incorrect acceleration.
- Fixes visual glitches on item glints.
- Fixes memory leaks due to acceleration on certain special items.

================================================
FILE: changelogs/changelog-1.0.7.md
================================================
## 加速渲染 1.0.7-1.21.1 ALPHA
- 添加了``过滤器配置 > 启用容器GUI过滤器``选项以阻止部分在渲染加速后会导致需渲染异常的容器GUI被加速, 提供更好的兼容性.
- 修复了玩家在物品栏GUI中以错误光照渲染导致的渲染异常.
- 修复了超出标准范围UV的面在静态剔除中被错误剔除导致的渲染异常.

## Accelerated Rendering 1.0.7-1.21.1 ALPHA
- Adds ``Filter Settings > Enable Menu Filter`` to filter menus that will cause glitches when accelerated.
- Fixes visual glitches on players rendered with wrong light direction in inventory GUI.
- Fixes visual glitches on static culler exceptionally culled geometries with UV outside regular range.

================================================
FILE: changelogs/changelog-1.0.8.md
================================================
## 加速渲染 1.0.8-1.21.1 ALPHA
- 添加了``核心配置 > 裁切区域还原类型``选项以提供对修改了容器GUI渲染的MOD更好的兼容性.
- 添加了``加速物品渲染配置 > 启用合并GUI物品批次``选项以以提供对修改了容器GUI渲染的MOD更好的兼容性.
- 添加了对FTB Library的GUI物品合批加速支持.
- 修复了在``earlyWindowControl``不可用的情况下的导致的崩溃.
- 修复了因为Minecraft因为其他错误没有正确启动导致的无关加速渲染的崩溃.
- 修复了带状态的EMF模型在运行中修改状态导致的渲染异常.
- 修复了OpenGL内存屏障被错误使用导致的潜在渲染异常.
- 阻止MOD添加的自定义HUD进行加速, 防止过度调用着色器导致性能下降.

## Accelerated Rendering 1.0.8-1.21.1 ALPHA
- Adds ``Core Settings > Scissor Restoring Type`` to provide better compatibility with modified container GUI.
- Adds ``Accelerated Item Rendering Settings > Enable Merge GUI Item Batches`` to provide better compatibility with modified container GUI.
- Adds GUI item batching acceleration support to FTB Library.
- Fixes crashes when ``earlyWindowControl`` is not available.
- Fixes irrelevant crashes when Minecraft is crashed by other MODs when starting up.
- Fixes visual glitches when EMF models with states modifying its state at runtime.
- Fixes potential visual glitches due to incorrect OpenGL memory barrier usages.
- Prevent custom HUDs by MODs from being accelerated to reduce shader overhead.

================================================
FILE: gradle/wrapper/gradle-wrapper.properties
================================================
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists


================================================
FILE: gradle.properties
================================================
# Sets default memory used for gradle commands. Can be overridden by user or command line properties.
org.gradle.jvmargs=-Xmx1G
org.gradle.daemon=false
org.gradle.debug=false

#read more on this at https://github.com/neoforged/NeoGradle/blob/NG_7.0/README.md#apply-parchment-mappings
# you can also find the latest versions at: https://parchmentmc.org/docs/getting-started
neogradle.subsystems.parchment.minecraftVersion=1.21.1
neogradle.subsystems.parchment.mappingsVersion=2024.11.17
# Environment Properties
# You can find the latest versions here: https://projects.neoforged.net/neoforged/neoforge
# The Minecraft version must agree with the Neo version to get a valid artifact
minecraft_version=1.21.1
# The Minecraft version range can use any release version of Minecraft as bounds.
# Snapshots, pre-releases, and release candidates are not guaranteed to sort properly
# as they do not follow standard versioning conventions.
minecraft_version_range=[1.21,1.21.2)
# The Neo version must agree with the Minecraft version to get a valid artifact
neo_version=21.1.192
# The Neo version range can use any version of Neo as bounds
neo_version_range=[21.0.0,)
# The loader version range can only use the major version of FML as bounds
loader_version_range=[4,)

## Mod Properties

# The unique mod identifier for the mod. Must be lowercase in English locale. Must fit the regex [a-z][a-z0-9_]{1,63}
# Must match the String constant located in the main mod class annotated with @Mod.
mod_id=acceleratedrendering
# The human-readable display name for the mod.
mod_name=Accelerated Rendering
# The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default.
mod_license=MIT
# The mod version. See https://semver.org/
mod_version=1.0.8-1.21.1-alpha
# The group ID for the mod. It is only important when publishing as an artifact to a Maven repository.
# This should match the base package used for the mod sources.
# See https://maven.apache.org/guides/mini/guide-naming-conventions.html
mod_group_id=com.github.argon4w
# The authors of the mod. This is a simple text string that is used for display purposes in the mod list.
mod_authors=Argon4W
# The description of the mod. This is a simple multiline text string that is used for display purposes in the mod list.
mod_description=Fast vertex transform and caching using compute shader.


================================================
FILE: gradlew
================================================
#!/bin/sh

#
# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
#

##############################################################################
#
#   Gradle start up script for POSIX generated by Gradle.
#
#   Important for running:
#
#   (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
#       noncompliant, but you have some other compliant shell such as ksh or
#       bash, then to run this script, type that shell name before the whole
#       command line, like:
#
#           ksh Gradle
#
#       Busybox and similar reduced shells will NOT work, because this script
#       requires all of these POSIX shell features:
#         * functions;
#         * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
#           «${var#prefix}», «${var%suffix}», and «$( cmd )»;
#         * compound commands having a testable exit status, especially «case»;
#         * various built-in commands including «command», «set», and «ulimit».
#
#   Important for patching:
#
#   (2) This script targets any POSIX shell, so it avoids extensions provided
#       by Bash, Ksh, etc; in particular arrays are avoided.
#
#       The "traditional" practice of packing multiple parameters into a
#       space-separated string is a well documented source of bugs and security
#       problems, so this is (mostly) avoided, by progressively accumulating
#       options in "$@", and eventually passing that to Java.
#
#       Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
#       and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
#       see the in-line comments for details.
#
#       There are tweaks for specific operating systems such as AIX, CygWin,
#       Darwin, MinGW, and NonStop.
#
#   (3) This script is generated from the Groovy template
#       https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
#       within the Gradle project.
#
#       You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################

# Attempt to set APP_HOME

# Resolve links: $0 may be a link
app_path=$0

# Need this for daisy-chained symlinks.
while
    APP_HOME=${app_path%"${app_path##*/}"}  # leaves a trailing /; empty if no leading path
    [ -h "$app_path" ]
do
    ls=$( ls -ld "$app_path" )
    link=${ls#*' -> '}
    case $link in             #(
      /*)   app_path=$link ;; #(
      *)    app_path=$APP_HOME$link ;;
    esac
done

# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
' "$PWD" ) || exit

# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum

warn () {
    echo "$*"
} >&2

die () {
    echo
    echo "$*"
    echo
    exit 1
} >&2

# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "$( uname )" in                #(
  CYGWIN* )         cygwin=true  ;; #(
  Darwin* )         darwin=true  ;; #(
  MSYS* | MINGW* )  msys=true    ;; #(
  NONSTOP* )        nonstop=true ;;
esac

CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar


# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
        # IBM's JDK on AIX uses strange locations for the executables
        JAVACMD=$JAVA_HOME/jre/sh/java
    else
        JAVACMD=$JAVA_HOME/bin/java
    fi
    if [ ! -x "$JAVACMD" ] ; then
        die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
    fi
else
    JAVACMD=java
    if ! command -v java >/dev/null 2>&1
    then
        die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.

Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
    fi
fi

# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
    case $MAX_FD in #(
      max*)
        # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
        # shellcheck disable=SC2039,SC3045
        MAX_FD=$( ulimit -H -n ) ||
            warn "Could not query maximum file descriptor limit"
    esac
    case $MAX_FD in  #(
      '' | soft) :;; #(
      *)
        # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
        # shellcheck disable=SC2039,SC3045
        ulimit -n "$MAX_FD" ||
            warn "Could not set maximum file descriptor limit to $MAX_FD"
    esac
fi

# Collect all arguments for the java command, stacking in reverse order:
#   * args from the command line
#   * the main class name
#   * -classpath
#   * -D...appname settings
#   * --module-path (only if needed)
#   * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.

# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
    APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
    CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )

    JAVACMD=$( cygpath --unix "$JAVACMD" )

    # Now convert the arguments - kludge to limit ourselves to /bin/sh
    for arg do
        if
            case $arg in                                #(
              -*)   false ;;                            # don't mess with options #(
              /?*)  t=${arg#/} t=/${t%%/*}              # looks like a POSIX filepath
                    [ -e "$t" ] ;;                      #(
              *)    false ;;
            esac
        then
            arg=$( cygpath --path --ignore --mixed "$arg" )
        fi
        # Roll the args list around exactly as many times as the number of
        # args, so each arg winds up back in the position where it started, but
        # possibly modified.
        #
        # NB: a `for` loop captures its iteration list before it begins, so
        # changing the positional parameters here affects neither the number of
        # iterations, nor the values presented in `arg`.
        shift                   # remove old arg
        set -- "$@" "$arg"      # push replacement arg
    done
fi


# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'

# Collect all arguments for the java command:
#   * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
#     and any embedded shellness will be escaped.
#   * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
#     treated as '${Hostname}' itself on the command line.

set -- \
        "-Dorg.gradle.appname=$APP_BASE_NAME" \
        -classpath "$CLASSPATH" \
        org.gradle.wrapper.GradleWrapperMain \
        "$@"

# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
    die "xargs is not available"
fi

# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
#   readarray ARGS < <( xargs -n1 <<<"$var" ) &&
#   set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#

eval "set -- $(
        printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
        xargs -n1 |
        sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
        tr '\n' ' '
    )" '"$@"'

exec "$JAVACMD" "$@"


================================================
FILE: gradlew.bat
================================================
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem      https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@rem SPDX-License-Identifier: Apache-2.0
@rem

@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem  Gradle startup script for Windows
@rem
@rem ##########################################################################

@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal

set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%

@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi

@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"

@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome

set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute

echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2

goto fail

:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe

if exist "%JAVA_EXE%" goto execute

echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2

goto fail

:execute
@rem Setup the command line

set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar


@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*

:end
@rem End local scope for the variables with windows NT shell
if %ERRORLEVEL% equ 0 goto mainEnd

:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%

:mainEnd
if "%OS%"=="Windows_NT" endlocal

:omega


================================================
FILE: settings.gradle
================================================
pluginManagement {
    repositories {
        gradlePluginPortal()
        maven { url = 'https://maven.neoforged.net/releases' }
    }
}

plugins {
    id 'org.gradle.toolchains.foojay-resolver-convention' version '0.9.0'
}

================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/AcceleratedRenderingModEntry.java
================================================
package com.github.argon4w.acceleratedrendering;

import com.github.argon4w.acceleratedrendering.configs.FeatureConfig;
import com.mojang.logging.LogUtils;
import net.neoforged.api.distmarker.Dist;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.fml.ModContainer;
import net.neoforged.fml.common.Mod;
import net.neoforged.fml.config.ModConfig;
import net.neoforged.neoforge.client.gui.ConfigurationScreen;
import net.neoforged.neoforge.client.gui.IConfigScreenFactory;
import org.slf4j.Logger;

@Mod(
		value	= AcceleratedRenderingModEntry	.MOD_ID,
		dist	= Dist							.CLIENT
)
public class AcceleratedRenderingModEntry {

	public static final String MOD_ID = "acceleratedrendering";
	public static final Logger LOGGER = LogUtils.getLogger();

	public AcceleratedRenderingModEntry(IEventBus modEventBus, ModContainer modContainer) {
		modContainer.registerConfig			(ModConfig.Type.CLIENT,			FeatureConfig.SPEC);
		modContainer.registerExtensionPoint	(IConfigScreenFactory.class,	ConfigurationScreen::new);
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/AbstractCompatMixinPlugin.java
================================================
package com.github.argon4w.acceleratedrendering.compat;

import net.neoforged.fml.loading.LoadingModList;
import org.objectweb.asm.tree.ClassNode;
import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin;
import org.spongepowered.asm.mixin.extensibility.IMixinInfo;

import java.util.List;
import java.util.Set;

public abstract class AbstractCompatMixinPlugin implements IMixinConfigPlugin {

	private final boolean shouldApply;

	public AbstractCompatMixinPlugin() {
		var shouldApply	= false;

		for (var id : getModIDs()) {
			if (LoadingModList.get().getModFileById(id) != null) {
				shouldApply = true;
			}
		}

		this.shouldApply = shouldApply;
	}

	protected abstract List<String> getModIDs();

	@Override
	public boolean shouldApplyMixin(String targetClassName, String mixinClassName) {
		return shouldApply;
	}

	@Override
	public String getRefMapperConfig() {
		return null;
	}

	@Override
	public List<String> getMixins() {
		return null;
	}

	@Override
	public void onLoad(String mixinPackage) {

	}

	@Override
	public void acceptTargets(Set<String> myTargets, Set<String> otherTargets) {

	}

	@Override
	public void preApply(
			String		targetClassName,
			ClassNode	targetClass,
			String		mixinClassName,
			IMixinInfo	mixinInfo
	) {

	}

	@Override
	public void postApply(
			String		targetClassName,
			ClassNode	targetClass,
			String		mixinClassName,
			IMixinInfo	mixinInfo
	) {

	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/curios/CuriosCompatFeature.java
================================================
package com.github.argon4w.acceleratedrendering.compat.curios;

import com.github.argon4w.acceleratedrendering.configs.FeatureConfig;
import com.github.argon4w.acceleratedrendering.configs.FeatureStatus;
import com.github.argon4w.acceleratedrendering.core.utils.RegistryFilter;
import com.github.argon4w.acceleratedrendering.features.filter.FilterType;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;

import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Set;

public class CuriosCompatFeature {

	public	static final Deque	<FeatureStatus> LAYER_ACCELERATION_CONTROLLER_STACK	= new ArrayDeque<>();
	public	static final Deque	<FeatureStatus> CURIOS_ITEM_FILTER_CONTROLLER_STACK	= new ArrayDeque<>();
	private	static final Set	<Item>			CURIOS_ITEM_FILTER_VALUES;

	static {
		CURIOS_ITEM_FILTER_VALUES = RegistryFilter.filterValues(BuiltInRegistries.ITEM, FeatureConfig.CONFIG.curiosItemFilterValues.get());
	}

	public static boolean isEnabled() {
		return FeatureConfig.CONFIG.curiosCompatFeatureStatus.get() == FeatureStatus.ENABLED;
	}

	public static boolean testCuriosItem(ItemStack itemStack) {
		return getCuriosItemFilterType().test(CURIOS_ITEM_FILTER_VALUES, itemStack.getItem());
	}

	public static boolean shouldAccelerateCurios() {
		return getLayerAccelerationSetting() == FeatureStatus.ENABLED;
	}

	public static boolean shouldFilterCuriosItems() {
		return getCuriosItemFilterSetting() == FeatureStatus.ENABLED;
	}

	public static FilterType getCuriosItemFilterType() {
		return FeatureConfig.CONFIG.curiosItemFilterType.get();
	}

	public static void disableLayerAcceleration() {
		LAYER_ACCELERATION_CONTROLLER_STACK.push(FeatureStatus.DISABLED);
	}

	public static void disableCuriosItemFilter() {
		CURIOS_ITEM_FILTER_CONTROLLER_STACK.push(FeatureStatus.DISABLED);
	}

	public static void forceEnableLayerAcceleration() {
		LAYER_ACCELERATION_CONTROLLER_STACK.push(FeatureStatus.ENABLED);
	}

	public static void forceEnableCuriosItemFilter() {
		CURIOS_ITEM_FILTER_CONTROLLER_STACK.push(FeatureStatus.ENABLED);
	}

	public static void forceSetLayerAcceleration(FeatureStatus status) {
		LAYER_ACCELERATION_CONTROLLER_STACK.push(status);
	}

	public static void forceSetCuriosItemFilter(FeatureStatus status) {
		CURIOS_ITEM_FILTER_CONTROLLER_STACK.push(status);
	}

	public static void resetLayerAcceleration() {
		LAYER_ACCELERATION_CONTROLLER_STACK.pop();
	}

	public static void resetCuriosItemFilter() {
		CURIOS_ITEM_FILTER_CONTROLLER_STACK.pop();
	}

	public static FeatureStatus getLayerAccelerationSetting() {
		return LAYER_ACCELERATION_CONTROLLER_STACK.isEmpty() ? getDefaultLayerAccelerationSettings() : LAYER_ACCELERATION_CONTROLLER_STACK.peek();
	}

	public static FeatureStatus getCuriosItemFilterSetting() {
		return CURIOS_ITEM_FILTER_CONTROLLER_STACK.isEmpty() ? getDefaultCuriosItemFilterSetting() : CURIOS_ITEM_FILTER_CONTROLLER_STACK.peek();
	}

	public static FeatureStatus getDefaultLayerAccelerationSettings() {
		return FeatureConfig.CONFIG.curiosCompatLayerAcceleration.get();
	}

	public static FeatureStatus getDefaultCuriosItemFilterSetting() {
		return FeatureConfig.CONFIG.curiosItemFilter.get();
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/curios/mixins/CuriosLayerMixin.java
================================================
package com.github.argon4w.acceleratedrendering.compat.curios.mixins;

import com.github.argon4w.acceleratedrendering.compat.curios.CuriosCompatFeature;
import com.github.argon4w.acceleratedrendering.features.entities.AcceleratedEntityRenderingFeature;
import com.github.argon4w.acceleratedrendering.features.filter.FilterFeature;
import com.github.argon4w.acceleratedrendering.features.items.AcceleratedItemRenderingFeature;
import com.github.argon4w.acceleratedrendering.features.text.AcceleratedTextRenderingFeature;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import com.mojang.blaze3d.vertex.PoseStack;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.entity.RenderLayerParent;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.item.ItemStack;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Pseudo;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import top.theillusivec4.curios.api.SlotContext;
import top.theillusivec4.curios.api.client.ICurioRenderer;
import top.theillusivec4.curios.client.render.CuriosLayer;

@Pseudo
@Mixin(CuriosLayer.class)
public class CuriosLayerMixin {

	@Inject(
			method	= "render(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;ILnet/minecraft/world/entity/LivingEntity;FFFFFF)V",
			at		= @At("HEAD")
	)
	public void startRenderCuriosLayer(
			PoseStack			matrixStack,
			MultiBufferSource	renderTypeBuffer,
			int					light,
			LivingEntity		livingEntity,
			float				limbSwing,
			float				limbSwingAmount,
			float				partialTicks,
			float				ageInTicks,
			float				netHeadYaw,
			float				headPitch,
			CallbackInfo		ci
	) {
		if (			CuriosCompatFeature.isEnabled				()
				&&	!	CuriosCompatFeature.shouldAccelerateCurios	()
		) {
			AcceleratedEntityRenderingFeature	.useVanillaPipeline();
			AcceleratedItemRenderingFeature		.useVanillaPipeline();
			AcceleratedTextRenderingFeature		.useVanillaPipeline();
		}
	}

	@Inject(
			method	= "render(Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource;ILnet/minecraft/world/entity/LivingEntity;FFFFFF)V",
			at		= @At("RETURN")
	)
	public void stopRenderCuriosLayer(
			PoseStack			matrixStack,
			MultiBufferSource	renderTypeBuffer,
			int					light,
			LivingEntity		livingEntity,
			float				limbSwing,
			float				limbSwingAmount,
			float				partialTicks,
			float				ageInTicks,
			float				netHeadYaw,
			float				headPitch,
			CallbackInfo		ci
	) {
		if (			CuriosCompatFeature.isEnabled				()
				&&	!	CuriosCompatFeature.shouldAccelerateCurios	()
		) {
			AcceleratedEntityRenderingFeature	.resetPipeline();
			AcceleratedItemRenderingFeature		.resetPipeline();
			AcceleratedTextRenderingFeature		.resetPipeline();
		}
	}

	@WrapOperation(
			method	= "lambda$render$0",
			at		= @At(
					value	= "INVOKE",
					target	= "Ltop/theillusivec4/curios/api/client/ICurioRenderer;render(Lnet/minecraft/world/item/ItemStack;Ltop/theillusivec4/curios/api/SlotContext;Lcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/entity/RenderLayerParent;Lnet/minecraft/client/renderer/MultiBufferSource;IFFFFFF)V"
			)
	)
	public void filterCuriosItem(
			ICurioRenderer			instance,
			ItemStack				itemStack,
			SlotContext				slotContext,
			PoseStack				poseStack,
			RenderLayerParent<?, ?>	renderLayerParent,
			MultiBufferSource		bufferSource,
			int						light,
			float					limbSwing,
			float					limbSwingAmount,
			float					partialTicks,
			float					ageInTicks,
			float					netHeadYaw,
			float					headPitch,
			Operation<Void>			original
	) {
		var pass =	!	FilterFeature		.isEnabled				()
				||	!	CuriosCompatFeature	.isEnabled				()
				||	!	CuriosCompatFeature	.shouldFilterCuriosItems()
				||		CuriosCompatFeature	.testCuriosItem			(itemStack);

		if (!pass) {
			AcceleratedEntityRenderingFeature	.useVanillaPipeline();
			AcceleratedItemRenderingFeature		.useVanillaPipeline();
			AcceleratedTextRenderingFeature		.useVanillaPipeline();
		}

		original.call(
				instance,
				itemStack,
				slotContext,
				poseStack,
				renderLayerParent,
				bufferSource,
				light,
				limbSwing,
				limbSwingAmount,
				partialTicks,
				ageInTicks,
				netHeadYaw,
				headPitch
		);

		if (!pass) {
			AcceleratedEntityRenderingFeature	.resetPipeline();
			AcceleratedItemRenderingFeature		.resetPipeline();
			AcceleratedTextRenderingFeature		.resetPipeline();
		}
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/immediatelyfast/mixins/BatchableBufferSourceMixin.java
================================================
package com.github.argon4w.acceleratedrendering.compat.immediatelyfast.mixins;

import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.builders.IAcceleratableBufferSource;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.builders.VertexConsumerExtension;
import com.llamalad7.mixinextras.injector.ModifyReturnValue;
import com.mojang.blaze3d.vertex.VertexConsumer;
import lombok.experimental.ExtensionMethod;
import net.minecraft.client.renderer.RenderType;
import net.raphimc.immediatelyfast.feature.core.BatchableBufferSource;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Pseudo;
import org.spongepowered.asm.mixin.injection.At;

@Pseudo
@ExtensionMethod(VertexConsumerExtension.class)
@Mixin			(BatchableBufferSource	.class)
public abstract class BatchableBufferSourceMixin implements IAcceleratableBufferSource {

	@ModifyReturnValue(
			method	= "getBuffer",
			at		= @At("RETURN")
	)
	public VertexConsumer initAcceleration(VertexConsumer original, RenderType renderType) {
		return original
				.getHolder			()
				.initAcceleration	(renderType, getBoundAcceleratedBufferSource());
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/immediatelyfast/mixins/BatchingBuffersMixin.java
================================================
package com.github.argon4w.acceleratedrendering.compat.immediatelyfast.mixins;

import com.github.argon4w.acceleratedrendering.core.CoreBuffersProvider;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.builders.BufferSourceExtension;
import com.llamalad7.mixinextras.injector.ModifyReturnValue;
import lombok.experimental.ExtensionMethod;
import net.minecraft.client.renderer.MultiBufferSource;
import net.raphimc.immediatelyfast.feature.batching.BatchingBuffers;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Pseudo;
import org.spongepowered.asm.mixin.injection.At;

@Pseudo
@ExtensionMethod(BufferSourceExtension	.class)
@Mixin			(BatchingBuffers		.class)
public class BatchingBuffersMixin {

	@ModifyReturnValue(
			method	= "getNonBatchingEntityVertexConsumers",
			at		= @At("RETURN")
	)
	private static MultiBufferSource.BufferSource bindAcceleratableBufferSourceCore1(MultiBufferSource.BufferSource original) {
		original
				.getAcceleratable			()
				.bindAcceleratedBufferSource(CoreBuffersProvider.CORE);

		return original;
	}

	@ModifyReturnValue(
			method	= "getHudBatchingVertexConsumers",
			at		= @At("RETURN")
	)
	private static MultiBufferSource.BufferSource bindAcceleratableBufferSourceCore2(MultiBufferSource.BufferSource original) {
		original
				.getAcceleratable			()
				.bindAcceleratedBufferSource(CoreBuffersProvider.CORE);

		return original;
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/immediatelyfast/mixins/WrappedRenderLayerMixin.java
================================================
package com.github.argon4w.acceleratedrendering.compat.immediatelyfast.mixins;

import lombok.EqualsAndHashCode;
import net.minecraft.client.renderer.RenderType;
import net.raphimc.immediatelyfast.feature.batching.BatchingBuffers;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Pseudo;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Pseudo
@EqualsAndHashCode
@Mixin(BatchingBuffers.WrappedRenderLayer.class)
public class WrappedRenderLayerMixin {

	@Unique private RenderType original;

	@Inject(
			method	= "<init>",
			at		= @At("TAIL")
	)
	public void saveOriginal(
			RenderType		renderLayer,
			Runnable		additionalStartAction,
			Runnable		additionalEndAction,
			CallbackInfo	ci
	) {
		this.original = renderLayer;
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/IrisCompatBuffers.java
================================================
package com.github.argon4w.acceleratedrendering.compat.iris;

import com.github.argon4w.acceleratedrendering.core.buffers.AcceleratedBufferSources;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.AcceleratedBufferSource;
import com.github.argon4w.acceleratedrendering.core.buffers.environments.IBufferEnvironment;
import com.mojang.blaze3d.vertex.VertexFormat;

public class IrisCompatBuffers {

	public static final AcceleratedBufferSource BLOCK_SHADOW				= new AcceleratedBufferSource(IBufferEnvironment.Presets.BLOCK);
	public static final AcceleratedBufferSource ENTITY_SHADOW				= new AcceleratedBufferSource(IBufferEnvironment.Presets.ENTITY);
	public static final AcceleratedBufferSource GLYPH_SHADOW				= new AcceleratedBufferSource(IBufferEnvironment.Presets.POS_COLOR_TEX_LIGHT);
	public static final AcceleratedBufferSource POS_TEX_SHADOW				= new AcceleratedBufferSource(IBufferEnvironment.Presets.POS_TEX);
	public static final AcceleratedBufferSource POS_TEX_COLOR_SHADOW		= new AcceleratedBufferSource(IBufferEnvironment.Presets.POS_TEX_COLOR);

	public static final AcceleratedBufferSource BLOCK_HAND					= new AcceleratedBufferSource(IBufferEnvironment.Presets.BLOCK);
	public static final AcceleratedBufferSource ENTITY_HAND					= new AcceleratedBufferSource(IBufferEnvironment.Presets.ENTITY);
	public static final AcceleratedBufferSource	POS_HAND					= new AcceleratedBufferSource(IBufferEnvironment.Presets.POS);
	public static final AcceleratedBufferSource	POS_COLOR_HAND				= new AcceleratedBufferSource(IBufferEnvironment.Presets.POS_COLOR);
	public static final AcceleratedBufferSource POS_TEX_HAND				= new AcceleratedBufferSource(IBufferEnvironment.Presets.POS_TEX);
	public static final AcceleratedBufferSource POS_TEX_COLOR_HAND			= new AcceleratedBufferSource(IBufferEnvironment.Presets.POS_TEX_COLOR);
	public static final AcceleratedBufferSource POS_COLOR_TEX_LIGHT_HAND	= new AcceleratedBufferSource(IBufferEnvironment.Presets.POS_COLOR_TEX_LIGHT);

	public static final AcceleratedBufferSources HAND = AcceleratedBufferSources
			.builder()
			.source	(IrisCompatBuffers	.BLOCK_HAND)
			.source	(IrisCompatBuffers	.ENTITY_HAND)
			.source	(IrisCompatBuffers	.POS_HAND)
			.source	(IrisCompatBuffers	.POS_COLOR_HAND)
			.source	(IrisCompatBuffers	.POS_TEX_HAND)
			.source	(IrisCompatBuffers	.POS_TEX_COLOR_HAND)
			.source	(IrisCompatBuffers	.POS_COLOR_TEX_LIGHT_HAND)
			.mode	(VertexFormat.Mode	.QUADS)
			.mode	(VertexFormat.Mode	.TRIANGLES)
			.build	();

	public static final AcceleratedBufferSources SHADOW = AcceleratedBufferSources
			.builder()
			.source	(IrisCompatBuffers.BLOCK_SHADOW)
			.source	(IrisCompatBuffers.ENTITY_SHADOW)
			.source	(IrisCompatBuffers.GLYPH_SHADOW)
			.source	(IrisCompatBuffers.POS_TEX_SHADOW)
			.source	(IrisCompatBuffers.POS_TEX_COLOR_SHADOW)
			.mode	(VertexFormat.Mode.QUADS)
			.mode	(VertexFormat.Mode.TRIANGLES)
			.build	();
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/IrisCompatBuffersProvider.java
================================================
package com.github.argon4w.acceleratedrendering.compat.iris;

import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.IAcceleratedBufferSource;

import java.util.function.Supplier;

public class IrisCompatBuffersProvider {

	public static final Supplier<IAcceleratedBufferSource> SHADOW	= () -> IrisCompatBuffers.SHADOW;
	public static final Supplier<IAcceleratedBufferSource> HAND		= () -> IrisCompatBuffers.HAND;
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/IrisCompatFeature.java
================================================
package com.github.argon4w.acceleratedrendering.compat.iris;

import com.github.argon4w.acceleratedrendering.configs.FeatureConfig;
import com.github.argon4w.acceleratedrendering.configs.FeatureStatus;

import java.util.ArrayDeque;
import java.util.Deque;

public class IrisCompatFeature {

	public static final Deque<FeatureStatus> SHADOW_CULLING_CONTROLLER_STACK		= new ArrayDeque<>();
	public static final Deque<FeatureStatus> POLYGON_PROCESSING_CONTROLLER_STACK	= new ArrayDeque<>();

	public static boolean isEnabled() {
		return FeatureConfig.CONFIG.irisCompatFeatureStatus.get() == FeatureStatus.ENABLED;
	}

	public static boolean isIrisCompatCullingEnabled() {
		return FeatureConfig.CONFIG.irisCompatOrientationCullingCompat.get() == FeatureStatus.ENABLED;
	}

	public static boolean isShadowCullingEnabled() {
		return getShadowCullingSetting() == FeatureStatus.ENABLED;
	}

	public static boolean isPolygonProcessingEnabled() {
		return getPolygonProcessingSetting() == FeatureStatus.ENABLED;
	}

	public static void disableShadowCulling() {
		SHADOW_CULLING_CONTROLLER_STACK.push(FeatureStatus.DISABLED);
	}

	public static void disablePolygonProcessing() {
		POLYGON_PROCESSING_CONTROLLER_STACK.push(FeatureStatus.DISABLED);
	}

	public static void forceEnableShadowCulling() {
		SHADOW_CULLING_CONTROLLER_STACK.push(FeatureStatus.ENABLED);
	}

	public static void forceEnablePolygonProcessing() {
		POLYGON_PROCESSING_CONTROLLER_STACK.push(FeatureStatus.ENABLED);
	}

	public static void forceSetShadowCulling(FeatureStatus status) {
		SHADOW_CULLING_CONTROLLER_STACK.push(status);
	}

	public static void forceSetIrisPolygonProcessing(FeatureStatus status) {
		POLYGON_PROCESSING_CONTROLLER_STACK.push(status);
	}

	public static void resetShadowCulling() {
		SHADOW_CULLING_CONTROLLER_STACK.pop();
	}

	public static void resetPolygonProcessing() {
		POLYGON_PROCESSING_CONTROLLER_STACK.pop();
	}

	public static FeatureStatus getShadowCullingSetting() {
		return SHADOW_CULLING_CONTROLLER_STACK.isEmpty() ? getDefaultShadowCullingSetting() : SHADOW_CULLING_CONTROLLER_STACK.peek();
	}

	public static FeatureStatus getPolygonProcessingSetting() {
		return POLYGON_PROCESSING_CONTROLLER_STACK.isEmpty() ? getDefaultPolygonProcessingSetting() : POLYGON_PROCESSING_CONTROLLER_STACK.peek();
	}

	public static FeatureStatus getDefaultShadowCullingSetting() {
		return FeatureConfig.CONFIG.irisCompatShadowCulling.get();
	}

	public static FeatureStatus getDefaultPolygonProcessingSetting() {
		return FeatureConfig.CONFIG.irisCompatPolygonProcessing.get();
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/environments/IrisBufferEnvironment.java
================================================
package com.github.argon4w.acceleratedrendering.compat.iris.environments;

import com.github.argon4w.acceleratedrendering.core.backends.buffers.IServerBuffer;
import com.github.argon4w.acceleratedrendering.core.buffers.environments.IBufferEnvironment;
import com.github.argon4w.acceleratedrendering.core.buffers.memory.VertexLayout;
import com.github.argon4w.acceleratedrendering.core.meshes.ServerMesh;
import com.github.argon4w.acceleratedrendering.core.programs.culling.ICullingProgramDispatcher;
import com.github.argon4w.acceleratedrendering.core.programs.culling.ICullingProgramSelector;
import com.github.argon4w.acceleratedrendering.core.programs.culling.LoadCullingProgramSelectorEvent;
import com.github.argon4w.acceleratedrendering.core.programs.dispatchers.IPolygonProgramDispatcher;
import com.github.argon4w.acceleratedrendering.core.programs.dispatchers.MeshUploadingProgramDispatcher;
import com.github.argon4w.acceleratedrendering.core.programs.dispatchers.TransformProgramDispatcher;
import com.github.argon4w.acceleratedrendering.core.programs.overrides.IShaderProgramOverrides;
import com.github.argon4w.acceleratedrendering.core.programs.overrides.ITransformShaderProgramOverride;
import com.github.argon4w.acceleratedrendering.core.programs.overrides.IUploadingShaderProgramOverride;
import com.github.argon4w.acceleratedrendering.core.programs.overrides.LoadShaderProgramOverridesEvent;
import com.github.argon4w.acceleratedrendering.core.programs.processing.IPolygonProcessor;
import com.github.argon4w.acceleratedrendering.core.programs.processing.LoadPolygonProcessorEvent;
import com.mojang.blaze3d.vertex.VertexFormat;
import net.irisshaders.iris.api.v0.IrisApi;
import net.irisshaders.iris.vertices.ImmediateState;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.resources.ResourceLocation;
import net.neoforged.fml.ModLoader;

import java.util.Set;

public class IrisBufferEnvironment implements IBufferEnvironment {

	private final IBufferEnvironment vanillaSubSet;
	private final IBufferEnvironment irisSubSet;

	public IrisBufferEnvironment(
			IBufferEnvironment	vanillaSubSet,
			VertexFormat		vanillaVertexFormat,
			VertexFormat		irisVertexFormat,
			ResourceLocation	meshUploadingProgramKey,
			ResourceLocation	transformProgramKey
	) {
		this.vanillaSubSet	= vanillaSubSet;
		this.irisSubSet		= new IrisSubSet(
				vanillaVertexFormat,
				irisVertexFormat,
				meshUploadingProgramKey,
				transformProgramKey
		);
	}

	private IBufferEnvironment getSubSet() {
		return IrisApi.getInstance().isShaderPackInUse() && ImmediateState.isRenderingLevel ? irisSubSet : vanillaSubSet;
	}

	@Override
	public void setupBufferState() {
		getSubSet().setupBufferState();
	}

	@Override
	public Set<VertexFormat> getVertexFormats() {
		return irisSubSet.getVertexFormats();
	}

	@Override
	public VertexLayout getLayout() {
		return getSubSet().getLayout();
	}

	@Override
	public IServerBuffer getImmediateMeshBuffer() {
		return getSubSet().getImmediateMeshBuffer();
	}

	@Override
	public ITransformShaderProgramOverride getTransformProgramOverride(RenderType renderType) {
		return getSubSet().getTransformProgramOverride(renderType);
	}

	@Override
	public IUploadingShaderProgramOverride getUploadingProgramOverride(RenderType renderType) {
		return getSubSet().getUploadingProgramOverride(renderType);
	}

	@Override
	public MeshUploadingProgramDispatcher selectMeshUploadingProgramDispatcher() {
		return getSubSet().selectMeshUploadingProgramDispatcher();
	}

	@Override
	public TransformProgramDispatcher selectTransformProgramDispatcher() {
		return getSubSet().selectTransformProgramDispatcher();
	}

	@Override
	public ICullingProgramDispatcher selectCullingProgramDispatcher(RenderType renderType) {
		return getSubSet().selectCullingProgramDispatcher(renderType);
	}

	@Override
	public IPolygonProgramDispatcher selectProcessingProgramDispatcher(VertexFormat.Mode mode) {
		return getSubSet().selectProcessingProgramDispatcher(mode);
	}

	@Override
	public boolean isAccelerated(VertexFormat vertexFormat) {
		return getSubSet().isAccelerated(vertexFormat);
	}

	@Override
	public int getVertexSize() {
		return getSubSet().getVertexSize();
	}

	public static class IrisSubSet implements IBufferEnvironment {

		private final VertexFormat						vanillaVertexFormat;
		private final VertexFormat						irisVertexFormat;
		private final VertexLayout						layout;

		private final IShaderProgramOverrides			shaderProgramOverrides;
		private final MeshUploadingProgramDispatcher	meshUploadingProgramDispatcher;
		private final TransformProgramDispatcher		transformProgramDispatcher;
		private final ICullingProgramSelector			cullingProgramSelector;
		private final IPolygonProcessor					polygonProcessor;

		public IrisSubSet(
				VertexFormat		vanillaVertexFormat,
				VertexFormat		irisVertexFormat,
				ResourceLocation	uploadingProgramKey,
				ResourceLocation	transformProgramKey
		) {
			var defaultTransformOverride		= new TransformProgramDispatcher	.Default(transformProgramKey, 4L * 4L);
			var defaultUploadingOverride		= new MeshUploadingProgramDispatcher.Default(uploadingProgramKey, 7L * 4L);

			this.vanillaVertexFormat			= vanillaVertexFormat;
			this.irisVertexFormat				= irisVertexFormat;
			this.layout							= new VertexLayout(this.irisVertexFormat);

			this.shaderProgramOverrides			= ModLoader.postEventWithReturn(new LoadShaderProgramOverridesEvent	(this.irisVertexFormat)).getOverrides	(defaultTransformOverride, defaultUploadingOverride);
			this.cullingProgramSelector			= ModLoader.postEventWithReturn(new LoadCullingProgramSelectorEvent	(this.irisVertexFormat)).getSelector	();
			this.polygonProcessor				= ModLoader.postEventWithReturn(new LoadPolygonProcessorEvent		(this.irisVertexFormat)).getProcessor	();

			this.meshUploadingProgramDispatcher	= new MeshUploadingProgramDispatcher();
			this.transformProgramDispatcher		= new TransformProgramDispatcher	();
		}

		@Override
		public void setupBufferState() {
			irisVertexFormat.setupBufferState();
		}

		@Override
		public boolean isAccelerated(VertexFormat vertexFormat) {
			return this.vanillaVertexFormat == vertexFormat || this.irisVertexFormat == vertexFormat;
		}

		@Override
		public Set<VertexFormat> getVertexFormats() {
			return Set.of(vanillaVertexFormat, irisVertexFormat);
		}

		@Override
		public VertexLayout getLayout() {
			return layout;
		}

		@Override
		public IServerBuffer getImmediateMeshBuffer() {
			return ServerMesh.Builder.BUFFERS.get(layout).getFirst();
		}

		@Override
		public ITransformShaderProgramOverride getTransformProgramOverride(RenderType renderType) {
			return shaderProgramOverrides.getTransformOverrides().get(renderType);
		}

		@Override
		public IUploadingShaderProgramOverride getUploadingProgramOverride(RenderType renderType) {
			return shaderProgramOverrides.getUploadingOverrides().get(renderType);
		}

		@Override
		public MeshUploadingProgramDispatcher selectMeshUploadingProgramDispatcher() {
			return meshUploadingProgramDispatcher;
		}

		@Override
		public TransformProgramDispatcher selectTransformProgramDispatcher() {
			return transformProgramDispatcher;
		}

		@Override
		public ICullingProgramDispatcher selectCullingProgramDispatcher(RenderType renderType) {
			return cullingProgramSelector.select(renderType);
		}

		@Override
		public IPolygonProgramDispatcher selectProcessingProgramDispatcher(VertexFormat.Mode mode) {
			return polygonProcessor.select(mode);
		}

		@Override
		public int getVertexSize() {
			return irisVertexFormat.getVertexSize();
		}
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/interfaces/IIrisAcceleratedBufferBuilder.java
================================================
package com.github.argon4w.acceleratedrendering.compat.iris.interfaces;

import com.github.argon4w.acceleratedrendering.core.buffers.memory.IMemoryInterface;

public interface IIrisAcceleratedBufferBuilder {

	IMemoryInterface getEntityIdOffset	();
	IMemoryInterface getEntityOffset	();
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/interfaces/IIrisMeshInfo.java
================================================
package com.github.argon4w.acceleratedrendering.compat.iris.interfaces;

public interface IIrisMeshInfo {

	short getRenderedEntity		();
	short getRenderedBlockEntity();
	short getRenderedItem		();
}

================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/interfaces/IIrisMeshInfoCache.java
================================================
package com.github.argon4w.acceleratedrendering.compat.iris.interfaces;

public interface IIrisMeshInfoCache {

	short getRenderedEntity		(int i);
	short getRenderedBlockEntity(int i);
	short getRenderedItem		(int i);
}

================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/AcceleratedBufferBuilderMixin.java
================================================
package com.github.argon4w.acceleratedrendering.compat.iris.mixins.acceleratedrendering;

import com.github.argon4w.acceleratedrendering.compat.iris.interfaces.IIrisAcceleratedBufferBuilder;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.AcceleratedRingBuffers;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.builders.AcceleratedBufferBuilder;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.layers.functions.ILayerFunction;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.pools.ElementBufferPool;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.pools.StagingBufferPool;
import com.github.argon4w.acceleratedrendering.core.buffers.memory.IMemoryInterface;
import com.github.argon4w.acceleratedrendering.core.buffers.memory.VertexLayout;
import com.llamalad7.mixinextras.sugar.Local;
import com.mojang.blaze3d.vertex.VertexConsumer;
import com.mojang.blaze3d.vertex.VertexFormatElement;
import net.irisshaders.iris.uniforms.CapturedRenderingState;
import net.irisshaders.iris.vertices.IrisVertexFormats;
import net.minecraft.client.renderer.RenderType;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

@Mixin(AcceleratedBufferBuilder.class)
public class AcceleratedBufferBuilderMixin implements IIrisAcceleratedBufferBuilder {

	@Shadow @Final private	VertexLayout		layout;
	@Shadow private			long				vertexAddress;

	@Unique private			IMemoryInterface	entityIdOffset;
	@Unique private			IMemoryInterface	entityOffset;

	@Inject(
			method	= "<init>",
			at		= @At("TAIL")
	)
	public void constructor(
			StagingBufferPool		.StagingBuffer	vertexBuffer,
			StagingBufferPool		.StagingBuffer	varyingBuffer,
			ElementBufferPool		.ElementSegment	elementSegment,
			AcceleratedRingBuffers	.Buffers		buffers,
			ILayerFunction							layerFunction,
			RenderType								renderType,
			CallbackInfo							ci
	) {
		entityIdOffset	= layout.getElement(IrisVertexFormats.ENTITY_ID_ELEMENT);
		entityOffset	= layout.getElement(IrisVertexFormats.ENTITY_ELEMENT);
	}

	@Inject(
			method	= "addVertex(FFFIFFIIFFF)V",
			at		= @At("TAIL")
	)
	public void addIrisVertex(
			float								pX,
			float								pY,
			float								pZ,
			int									pColor,
			float								pU,
			float								pV,
			int									pPackedOverlay,
			int									pPackedLight,
			float								pNormalX,
			float								pNormalY,
			float								pNormalZ,
			CallbackInfo						ci,
			@Local(name = "vertexAddress") long	vertexAddress
	) {
		addIrisData(vertexAddress);
	}

	@Inject(
			method	= "addVertex(FFF)Lcom/mojang/blaze3d/vertex/VertexConsumer;",
			at		= @At("TAIL")
	)
	public void addIrisVertex(
			float									pX,
			float									pY,
			float 									pZ,
			CallbackInfoReturnable<VertexConsumer>	cir) {
		addIrisData(vertexAddress);
	}

	@Inject(
			method	= {
					"addServerMesh",
					"addClientMesh"
			},
			at		= @At(
					value	= "INVOKE",
					target	= "Lcom/github/argon4w/acceleratedrendering/core/buffers/memory/IMemoryInterface;putInt(JI)V",
					ordinal	= 2,
					shift	= At.Shift.AFTER
			)
	)
	public void addIrisMesh(CallbackInfo ci, @Local(name = "vertexAddress") long vertexAddress) {
		addIrisData(vertexAddress);
	}

	@Unique
	private void addIrisData(long vertexAddress) {
		entityOffset	.putShort(vertexAddress + 0L, (short) -1);
		entityOffset	.putShort(vertexAddress + 2L, (short) -1);
		entityIdOffset	.putShort(vertexAddress + 0L, (short) CapturedRenderingState.INSTANCE.getCurrentRenderedEntity		());
		entityIdOffset	.putShort(vertexAddress + 2L, (short) CapturedRenderingState.INSTANCE.getCurrentRenderedBlockEntity	());
		entityIdOffset	.putShort(vertexAddress + 4L, (short) CapturedRenderingState.INSTANCE.getCurrentRenderedItem		());
	}

	@Unique
	@Override
	public IMemoryInterface getEntityIdOffset() {
		return entityIdOffset;
	}

	@Unique
	@Override
	public IMemoryInterface getEntityOffset() {
		return entityOffset;
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/AcceleratedBufferSourceMixin.java
================================================
package com.github.argon4w.acceleratedrendering.compat.iris.mixins.acceleratedrendering;

import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.AcceleratedBufferSource;
import net.irisshaders.batchedentityrendering.impl.WrappableRenderType;
import net.irisshaders.iris.vertices.ImmediateState;
import net.minecraft.client.renderer.RenderType;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.ModifyArg;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(AcceleratedBufferSource.class)
public class AcceleratedBufferSourceMixin {

	@ModifyArg(
			method	= "getBuffer",
			at		= @At(
					value	= "INVOKE",
					target	= "Lcom/github/argon4w/acceleratedrendering/core/buffers/accelerated/builders/AcceleratedBufferBuilder;<init>(Lcom/github/argon4w/acceleratedrendering/core/buffers/accelerated/pools/StagingBufferPool$StagingBuffer;Lcom/github/argon4w/acceleratedrendering/core/buffers/accelerated/pools/StagingBufferPool$StagingBuffer;Lcom/github/argon4w/acceleratedrendering/core/buffers/accelerated/pools/ElementBufferPool$ElementSegment;Lcom/github/argon4w/acceleratedrendering/core/buffers/accelerated/AcceleratedRingBuffers$Buffers;Lcom/github/argon4w/acceleratedrendering/core/buffers/accelerated/layers/functions/ILayerFunction;Lnet/minecraft/client/renderer/RenderType;)V"
			),
			index	= 5
	)
	public RenderType unwrapIrisRenderType(RenderType renderType) {
		return renderType instanceof WrappableRenderType wrapped ? wrapped.unwrap() : renderType;
	}

	@Inject(
			method	= "drawBuffers",
			at		= @At(
					value	= "INVOKE",
					target	= "Lcom/github/argon4w/acceleratedrendering/core/buffers/accelerated/AcceleratedRingBuffers$Buffers;bindDrawBuffers()V",
					shift	= At.Shift.BEFORE
			)
	)
	private void beforeBindDrawBuffers(CallbackInfo ci) {
		if (!ImmediateState.isRenderingLevel) {
			ImmediateState.renderWithExtendedVertexFormat = false;
		}
	}

	@Inject(
			method	= "drawBuffers",
			at		= @At(
					value	= "INVOKE",
					target	= "Lcom/github/argon4w/acceleratedrendering/core/buffers/accelerated/AcceleratedRingBuffers$Buffers;bindDrawBuffers()V",
					shift	= At.Shift.AFTER
			)
	)
	private void afterBindDrawBuffers(CallbackInfo ci) {
		if (!ImmediateState.isRenderingLevel) {
			ImmediateState.renderWithExtendedVertexFormat = true;
		}
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/AcceleratedRenderingModEntryMixin.java
================================================
package com.github.argon4w.acceleratedrendering.compat.iris.mixins.acceleratedrendering;

import com.github.argon4w.acceleratedrendering.AcceleratedRenderingModEntry;
import com.github.argon4w.acceleratedrendering.compat.iris.programs.IrisPrograms;
import net.neoforged.bus.api.IEventBus;
import net.neoforged.fml.ModContainer;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(AcceleratedRenderingModEntry.class)
public class AcceleratedRenderingModEntryMixin {

	@Inject(
			method	= "<init>",
			at		= @At("TAIL")
	)
	public void registerIrisEvents(
			IEventBus		modEventBus,
			ModContainer	modContainer,
			CallbackInfo	ci
	) {
		modEventBus.register(IrisPrograms.class);
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/CoreBuffersProviderMixin.java
================================================
package com.github.argon4w.acceleratedrendering.compat.iris.mixins.acceleratedrendering;

import com.github.argon4w.acceleratedrendering.core.CoreBuffersProvider;
import com.llamalad7.mixinextras.injector.wrapmethod.WrapMethod;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import net.irisshaders.batchedentityrendering.impl.RenderBuffersExt;
import net.minecraft.client.renderer.RenderBuffers;
import org.spongepowered.asm.mixin.Mixin;

@Mixin(CoreBuffersProvider.class)
public class CoreBuffersProviderMixin {

	@WrapMethod(method = "bindAcceleratedBufferSources")
	private static void bindAcceleratedBufferSourcesForIris(RenderBuffers renderBuffers, Operation<Void> original) {
		var extension = (RenderBuffersExt) renderBuffers;

		extension	.beginLevelRendering();
		original	.call				(renderBuffers);
		extension	.endLevelRendering	();
		original	.call				(renderBuffers);
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/FlattenMeshInfoCacheMixin.java
================================================
package com.github.argon4w.acceleratedrendering.compat.iris.mixins.acceleratedrendering;

import com.github.argon4w.acceleratedrendering.compat.iris.interfaces.IIrisMeshInfoCache;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.pools.meshes.FlattenMeshInfoCache;
import com.llamalad7.mixinextras.sugar.Local;
import net.irisshaders.iris.uniforms.CapturedRenderingState;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Constant;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.ModifyConstant;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import java.lang.invoke.VarHandle;

@Mixin(FlattenMeshInfoCache.class)
public class FlattenMeshInfoCacheMixin implements IIrisMeshInfoCache {

	@Shadow @Final public	static			VarHandle	HANDLE;

	@Shadow private							int[]		cache;

	@Unique private			static final	int			IRIS_MESH_INFO_SIZE				= 8;
	@Unique private			static final	int			RENDERED_ENTITY_OFFSET			= 5;
	@Unique private			static final	int			RENDERED_BLOCK_ENTITY_OFFSET	= 6;
	@Unique private			static final	int			RENDERED_ITEM_OFFSET			= 7;

	@ModifyConstant(
			method		= {
					"<init>",
					"setup",
					"getSharing",
					"getShouldCull",
					"getColor",
					"getLight",
					"getOverlay"
			},
			constant	= @Constant(intValue = 5)
	)
	public int modifySize(int constant) {
		return IRIS_MESH_INFO_SIZE;
	}

	@Inject(
			method	= "setup",
			at		= @At(
					value	= "INVOKE",
					target	= "Ljava/lang/invoke/VarHandle;set([III)V",
					ordinal	= 4,
					shift	= At.Shift.AFTER
			)
	)
	public void addIrisData(
			int									color,
			int									light,
			int									overlay,
			int									sharing,
			int									shouldCull,
			CallbackInfo						ci,
			@Local(name = "infoIndex") int		infoIndex
	) {
		HANDLE.set(cache, infoIndex + RENDERED_ENTITY_OFFSET,		CapturedRenderingState.INSTANCE.getCurrentRenderedEntity		());
		HANDLE.set(cache, infoIndex + RENDERED_BLOCK_ENTITY_OFFSET,	CapturedRenderingState.INSTANCE.getCurrentRenderedBlockEntity	());
		HANDLE.set(cache, infoIndex + RENDERED_ITEM_OFFSET,			CapturedRenderingState.INSTANCE.getCurrentRenderedItem			());
	}

	@Override
	public short getRenderedEntity(int i) {
		return (short) (int) HANDLE.get(cache, i * IRIS_MESH_INFO_SIZE + RENDERED_ENTITY_OFFSET);
	}

	@Override
	public short getRenderedBlockEntity(int i) {
		return (short) (int) HANDLE.get(cache, i * IRIS_MESH_INFO_SIZE + RENDERED_BLOCK_ENTITY_OFFSET);
	}

	@Override
	public short getRenderedItem(int i) {
		return (short) (int) HANDLE.get(cache, i * IRIS_MESH_INFO_SIZE + RENDERED_ITEM_OFFSET);
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/IBufferEnvironmentPresetsMixin.java
================================================
package com.github.argon4w.acceleratedrendering.compat.iris.mixins.acceleratedrendering;

import com.github.argon4w.acceleratedrendering.compat.iris.environments.IrisBufferEnvironment;
import com.github.argon4w.acceleratedrendering.compat.iris.programs.IrisPrograms;
import com.github.argon4w.acceleratedrendering.core.buffers.environments.IBufferEnvironment;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import com.mojang.blaze3d.vertex.DefaultVertexFormat;
import net.irisshaders.iris.vertices.IrisVertexFormats;
import org.objectweb.asm.Opcodes;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Mutable;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;

@Mixin(IBufferEnvironment.Presets.class)
public class IBufferEnvironmentPresetsMixin {

	@Mutable @Shadow @Final public static IBufferEnvironment BLOCK;
	@Mutable @Shadow @Final public static IBufferEnvironment ENTITY;
	@Mutable @Shadow @Final public static IBufferEnvironment POS_COLOR_TEX_LIGHT;

	@WrapOperation(
			method	= "<clinit>",
			at		= @At(
					value	= "FIELD",
					target	= "Lcom/github/argon4w/acceleratedrendering/core/buffers/environments/IBufferEnvironment$Presets;BLOCK:Lcom/github/argon4w/acceleratedrendering/core/buffers/environments/IBufferEnvironment;",
					opcode	= Opcodes.PUTSTATIC
			)
	)
	private static void useIrisBloockEnvironment(IBufferEnvironment value, Operation<Void> original) {
		original.call(new IrisBufferEnvironment(
				value,
				DefaultVertexFormat	.BLOCK,
				IrisVertexFormats	.TERRAIN,
				IrisPrograms		.IRIS_BLOCK_MESH_UPLOADING_KEY,
				IrisPrograms		.IRIS_BLOCK_VERTEX_TRANSFORM_KEY
		));
	}

	@WrapOperation(
			method	= "<clinit>",
			at		= @At(
					value	= "FIELD",
					target	= "Lcom/github/argon4w/acceleratedrendering/core/buffers/environments/IBufferEnvironment$Presets;ENTITY:Lcom/github/argon4w/acceleratedrendering/core/buffers/environments/IBufferEnvironment;",
					opcode	= Opcodes.PUTSTATIC
			)
	)
	private static void useIrisEntityEnvironment(IBufferEnvironment value, Operation<Void> original) {
		original.call(new IrisBufferEnvironment(
				value,
				DefaultVertexFormat	.NEW_ENTITY,
				IrisVertexFormats	.ENTITY,
				IrisPrograms		.IRIS_ENTITY_MESH_UPLOADING_KEY,
				IrisPrograms		.IRIS_ENTITY_VERTEX_TRANSFORM_KEY
		));
	}

	@WrapOperation(
			method	= "<clinit>",
			at		= @At(
					value	= "FIELD",
					target	= "Lcom/github/argon4w/acceleratedrendering/core/buffers/environments/IBufferEnvironment$Presets;POS_COLOR_TEX_LIGHT:Lcom/github/argon4w/acceleratedrendering/core/buffers/environments/IBufferEnvironment;",
					opcode	= Opcodes.PUTSTATIC
			)
	)
	private static void useIrisGlyphEnvironment(IBufferEnvironment value, Operation<Void> original) {
		original.call(new IrisBufferEnvironment(
				value,
				DefaultVertexFormat	.POSITION_COLOR_TEX_LIGHTMAP,
				IrisVertexFormats	.GLYPH,
				IrisPrograms		.IRIS_GLYPH_MESH_UPLOADING_KEY,
				IrisPrograms		.IRIS_GLYPH_VERTEX_TRANSFORM_KEY
		));
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/MeshUploaderMixin.java
================================================
package com.github.argon4w.acceleratedrendering.compat.iris.mixins.acceleratedrendering;

import com.github.argon4w.acceleratedrendering.compat.iris.interfaces.IIrisMeshInfoCache;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.pools.meshes.IMeshInfoCache;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.pools.meshes.MeshUploaderPool;
import com.github.argon4w.acceleratedrendering.core.buffers.memory.IMemoryInterface;
import com.github.argon4w.acceleratedrendering.core.buffers.memory.SimpleDynamicMemoryInterface;
import com.llamalad7.mixinextras.sugar.Local;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(MeshUploaderPool.MeshUploader.class)
public abstract class MeshUploaderMixin {

	@Shadow @Final private	IMeshInfoCache meshInfos;

	@Unique private final	IMemoryInterface IRIS_INFO_ENTITY		= new SimpleDynamicMemoryInterface(5L * 4L + 0L * 2L, (MeshUploaderPool.MeshUploader) (Object) this);
	@Unique private final	IMemoryInterface IRIS_INFO_BLOCK_ENTITY	= new SimpleDynamicMemoryInterface(5L * 4L + 1L * 2L, (MeshUploaderPool.MeshUploader) (Object) this);
	@Unique private final	IMemoryInterface IRIS_INFO_ITEM			= new SimpleDynamicMemoryInterface(5L * 4L + 2L * 2L, (MeshUploaderPool.MeshUploader) (Object) this);

	@Inject(
			method	= "upload",
			at		= @At(
					value	= "INVOKE",
					target	= "Lcom/github/argon4w/acceleratedrendering/core/buffers/memory/IMemoryInterface;putInt(JI)V",
					ordinal	= 4,
					shift	= At.Shift.AFTER
			)
	)
	public void uploadIrisData(
			CallbackInfo								ci,
			@Local(name = "meshInfoAddress")	long	meshInfoAddress,
			@Local(name = "i")					int		offset
	) {
		IRIS_INFO_ENTITY		.at(offset).putShort(meshInfoAddress, ((IIrisMeshInfoCache) meshInfos).getRenderedEntity		(offset));
		IRIS_INFO_BLOCK_ENTITY	.at(offset).putShort(meshInfoAddress, ((IIrisMeshInfoCache) meshInfos).getRenderedBlockEntity	(offset));
		IRIS_INFO_ITEM			.at(offset).putShort(meshInfoAddress, ((IIrisMeshInfoCache) meshInfos).getRenderedItem			(offset));
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/MeshUploadingProgramDispatcherMixin.java
================================================
package com.github.argon4w.acceleratedrendering.compat.iris.mixins.acceleratedrendering;

import com.github.argon4w.acceleratedrendering.compat.iris.interfaces.IIrisAcceleratedBufferBuilder;
import com.github.argon4w.acceleratedrendering.compat.iris.interfaces.IIrisMeshInfoCache;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.AcceleratedRingBuffers;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.builders.AcceleratedBufferBuilder;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.pools.meshes.IMeshInfoCache;
import com.github.argon4w.acceleratedrendering.core.programs.dispatchers.MeshUploadingProgramDispatcher;
import com.llamalad7.mixinextras.sugar.Local;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import java.util.Collection;

@Mixin(MeshUploadingProgramDispatcher.class)
public class MeshUploadingProgramDispatcherMixin {

	@Inject(
			method	= "dispatch",
			at		= @At(
					value	= "INVOKE",
					target	= "Lcom/github/argon4w/acceleratedrendering/core/buffers/memory/IMemoryInterface;putInt(JI)V",
					ordinal	= 2,
					shift	= At.Shift.AFTER
			)
	)
	public void addIrisData(
			Collection<AcceleratedBufferBuilder>						builders,
			AcceleratedRingBuffers.Buffers								buffers,
			CallbackInfo												ci,
			@Local(name = "meshInfos")		IMeshInfoCache				meshInfos,
			@Local(name = "builder")		AcceleratedBufferBuilder	builder,
			@Local(name = "offset")			int							offset,
			@Local(name = "i")				int							i,
			@Local(name = "vertexAddress")	long						vertexAddress
	) {
		((IIrisAcceleratedBufferBuilder) builder).getEntityIdOffset()	.at(offset).putShort(vertexAddress + 0L, ((IIrisMeshInfoCache) meshInfos).getRenderedEntity		(i));
		((IIrisAcceleratedBufferBuilder) builder).getEntityIdOffset()	.at(offset).putShort(vertexAddress + 2L, ((IIrisMeshInfoCache) meshInfos).getRenderedEntity		(i));
		((IIrisAcceleratedBufferBuilder) builder).getEntityIdOffset()	.at(offset).putShort(vertexAddress + 4L, ((IIrisMeshInfoCache) meshInfos).getRenderedEntity		(i));
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/RenderTypeUtilsMixin.java
================================================
package com.github.argon4w.acceleratedrendering.compat.iris.mixins.acceleratedrendering;

import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.layers.LayerDrawType;
import com.github.argon4w.acceleratedrendering.core.utils.RenderTypeUtils;
import net.irisshaders.batchedentityrendering.impl.BlendingStateHolder;
import net.irisshaders.batchedentityrendering.impl.TransparencyType;
import net.irisshaders.batchedentityrendering.impl.WrappableRenderType;
import net.minecraft.client.renderer.RenderType;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.ModifyVariable;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;

@Mixin(RenderTypeUtils.class)
public class RenderTypeUtilsMixin {

	@ModifyVariable(
			method		= "getTextureLocation",
			at			= @At("HEAD"),
			ordinal		= 0,
			argsOnly	= true
	)
	private static RenderType unwrapIrisRenderType1(RenderType renderType) {
		return renderType instanceof WrappableRenderType wrapped ? wrapped.unwrap() : renderType;
	}

	@ModifyVariable(
			method		= "isCulled",
			at			= @At("HEAD"),
			ordinal		= 0,
			argsOnly	= true
	)
	private static RenderType unwrapIrisRenderType2(RenderType renderType) {
		return renderType instanceof WrappableRenderType wrapped ? wrapped.unwrap() : renderType;
	}

	@ModifyVariable(
			method		= "isDynamic",
			at			= @At("HEAD"),
			ordinal		= 0,
			argsOnly	= true
	)
	private static RenderType unwrapIrisRenderType3(RenderType renderType) {
		return renderType instanceof WrappableRenderType wrapped ? wrapped.unwrap() : renderType;
	}

	@ModifyVariable(
			method		= "hasDepth",
			at			= @At("HEAD"),
			ordinal		= 0,
			argsOnly	= true
	)
	private static RenderType unwrapIrisRenderType4(RenderType renderType) {
		return renderType instanceof WrappableRenderType wrapped ? wrapped.unwrap() : renderType;
	}

	@ModifyVariable(
			method		= "withDepth",
			at			= @At("HEAD"),
			ordinal		= 0,
			argsOnly	= true
	)
	private static RenderType unwrapIrisRenderType5(RenderType renderType) {
		return renderType instanceof WrappableRenderType wrapped ? wrapped.unwrap() : renderType;
	}

	@Inject(
			method		= "getDrawType",
			at			= @At("HEAD"),
			cancellable	= true
	)
	private static void getIrisRenderTypeDrawType(RenderType renderType, CallbackInfoReturnable<LayerDrawType> cir) {
		var holder = (BlendingStateHolder) renderType;

		cir.setReturnValue(	holder.getTransparencyType() == TransparencyType.GENERAL_TRANSPARENT
				||			holder.getTransparencyType() == TransparencyType.DECAL
				? LayerDrawType.TRANSLUCENT
				: LayerDrawType.OPAQUE
		);
	}

	@Inject(
			method		= "isTranslucent",
			at			= @At("HEAD"),
			cancellable	= true
	)
	private static void checkIrisTransparency(RenderType renderType, CallbackInfoReturnable<Boolean> cir) {
		var holder = (BlendingStateHolder) renderType;

		cir.setReturnValue(	holder.getTransparencyType() == TransparencyType.GENERAL_TRANSPARENT
				||			holder.getTransparencyType() == TransparencyType.DECAL
		);
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/SimpleMeshInfoCacheMixin.java
================================================
package com.github.argon4w.acceleratedrendering.compat.iris.mixins.acceleratedrendering;

import com.github.argon4w.acceleratedrendering.compat.iris.interfaces.IIrisMeshInfo;
import com.github.argon4w.acceleratedrendering.compat.iris.interfaces.IIrisMeshInfoCache;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.pools.meshes.SimpleMeshInfo;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.pools.meshes.SimpleMeshInfoCache;
import com.github.argon4w.acceleratedrendering.core.utils.SimpleCachedArray;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;

@Mixin(SimpleMeshInfoCache.class)
public class SimpleMeshInfoCacheMixin implements IIrisMeshInfoCache {

	@Shadow @Final private SimpleCachedArray<SimpleMeshInfo> meshInfos;

	@Override
	public short getRenderedEntity(int i) {
		return ((IIrisMeshInfo) meshInfos.at(i)).getRenderedEntity();
	}

	@Override
	public short getRenderedBlockEntity(int i) {
		return ((IIrisMeshInfo) meshInfos.at(i)).getRenderedBlockEntity();
	}

	@Override
	public short getRenderedItem(int i) {
		return ((IIrisMeshInfo) meshInfos.at(i)).getRenderedItem();
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/SimpleMeshInfoMixin.java
================================================
package com.github.argon4w.acceleratedrendering.compat.iris.mixins.acceleratedrendering;

import com.github.argon4w.acceleratedrendering.compat.iris.interfaces.IIrisMeshInfo;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.pools.meshes.SimpleMeshInfo;
import net.irisshaders.iris.uniforms.CapturedRenderingState;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(SimpleMeshInfo.class)
public class SimpleMeshInfoMixin implements IIrisMeshInfo {

	@Unique private short renderedEntity;
	@Unique private short renderedBlockEntity;
	@Unique private short renderedItem;

	@Inject(method = "setupMeshInfo", at = @At("TAIL"))
	public void setIrisData(
			int				color,
			int				light,
			int				overlay,
			int				sharing,
			int				shouldCull,
			CallbackInfo	ci
	) {
		renderedEntity		= (short) CapturedRenderingState.INSTANCE.getCurrentRenderedEntity		();
		renderedBlockEntity	= (short) CapturedRenderingState.INSTANCE.getCurrentRenderedBlockEntity	();
		renderedItem		= (short) CapturedRenderingState.INSTANCE.getCurrentRenderedItem		();
	}

	@Unique
	@Override
	public short getRenderedEntity() {
		return renderedEntity;
	}

	@Unique
	@Override
	public short getRenderedBlockEntity() {
		return renderedBlockEntity;
	}

	@Unique
	@Override
	public short getRenderedItem() {
		return renderedItem;
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/UnsafeMemoryMeshInfoCacheMixin.java
================================================
package com.github.argon4w.acceleratedrendering.compat.iris.mixins.acceleratedrendering;

import com.github.argon4w.acceleratedrendering.compat.iris.interfaces.IIrisMeshInfoCache;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.pools.meshes.UnsafeMemoryMeshInfoCache;
import com.llamalad7.mixinextras.sugar.Local;
import net.irisshaders.iris.uniforms.CapturedRenderingState;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Constant;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.ModifyConstant;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import sun.misc.Unsafe;

@Mixin(UnsafeMemoryMeshInfoCache.class)
public class UnsafeMemoryMeshInfoCacheMixin implements IIrisMeshInfoCache {

	@Shadow @Final public	static			Unsafe		UNSAFE;

	@Shadow private							long		address;

	@Unique private			static final	long		IRIS_MESH_INFO_SIZE				= 8L * 4L;
	@Unique private			static final	long		RENDERED_ENTITY_OFFSET			= 5L * 4L;
	@Unique private			static final	long		RENDERED_BLOCK_ENTITY_OFFSET	= 6L * 4L;
	@Unique private			static final	long		RENDERED_ITEM_OFFSET			= 7L * 4L;

	@ModifyConstant(
			method		= {
					"<init>",
					"setup",
					"getSharing",
					"getShouldCull",
					"getColor",
					"getLight",
					"getOverlay"
			},
			constant	= @Constant(longValue = 20L)
	)
	public long modifySize(long constant) {
		return IRIS_MESH_INFO_SIZE;
	}

	@Inject(
			method	= "setup",
			at		= @At(
					value = "INVOKE",
					target = "Lsun/misc/Unsafe;putInt(JI)V",
					ordinal	= 4,
					shift	= At.Shift.AFTER
			)
	)
	public void addIrisData(
			int									color,
			int									light,
			int									overlay,
			int									sharing,
			int									shouldCull,
			CallbackInfo						ci,
			@Local(name = "infoAddress") long	infoAddress
	) {
		UNSAFE.putInt(infoAddress + RENDERED_ENTITY_OFFSET,			CapturedRenderingState.INSTANCE.getCurrentRenderedEntity		());
		UNSAFE.putInt(infoAddress + RENDERED_BLOCK_ENTITY_OFFSET,	CapturedRenderingState.INSTANCE.getCurrentRenderedBlockEntity	());
		UNSAFE.putInt(infoAddress + RENDERED_ITEM_OFFSET,			CapturedRenderingState.INSTANCE.getCurrentRenderedItem			());
	}

	@Override
	public short getRenderedEntity(int i) {
		return (short) UNSAFE.getInt(address + i * IRIS_MESH_INFO_SIZE + RENDERED_ENTITY_OFFSET);
	}

	@Override
	public short getRenderedBlockEntity(int i) {
		return (short) UNSAFE.getInt(address + i * IRIS_MESH_INFO_SIZE + RENDERED_BLOCK_ENTITY_OFFSET);
	}

	@Override
	public short getRenderedItem(int i) {
		return (short) UNSAFE.getInt(address + i * IRIS_MESH_INFO_SIZE + RENDERED_ITEM_OFFSET);
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/iris/FullyBufferedMultiBufferSourceMixin.java
================================================
package com.github.argon4w.acceleratedrendering.compat.iris.mixins.iris;

import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.builders.IAcceleratableBufferSource;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.builders.VertexConsumerExtension;
import com.llamalad7.mixinextras.injector.ModifyReturnValue;
import com.mojang.blaze3d.vertex.VertexConsumer;
import lombok.experimental.ExtensionMethod;
import net.irisshaders.batchedentityrendering.impl.FullyBufferedMultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Pseudo;
import org.spongepowered.asm.mixin.injection.At;

@Pseudo
@ExtensionMethod(VertexConsumerExtension		.class)
@Mixin			(FullyBufferedMultiBufferSource	.class)
public abstract class FullyBufferedMultiBufferSourceMixin implements IAcceleratableBufferSource {

	@ModifyReturnValue(
			method	= "getBuffer",
			at		= @At("RETURN")
	)
	public VertexConsumer initAcceleration(VertexConsumer original, RenderType renderType) {
		return original
				.getHolder			()
				.initAcceleration	(renderType, getBoundAcceleratedBufferSource());
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/iris/HandRendererMixin.java
================================================
package com.github.argon4w.acceleratedrendering.compat.iris.mixins.iris;

import com.github.argon4w.acceleratedrendering.compat.iris.IrisCompatBuffers;
import com.github.argon4w.acceleratedrendering.compat.iris.IrisCompatBuffersProvider;
import com.github.argon4w.acceleratedrendering.core.CoreFeature;
import com.github.argon4w.acceleratedrendering.core.CoreStates;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.builders.BufferSourceExtension;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.layers.LayerDrawType;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import lombok.experimental.ExtensionMethod;
import net.irisshaders.batchedentityrendering.impl.FullyBufferedMultiBufferSource;
import net.irisshaders.iris.pathways.HandRenderer;
import net.irisshaders.iris.pipeline.WorldRenderingPipeline;
import net.minecraft.client.Camera;
import net.minecraft.client.renderer.GameRenderer;
import org.joml.Matrix4fc;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Pseudo;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Pseudo
@ExtensionMethod(BufferSourceExtension	.class)
@Mixin			(HandRenderer			.class)
public class HandRendererMixin {


	@Shadow
	@Final
	private FullyBufferedMultiBufferSource bufferSource;

	@Inject(
			method	= "<init>",
			at		= @At("TAIL")
	)
	public void bindAcceleratedBufferSourceHand(CallbackInfo ci) {
		bufferSource
				.getAcceleratable			()
				.bindAcceleratedBufferSource(IrisCompatBuffersProvider.HAND);
	}

	@Inject(
			method	= "renderSolid",
			at		= @At(
					value	= "INVOKE",
					target	= "Lnet/minecraft/client/renderer/ItemInHandRenderer;renderHandsWithItems(FLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource$BufferSource;Lnet/minecraft/client/player/LocalPlayer;I)V",
					shift	= At.Shift.BEFORE
			)
	)
	public void startRenderSolidFast(
			Matrix4fc				modelMatrix,
			float					tickDelta,
			Camera					camera,
			GameRenderer			gameRenderer,
			WorldRenderingPipeline	pipeline,
			CallbackInfo			ci
	) {
		CoreFeature.setRenderingHand();
	}

	@Inject(
			method	= "renderSolid",
			at		= @At(
					value	= "INVOKE",
					target	= "Lnet/minecraft/client/renderer/ItemInHandRenderer;renderHandsWithItems(FLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource$BufferSource;Lnet/minecraft/client/player/LocalPlayer;I)V",
					shift	= At.Shift.AFTER
			)
	)
	public void stopRenderSolidFast(
			Matrix4fc				modelMatrix,
			float					tickDelta,
			Camera					camera,
			GameRenderer			gameRenderer,
			WorldRenderingPipeline	pipeline,
			CallbackInfo			ci
	) {
		CoreFeature									.resetRenderingHand	();

		CoreStates									.recordBuffers		();
		IrisCompatBuffers.ENTITY_HAND				.prepareBuffers		();
		IrisCompatBuffers.BLOCK_HAND				.prepareBuffers		();
		IrisCompatBuffers.POS_HAND					.prepareBuffers		();
		IrisCompatBuffers.POS_COLOR_HAND			.prepareBuffers		();
		IrisCompatBuffers.POS_TEX_HAND				.prepareBuffers		();
		IrisCompatBuffers.POS_TEX_COLOR_HAND		.prepareBuffers		();
		IrisCompatBuffers.POS_COLOR_TEX_LIGHT_HAND	.prepareBuffers		();
		CoreStates									.restoreBuffers		();

		IrisCompatBuffers.ENTITY_HAND				.drawBuffers		(LayerDrawType.ALL);
		IrisCompatBuffers.BLOCK_HAND				.drawBuffers		(LayerDrawType.ALL);
		IrisCompatBuffers.POS_HAND					.drawBuffers		(LayerDrawType.ALL);
		IrisCompatBuffers.POS_COLOR_HAND			.drawBuffers		(LayerDrawType.ALL);
		IrisCompatBuffers.POS_TEX_HAND				.drawBuffers		(LayerDrawType.ALL);
		IrisCompatBuffers.POS_TEX_COLOR_HAND		.drawBuffers		(LayerDrawType.ALL);
		IrisCompatBuffers.POS_COLOR_TEX_LIGHT_HAND	.drawBuffers		(LayerDrawType.ALL);

		IrisCompatBuffers.ENTITY_HAND				.clearBuffers		();
		IrisCompatBuffers.BLOCK_HAND				.clearBuffers		();
		IrisCompatBuffers.POS_HAND					.clearBuffers		();
		IrisCompatBuffers.POS_COLOR_HAND			.clearBuffers		();
		IrisCompatBuffers.POS_TEX_HAND				.clearBuffers		();
		IrisCompatBuffers.POS_TEX_COLOR_HAND		.clearBuffers		();
		IrisCompatBuffers.POS_COLOR_TEX_LIGHT_HAND	.clearBuffers		();
	}

	@Inject(
			method	= "renderTranslucent",
			at		= @At(
					value	= "INVOKE",
					target	= "Lnet/minecraft/client/renderer/ItemInHandRenderer;renderHandsWithItems(FLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource$BufferSource;Lnet/minecraft/client/player/LocalPlayer;I)V",
					shift	= At.Shift.BEFORE
			)
	)
	public void startRenderTranslucentFast(
			Matrix4fc				modelMatrix,
			float					tickDelta,
			Camera					camera,
			GameRenderer			gameRenderer,
			WorldRenderingPipeline	pipeline,
			CallbackInfo			ci
	) {
		CoreFeature.setRenderingHand();
	}

	@Inject(
			method	= "renderTranslucent",
			at		= @At(
					value	= "INVOKE",
					target	= "Lnet/minecraft/client/renderer/ItemInHandRenderer;renderHandsWithItems(FLcom/mojang/blaze3d/vertex/PoseStack;Lnet/minecraft/client/renderer/MultiBufferSource$BufferSource;Lnet/minecraft/client/player/LocalPlayer;I)V",
					shift	= At.Shift.AFTER
			)
	)
	public void stopRenderTranslucentFast(
			Matrix4fc				modelMatrix,
			float					tickDelta,
			Camera					camera,
			GameRenderer			gameRenderer,
			WorldRenderingPipeline	pipeline,
			CallbackInfo			ci
	) {
		CoreFeature									.resetRenderingHand	();

		CoreStates									.recordBuffers		();
		IrisCompatBuffers.ENTITY_HAND				.prepareBuffers		();
		IrisCompatBuffers.BLOCK_HAND				.prepareBuffers		();
		IrisCompatBuffers.POS_HAND					.prepareBuffers		();
		IrisCompatBuffers.POS_COLOR_HAND			.prepareBuffers		();
		IrisCompatBuffers.POS_TEX_HAND				.prepareBuffers		();
		IrisCompatBuffers.POS_TEX_COLOR_HAND		.prepareBuffers		();
		IrisCompatBuffers.POS_COLOR_TEX_LIGHT_HAND	.prepareBuffers		();
		CoreStates									.restoreBuffers		();

		IrisCompatBuffers.ENTITY_HAND				.drawBuffers		(LayerDrawType.ALL);
		IrisCompatBuffers.BLOCK_HAND				.drawBuffers		(LayerDrawType.ALL);
		IrisCompatBuffers.POS_HAND					.drawBuffers		(LayerDrawType.ALL);
		IrisCompatBuffers.POS_COLOR_HAND			.drawBuffers		(LayerDrawType.ALL);
		IrisCompatBuffers.POS_TEX_HAND				.drawBuffers		(LayerDrawType.ALL);
		IrisCompatBuffers.POS_TEX_COLOR_HAND		.drawBuffers		(LayerDrawType.ALL);
		IrisCompatBuffers.POS_COLOR_TEX_LIGHT_HAND	.drawBuffers		(LayerDrawType.ALL);

		IrisCompatBuffers.ENTITY_HAND				.clearBuffers		();
		IrisCompatBuffers.BLOCK_HAND				.clearBuffers		();
		IrisCompatBuffers.POS_HAND					.clearBuffers		();
		IrisCompatBuffers.POS_COLOR_HAND			.clearBuffers		();
		IrisCompatBuffers.POS_TEX_HAND				.clearBuffers		();
		IrisCompatBuffers.POS_TEX_COLOR_HAND		.clearBuffers		();
		IrisCompatBuffers.POS_COLOR_TEX_LIGHT_HAND	.clearBuffers		();
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/iris/IrisVertexFormatsMixin.java
================================================
package com.github.argon4w.acceleratedrendering.compat.iris.mixins.iris;

import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import com.mojang.blaze3d.vertex.VertexFormat;
import com.mojang.blaze3d.vertex.VertexFormatElement;
import net.irisshaders.iris.vertices.IrisVertexFormats;
import org.objectweb.asm.Opcodes;
import org.spongepowered.asm.mixin.*;
import org.spongepowered.asm.mixin.injection.At;

@Pseudo
@Mixin(
		value		= IrisVertexFormats.class,
		priority	= Integer.MAX_VALUE
)
public class IrisVertexFormatsMixin {

	@Shadow @Final @Mutable	public static VertexFormat			ENTITY;
	@Shadow @Final @Mutable	public static VertexFormat			GLYPH;
	@Shadow @Final			public static VertexFormatElement	ENTITY_ID_ELEMENT;
	@Shadow @Final			public static VertexFormatElement	MID_TEXTURE_ELEMENT;
	@Shadow @Final			public static VertexFormatElement	TANGENT_ELEMENT;

	@WrapOperation(
			method	= "<clinit>",
			at		= @At(
					value	= "FIELD",
					target	= "Lnet/irisshaders/iris/vertices/IrisVertexFormats;ENTITY:Lcom/mojang/blaze3d/vertex/VertexFormat;",
					opcode	= Opcodes.PUTSTATIC
			)
	)
	private static void addPaddingForEntityFormat(VertexFormat value, Operation<Void> original) {
		original.call	(VertexFormat
				.builder()
				.add	("Position",		VertexFormatElement.POSITION)
				.add	("Color",			VertexFormatElement.COLOR)
				.add	("UV0",				VertexFormatElement.UV0)
				.add	("UV1",				VertexFormatElement.UV1)
				.add	("UV2",				VertexFormatElement.UV2)
				.add	("Normal",			VertexFormatElement.NORMAL)
				.padding(1)
				.add	("iris_Entity",		ENTITY_ID_ELEMENT)
				.padding(2)
				.add	("mc_midTexCoord",	MID_TEXTURE_ELEMENT)
				.add	("at_tangent",		TANGENT_ELEMENT)
				.build	()
		);
	}

	@WrapOperation(
			method	= "<clinit>",
			at		= @At(
					value	= "FIELD",
					target	= "Lnet/irisshaders/iris/vertices/IrisVertexFormats;GLYPH:Lcom/mojang/blaze3d/vertex/VertexFormat;",
					opcode	= Opcodes.PUTSTATIC
			)
	)
	private static void addPaddingForGlyphFormat(VertexFormat value, Operation<Void> original) {
		original.call	(VertexFormat
				.builder()
				.add	("Position",		VertexFormatElement.POSITION)
				.add	("Color",			VertexFormatElement.COLOR)
				.add	("UV0",				VertexFormatElement.UV0)
				.add	("UV2",				VertexFormatElement.UV2)
				.add	("Normal",			VertexFormatElement.NORMAL)
				.padding(1)
				.add	("iris_Entity",		ENTITY_ID_ELEMENT)
				.padding(2)
				.add	("mc_midTexCoord",	MID_TEXTURE_ELEMENT)
				.add	("at_tangent",		TANGENT_ELEMENT)
				.build	()
		);
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/iris/ModelToEntityVertexSerializerMixin.java
================================================
package com.github.argon4w.acceleratedrendering.compat.iris.mixins.iris;

import net.irisshaders.iris.vertices.sodium.ModelToEntityVertexSerializer;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Pseudo;
import org.spongepowered.asm.mixin.injection.Constant;
import org.spongepowered.asm.mixin.injection.ModifyConstant;

@Pseudo
@Mixin(ModelToEntityVertexSerializer.class)
public class ModelToEntityVertexSerializerMixin {

	@ModifyConstant(
			method		= "serialize",
			constant	= @Constant(longValue = 42L)
	)
	public long modifyMidU(long constant) {
		return 44L;
	}

	@ModifyConstant(
			method		= "serialize",
			constant	= @Constant(longValue = 46L)
	)
	public long modifyMidV(long constant) {
		return 48L;
	}

	@ModifyConstant(
			method		= "serialize",
			constant	= @Constant(longValue = 50L)
	)
	public long modifyTangent(long constant) {
		return 52L;
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/iris/ShadowRendererMixin.java
================================================
package com.github.argon4w.acceleratedrendering.compat.iris.mixins.iris;

import com.github.argon4w.acceleratedrendering.compat.iris.IrisCompatBuffers;
import com.github.argon4w.acceleratedrendering.compat.iris.IrisCompatBuffersProvider;
import com.github.argon4w.acceleratedrendering.core.CoreStates;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.builders.BufferSourceExtension;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.layers.LayerDrawType;
import lombok.experimental.ExtensionMethod;
import net.irisshaders.batchedentityrendering.impl.RenderBuffersExt;
import net.irisshaders.iris.mixin.LevelRendererAccessor;
import net.irisshaders.iris.pipeline.IrisRenderingPipeline;
import net.irisshaders.iris.shaderpack.programs.ProgramSource;
import net.irisshaders.iris.shaderpack.properties.PackDirectives;
import net.irisshaders.iris.shadows.ShadowCompositeRenderer;
import net.irisshaders.iris.shadows.ShadowRenderTargets;
import net.irisshaders.iris.shadows.ShadowRenderer;
import net.irisshaders.iris.uniforms.custom.CustomUniforms;
import net.minecraft.client.Camera;
import net.minecraft.client.renderer.RenderBuffers;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Pseudo;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Pseudo
@ExtensionMethod(BufferSourceExtension	.class)
@Mixin			(ShadowRenderer			.class)
public class ShadowRendererMixin {

	@Shadow @Final private RenderBuffers	buffers;
	@Shadow @Final private RenderBuffersExt	renderBuffersExt;

	@Inject(method = "<init>", at = @At("TAIL"))
	public void bindAcceleratedShadowBufferSources(
			IrisRenderingPipeline	pipeline,
			ProgramSource			shadow,
			PackDirectives			directives,
			ShadowRenderTargets		shadowRenderTargets,
			ShadowCompositeRenderer	compositeRenderer,
			CustomUniforms			customUniforms,
			boolean					separateHardwareSamplers,
			CallbackInfo			ci
	) {
		renderBuffersExt.beginLevelRendering();

		buffers.bufferSource			().getAcceleratable().bindAcceleratedBufferSource(IrisCompatBuffersProvider.SHADOW);
		buffers.crumblingBufferSource	().getAcceleratable().bindAcceleratedBufferSource(IrisCompatBuffersProvider.SHADOW);
		buffers.outlineBufferSource		().getAcceleratable().bindAcceleratedBufferSource(IrisCompatBuffersProvider.SHADOW);

		renderBuffersExt.endLevelRendering();
	}

	@Inject(
			method	= "renderShadows",
			at		= @At(
					value	= "INVOKE",
					target	= "Lnet/minecraft/client/renderer/MultiBufferSource$BufferSource;endBatch()V"
			)
	)
	public void endAllBatches(
			LevelRendererAccessor	levelRenderer,
			Camera					playerCamera,
			CallbackInfo			ci
	) {
		CoreStates								.recordBuffers	();
		IrisCompatBuffers.BLOCK_SHADOW			.prepareBuffers	();
		IrisCompatBuffers.ENTITY_SHADOW			.prepareBuffers	();
		IrisCompatBuffers.GLYPH_SHADOW			.prepareBuffers	();
		IrisCompatBuffers.POS_TEX_SHADOW		.prepareBuffers	();
		IrisCompatBuffers.POS_TEX_COLOR_SHADOW	.prepareBuffers	();
		CoreStates								.restoreBuffers	();

		IrisCompatBuffers.BLOCK_SHADOW			.drawBuffers	(LayerDrawType.ALL);
		IrisCompatBuffers.ENTITY_SHADOW			.drawBuffers	(LayerDrawType.ALL);
		IrisCompatBuffers.GLYPH_SHADOW			.drawBuffers	(LayerDrawType.ALL);
		IrisCompatBuffers.POS_TEX_SHADOW		.drawBuffers	(LayerDrawType.ALL);
		IrisCompatBuffers.POS_TEX_COLOR_SHADOW	.drawBuffers	(LayerDrawType.ALL);

		IrisCompatBuffers.BLOCK_SHADOW			.clearBuffers	();
		IrisCompatBuffers.ENTITY_SHADOW			.clearBuffers	();
		IrisCompatBuffers.GLYPH_SHADOW			.clearBuffers	();
		IrisCompatBuffers.POS_TEX_SHADOW		.clearBuffers	();
		IrisCompatBuffers.POS_TEX_COLOR_SHADOW	.clearBuffers	();
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/plugin/IrisCompatMixinPlugin.java
================================================
package com.github.argon4w.acceleratedrendering.compat.iris.mixins.plugin;

import com.github.argon4w.acceleratedrendering.compat.AbstractCompatMixinPlugin;

import java.util.List;

public class IrisCompatMixinPlugin extends AbstractCompatMixinPlugin {

	@Override
	protected List<String> getModIDs() {
		return List.of("iris");
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/vanilla/LevelRendererMixin.java
================================================
package com.github.argon4w.acceleratedrendering.compat.iris.mixins.vanilla;

import com.github.argon4w.acceleratedrendering.compat.iris.IrisCompatBuffers;
import com.github.argon4w.acceleratedrendering.core.CoreBuffers;
import com.github.argon4w.acceleratedrendering.core.CoreStates;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.layers.LayerDrawType;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import net.minecraft.client.Camera;
import net.minecraft.client.DeltaTracker;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.client.renderer.LevelRenderer;
import net.minecraft.client.renderer.LightTexture;
import net.minecraft.client.renderer.MultiBufferSource;
import org.joml.Matrix4f;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin(
		value		= LevelRenderer.class,
		priority	= 999
)
public class LevelRendererMixin {

	@Inject(
			method	= "renderLevel",
			at		= @At(
					value	= "INVOKE",
					target	= "Lnet/minecraft/client/renderer/MultiBufferSource$BufferSource;endBatch()V",
					ordinal = 1
			)
	)
	public void drawIrisAllCoreBuffers(
			DeltaTracker	pDeltaTracker,
			boolean			pRenderBlockOutline,
			Camera			pCamera,
			GameRenderer	pGameRenderer,
			LightTexture	pLightTexture,
			Matrix4f		pFrustumMatrix,
			Matrix4f		pProjectionMatrix,
			CallbackInfo	ci
	) {
		CoreStates						.recordBuffers	();
		CoreBuffers.ENTITY				.prepareBuffers	();
		CoreBuffers.BLOCK				.prepareBuffers	();
		CoreBuffers.POS					.prepareBuffers	();
		CoreBuffers.POS_COLOR			.prepareBuffers	();
		CoreBuffers.POS_TEX				.prepareBuffers	();
		CoreBuffers.POS_TEX_COLOR		.prepareBuffers	();
		CoreBuffers.POS_COLOR_TEX_LIGHT	.prepareBuffers	();
		CoreStates						.restoreBuffers	();

		CoreBuffers.ENTITY				.drawBuffers	(LayerDrawType.ALL);
		CoreBuffers.BLOCK				.drawBuffers	(LayerDrawType.ALL);
		CoreBuffers.POS					.drawBuffers	(LayerDrawType.ALL);
		CoreBuffers.POS_COLOR			.drawBuffers	(LayerDrawType.ALL);
		CoreBuffers.POS_TEX				.drawBuffers	(LayerDrawType.ALL);
		CoreBuffers.POS_TEX_COLOR		.drawBuffers	(LayerDrawType.ALL);
		CoreBuffers.POS_COLOR_TEX_LIGHT	.drawBuffers	(LayerDrawType.ALL);

		CoreBuffers.ENTITY				.clearBuffers	();
		CoreBuffers.BLOCK				.clearBuffers	();
		CoreBuffers.POS					.clearBuffers	();
		CoreBuffers.POS_COLOR			.clearBuffers	();
		CoreBuffers.POS_TEX				.clearBuffers	();
		CoreBuffers.POS_TEX_COLOR		.clearBuffers	();
		CoreBuffers.POS_COLOR_TEX_LIGHT	.clearBuffers	();
	}

	@Inject(
			method	= "renderLevel",
			at		= @At(
					value	= "CONSTANT",
					args	= "stringValue=translucent",
					ordinal	= 1
			)
	)
	public void drawIrisOpaqueCoreBuffers(
			DeltaTracker	pDeltaTracker,
			boolean			pRenderBlockOutline,
			Camera			pCamera,
			GameRenderer	pGameRenderer,
			LightTexture	pLightTexture,
			Matrix4f		pFrustumMatrix,
			Matrix4f		pProjectionMatrix,
			CallbackInfo	ci
	) {
		CoreStates						.recordBuffers	();
		CoreBuffers.ENTITY				.prepareBuffers	();
		CoreBuffers.BLOCK				.prepareBuffers	();
		CoreBuffers.POS					.prepareBuffers	();
		CoreBuffers.POS_COLOR			.prepareBuffers	();
		CoreBuffers.POS_TEX				.prepareBuffers	();
		CoreBuffers.POS_TEX_COLOR		.prepareBuffers	();
		CoreBuffers.POS_COLOR_TEX_LIGHT	.prepareBuffers	();
		CoreStates						.restoreBuffers	();

		CoreBuffers.ENTITY				.drawBuffers	(LayerDrawType.OPAQUE);
		CoreBuffers.BLOCK				.drawBuffers	(LayerDrawType.OPAQUE);
		CoreBuffers.POS					.drawBuffers	(LayerDrawType.OPAQUE);
		CoreBuffers.POS_COLOR			.drawBuffers	(LayerDrawType.OPAQUE);
		CoreBuffers.POS_TEX				.drawBuffers	(LayerDrawType.OPAQUE);
		CoreBuffers.POS_TEX_COLOR		.drawBuffers	(LayerDrawType.OPAQUE);
		CoreBuffers.POS_COLOR_TEX_LIGHT	.drawBuffers	(LayerDrawType.OPAQUE);
	}

	@Inject(
			method	= "renderLevel",
			at		= @At(
					value	= "CONSTANT",
					args	= "stringValue=translucent",
					ordinal	= 1,
					shift	= At.Shift.AFTER
			)
	)
	public void drawIrisTranslucentCoreBuffers(
			DeltaTracker	pDeltaTracker,
			boolean			pRenderBlockOutline,
			Camera			pCamera,
			GameRenderer	pGameRenderer,
			LightTexture	pLightTexture,
			Matrix4f		pFrustumMatrix,
			Matrix4f		pProjectionMatrix,
			CallbackInfo	ci
	) {
		CoreBuffers.ENTITY				.drawBuffers	(LayerDrawType.TRANSLUCENT);
		CoreBuffers.BLOCK				.drawBuffers	(LayerDrawType.TRANSLUCENT);
		CoreBuffers.POS					.drawBuffers	(LayerDrawType.TRANSLUCENT);
		CoreBuffers.POS_COLOR			.drawBuffers	(LayerDrawType.TRANSLUCENT);
		CoreBuffers.POS_TEX				.drawBuffers	(LayerDrawType.TRANSLUCENT);
		CoreBuffers.POS_TEX_COLOR		.drawBuffers	(LayerDrawType.TRANSLUCENT);
		CoreBuffers.POS_COLOR_TEX_LIGHT	.drawBuffers	(LayerDrawType.TRANSLUCENT);

		CoreBuffers.ENTITY				.clearBuffers	();
		CoreBuffers.BLOCK				.clearBuffers	();
		CoreBuffers.POS					.clearBuffers	();
		CoreBuffers.POS_COLOR			.clearBuffers	();
		CoreBuffers.POS_TEX				.clearBuffers	();
		CoreBuffers.POS_TEX_COLOR		.clearBuffers	();
		CoreBuffers.POS_COLOR_TEX_LIGHT	.clearBuffers	();
	}

	@WrapOperation(
			method	= "renderLevel",
			at		= @At(
					value	= "INVOKE",
					target	= "Lnet/minecraft/client/renderer/MultiBufferSource$BufferSource;endLastBatch()V"
			)
	)
	public void preventDrawVanillaCoreBuffers(MultiBufferSource.BufferSource instance, Operation<Void> original) {
		instance.endLastBatch();
	}

	@Inject(
			method	= "close",
			at		= @At("TAIL")
	)
	public void deleteIrisBuffers(CallbackInfo ci) {
		IrisCompatBuffers.BLOCK_SHADOW				.delete();
		IrisCompatBuffers.ENTITY_SHADOW				.delete();
		IrisCompatBuffers.GLYPH_SHADOW				.delete();
		IrisCompatBuffers.POS_TEX_SHADOW			.delete();
		IrisCompatBuffers.POS_TEX_COLOR_SHADOW		.delete();

		IrisCompatBuffers.ENTITY_HAND				.delete();
		IrisCompatBuffers.BLOCK_HAND				.delete();
		IrisCompatBuffers.POS_HAND					.delete();
		IrisCompatBuffers.POS_COLOR_HAND			.delete();
		IrisCompatBuffers.POS_TEX_HAND				.delete();
		IrisCompatBuffers.POS_TEX_COLOR_HAND		.delete();
		IrisCompatBuffers.POS_COLOR_TEX_LIGHT_HAND	.delete();
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/programs/IrisPrograms.java
================================================
package com.github.argon4w.acceleratedrendering.compat.iris.programs;

import com.github.argon4w.acceleratedrendering.compat.iris.programs.culling.IrisCullingProgramSelector;
import com.github.argon4w.acceleratedrendering.compat.iris.programs.processing.IrisPolygonProcessor;
import com.github.argon4w.acceleratedrendering.core.backends.programs.BarrierFlags;
import com.github.argon4w.acceleratedrendering.core.programs.LoadComputeShaderEvent;
import com.github.argon4w.acceleratedrendering.core.programs.culling.LoadCullingProgramSelectorEvent;
import com.github.argon4w.acceleratedrendering.core.programs.processing.LoadPolygonProcessorEvent;
import com.github.argon4w.acceleratedrendering.core.utils.ResourceLocationUtils;
import net.irisshaders.iris.vertices.IrisVertexFormats;
import net.minecraft.resources.ResourceLocation;
import net.neoforged.bus.api.SubscribeEvent;

public class IrisPrograms {

	public static final ResourceLocation IRIS_BLOCK_VERTEX_TRANSFORM_KEY		= ResourceLocationUtils.create("compat_block_vertex_transform_iris");
	public static final ResourceLocation IRIS_ENTITY_VERTEX_TRANSFORM_KEY		= ResourceLocationUtils.create("compat_entity_vertex_transform_iris");
	public static final ResourceLocation IRIS_GLYPH_VERTEX_TRANSFORM_KEY		= ResourceLocationUtils.create("compat_glyph_vertex_transform_iris");
	public static final ResourceLocation IRIS_BLOCK_QUAD_CULLING_KEY			= ResourceLocationUtils.create("compat_block_quad_cull_iris");
	public static final ResourceLocation IRIS_BLOCK_TRIANGLE_CULLING_KEY		= ResourceLocationUtils.create("compat_block_triangle_cull_iris");
	public static final ResourceLocation IRIS_ENTITY_QUAD_CULLING_KEY			= ResourceLocationUtils.create("compat_entity_quad_cull_iris");
	public static final ResourceLocation IRIS_ENTITY_TRIANGLE_CULLING_KEY		= ResourceLocationUtils.create("compat_entity_triangle_cull_iris");
	public static final ResourceLocation IRIS_BLOCK_QUAD_PROCESSING_KEY			= ResourceLocationUtils.create("compat_block_quad_processing_iris");
	public static final ResourceLocation IRIS_BLOCK_TRIANGLE_PROCESSING_KEY		= ResourceLocationUtils.create("compat_block_triangle_processing_iris");
	public static final ResourceLocation IRIS_ENTITY_QUAD_PROCESSING_KEY		= ResourceLocationUtils.create("compat_entity_quad_processing_iris");
	public static final ResourceLocation IRIS_ENTITY_TRIANGLE_PROCESSING_KEY	= ResourceLocationUtils.create("compat_entity_triangle_processing_iris");
	public static final ResourceLocation IRIS_GLYPH_QUAD_PROCESSING_KEY			= ResourceLocationUtils.create("compat_glyph_quad_processing_iris");
	public static final ResourceLocation IRIS_GLYPH_TRIANGLE_PROCESSING_KEY		= ResourceLocationUtils.create("compat_glyph_triangle_processing_iris");
	public static final ResourceLocation IRIS_BLOCK_MESH_UPLOADING_KEY			= ResourceLocationUtils.create("compat_block_mesh_uploading_iris");
	public static final ResourceLocation IRIS_ENTITY_MESH_UPLOADING_KEY			= ResourceLocationUtils.create("compat_entity_mesh_uploading_iris");
	public static final ResourceLocation IRIS_GLYPH_MESH_UPLOADING_KEY			= ResourceLocationUtils.create("compat_glyph_mesh_uploading_iris");

	@SubscribeEvent
	public static void onLoadComputeShaders(LoadComputeShaderEvent event) {
		event.loadComputeShader(
				IRIS_BLOCK_VERTEX_TRANSFORM_KEY,
				ResourceLocationUtils	.create("shaders/compat/transform/iris_block_vertex_transform_shader.compute"),
				BarrierFlags			.SHADER_STORAGE
		);

		event.loadComputeShader(
				IRIS_ENTITY_VERTEX_TRANSFORM_KEY,
				ResourceLocationUtils	.create("shaders/compat/transform/iris_entity_vertex_transform_shader.compute"),
				BarrierFlags			.SHADER_STORAGE
		);

		event.loadComputeShader(
				IRIS_GLYPH_VERTEX_TRANSFORM_KEY,
				ResourceLocationUtils	.create("shaders/compat/transform/iris_glyph_vertex_transform_shader.compute"),
				BarrierFlags			.SHADER_STORAGE
		);

		event.loadComputeShader(
				IRIS_BLOCK_QUAD_CULLING_KEY,
				ResourceLocationUtils	.create("shaders/compat/culling/iris_block_quad_culling_shader.compute"),
				BarrierFlags			.SHADER_STORAGE,
				BarrierFlags			.ATOMIC_COUNTER
		);

		event.loadComputeShader(
				IRIS_BLOCK_TRIANGLE_CULLING_KEY,
				ResourceLocationUtils	.create("shaders/compat/culling/iris_block_triangle_culling_shader.compute"),
				BarrierFlags			.SHADER_STORAGE,
				BarrierFlags			.ATOMIC_COUNTER
		);

		event.loadComputeShader(
				IRIS_ENTITY_QUAD_CULLING_KEY,
				ResourceLocationUtils	.create("shaders/compat/culling/iris_entity_quad_culling_shader.compute"),
				BarrierFlags			.SHADER_STORAGE,
				BarrierFlags			.ATOMIC_COUNTER
		);

		event.loadComputeShader(
				IRIS_ENTITY_TRIANGLE_CULLING_KEY,
				ResourceLocationUtils	.create("shaders/compat/culling/iris_entity_triangle_culling_shader.compute"),
				BarrierFlags			.SHADER_STORAGE,
				BarrierFlags			.ATOMIC_COUNTER
		);

		event.loadComputeShader(
				IRIS_BLOCK_QUAD_PROCESSING_KEY,
				ResourceLocationUtils	.create("shaders/compat/processing/iris_block_quad_processing_shader.compute"),
				BarrierFlags			.SHADER_STORAGE
		);

		event.loadComputeShader(
				IRIS_BLOCK_TRIANGLE_PROCESSING_KEY,
				ResourceLocationUtils	.create("shaders/compat/processing/iris_block_triangle_processing_shader.compute"),
				BarrierFlags			.SHADER_STORAGE
		);

		event.loadComputeShader(
				IRIS_ENTITY_QUAD_PROCESSING_KEY,
				ResourceLocationUtils	.create("shaders/compat/processing/iris_entity_quad_processing_shader.compute"),
				BarrierFlags			.SHADER_STORAGE
		);

		event.loadComputeShader(
				IRIS_ENTITY_TRIANGLE_PROCESSING_KEY,
				ResourceLocationUtils	.create("shaders/compat/processing/iris_entity_triangle_processing_shader.compute"),
				BarrierFlags			.SHADER_STORAGE
		);

		event.loadComputeShader(
				IRIS_GLYPH_QUAD_PROCESSING_KEY,
				ResourceLocationUtils	.create("shaders/compat/processing/iris_glyph_quad_processing_shader.compute"),
				BarrierFlags			.SHADER_STORAGE
		);

		event.loadComputeShader(
				IRIS_GLYPH_TRIANGLE_PROCESSING_KEY,
				ResourceLocationUtils	.create("shaders/compat/processing/iris_glyph_triangle_processing_shader.compute"),
				BarrierFlags			.SHADER_STORAGE
		);

		event.loadComputeShader(
				IRIS_BLOCK_MESH_UPLOADING_KEY,
				ResourceLocationUtils	.create("shaders/compat/uploading/iris_block_mesh_uploading_shader.compute"),
				BarrierFlags			.SHADER_STORAGE
		);

		event.loadComputeShader(
				IRIS_ENTITY_MESH_UPLOADING_KEY,
				ResourceLocationUtils	.create("shaders/compat/uploading/iris_entity_mesh_uploading_shader.compute"),
				BarrierFlags			.SHADER_STORAGE
		);

		event.loadComputeShader(
				IRIS_GLYPH_MESH_UPLOADING_KEY,
				ResourceLocationUtils	.create("shaders/compat/uploading/iris_glyph_mesh_uploading_shader.compute"),
				BarrierFlags			.SHADER_STORAGE
		);
	}

	@SubscribeEvent
	public static void onLoadCullingPrograms(LoadCullingProgramSelectorEvent event) {
		event.loadFor(IrisVertexFormats.TERRAIN, parent -> new IrisCullingProgramSelector(
				parent,
				IRIS_BLOCK_QUAD_CULLING_KEY,
				IRIS_BLOCK_TRIANGLE_CULLING_KEY
		));

		event.loadFor(IrisVertexFormats.ENTITY, parent -> new IrisCullingProgramSelector(
				parent,
				IRIS_ENTITY_QUAD_CULLING_KEY,
				IRIS_ENTITY_TRIANGLE_CULLING_KEY
		));
	}

	@SubscribeEvent
	public static void onLoadPolygonProcessors(LoadPolygonProcessorEvent event) {
		event.loadFor(IrisVertexFormats.TERRAIN, parent -> new IrisPolygonProcessor(
				parent,
				IRIS_BLOCK_QUAD_PROCESSING_KEY,
				IRIS_BLOCK_TRIANGLE_PROCESSING_KEY
		));

		event.loadFor(IrisVertexFormats.ENTITY, parent -> new IrisPolygonProcessor(
				parent,
				IRIS_ENTITY_QUAD_PROCESSING_KEY,
				IRIS_ENTITY_TRIANGLE_PROCESSING_KEY
		));

		event.loadFor(IrisVertexFormats.GLYPH, parent -> new IrisPolygonProcessor(
				parent,
				IRIS_GLYPH_QUAD_PROCESSING_KEY,
				IRIS_GLYPH_TRIANGLE_PROCESSING_KEY
		));
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/programs/culling/IrisCullingProgramDispatcher.java
================================================
package com.github.argon4w.acceleratedrendering.compat.iris.programs.culling;

import com.github.argon4w.acceleratedrendering.compat.iris.IrisCompatFeature;
import com.github.argon4w.acceleratedrendering.core.backends.programs.ComputeProgram;
import com.github.argon4w.acceleratedrendering.core.backends.programs.Uniform;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.builders.AcceleratedBufferBuilder;
import com.github.argon4w.acceleratedrendering.core.programs.ComputeShaderProgramLoader;
import com.github.argon4w.acceleratedrendering.core.programs.culling.ICullingProgramDispatcher;
import com.github.argon4w.acceleratedrendering.features.culling.OrientationCullingFeature;
import com.mojang.blaze3d.systems.RenderSystem;
import com.mojang.blaze3d.vertex.VertexFormat;
import net.irisshaders.iris.shadows.ShadowRenderer;
import net.irisshaders.iris.shadows.ShadowRenderingState;
import net.minecraft.resources.ResourceLocation;

public class IrisCullingProgramDispatcher implements ICullingProgramDispatcher {

	private static	final int				GROUP_SIZE 			= 128;
	private static	final int				DISPATCH_COUNT_Y_Z	= 1;

	private			final VertexFormat.Mode	mode;
	private			final ComputeProgram	program;
	private			final Uniform			viewMatrixUniform;
	private			final Uniform			projectMatrixUniform;
	private			final Uniform			polygonCountUniform;
	private			final Uniform			vertexOffsetUniform;
	private			final Uniform			varyingOffsetUniform;

	public IrisCullingProgramDispatcher(VertexFormat.Mode mode, ResourceLocation key) {
		this.mode					= mode;
		this.program				= ComputeShaderProgramLoader.getProgram(key);
		this.viewMatrixUniform		= this.program				.getUniform("viewMatrix");
		this.projectMatrixUniform	= this.program				.getUniform("projectMatrix");
		this.polygonCountUniform	= this.program				.getUniform("polygonCount");
		this.vertexOffsetUniform	= this.program				.getUniform("vertexOffset");
		this.varyingOffsetUniform	= this.program				.getUniform("varyingOffset");
	}

	@Override
	public int dispatch(AcceleratedBufferBuilder builder) {
		var shadowState		= ShadowRenderingState	.areShadowsCurrentlyBeingRendered	();
		var vertexCount		= builder				.getTotalVertexCount				();
		var polygonCount	= vertexCount / mode	.primitiveLength;

		viewMatrixUniform	.uploadMatrix4f		(shadowState ? ShadowRenderer.MODELVIEW		: RenderSystem.getModelViewMatrix	());
		projectMatrixUniform.uploadMatrix4f		(shadowState ? ShadowRenderer.PROJECTION	: RenderSystem.getProjectionMatrix	());

		polygonCountUniform	.uploadUnsignedInt	(polygonCount);
		vertexOffsetUniform	.uploadUnsignedInt	((int) (builder.getVertexBuffer	().getOffset() / builder.getVertexSize	()));
		varyingOffsetUniform.uploadUnsignedInt	((int) (builder.getVaryingBuffer().getOffset() / builder.getVaryingSize	()));

		program.useProgram	();
		program.dispatch	(
				(polygonCount + GROUP_SIZE - 1) / GROUP_SIZE,
				DISPATCH_COUNT_Y_Z,
				DISPATCH_COUNT_Y_Z
		);

		return program.getBarrierFlags();
	}

	@Override
	public boolean shouldCull() {
		return 			OrientationCullingFeature.shouldCull()
				&& (	IrisCompatFeature.isShadowCullingEnabled() || !ShadowRenderingState.areShadowsCurrentlyBeingRendered());
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/programs/culling/IrisCullingProgramSelector.java
================================================
package com.github.argon4w.acceleratedrendering.compat.iris.programs.culling;

import com.github.argon4w.acceleratedrendering.compat.iris.IrisCompatFeature;
import com.github.argon4w.acceleratedrendering.core.programs.culling.ICullingProgramDispatcher;
import com.github.argon4w.acceleratedrendering.core.programs.culling.ICullingProgramSelector;
import com.github.argon4w.acceleratedrendering.core.utils.RenderTypeUtils;
import com.github.argon4w.acceleratedrendering.features.culling.OrientationCullingFeature;
import com.mojang.blaze3d.vertex.VertexFormat;
import net.irisshaders.iris.shadows.ShadowRenderingState;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.resources.ResourceLocation;

public class IrisCullingProgramSelector implements ICullingProgramSelector {

	private			final ICullingProgramSelector	parent;
	private			final ICullingProgramDispatcher	quadDispatcher;
	private			final ICullingProgramDispatcher	triangleDispatcher;

	public IrisCullingProgramSelector(
			ICullingProgramSelector	parent,
			ResourceLocation		quadProgramKey,
			ResourceLocation		triangleProgramKey
	) {
		this.parent				= parent;
		this.quadDispatcher		= new IrisCullingProgramDispatcher(VertexFormat.Mode.QUADS,		quadProgramKey);
		this.triangleDispatcher	= new IrisCullingProgramDispatcher(VertexFormat.Mode.TRIANGLES,	triangleProgramKey);
	}

	@Override
	public ICullingProgramDispatcher select(RenderType renderType) {
		if (			IrisCompatFeature			.isEnabled					()
				&&		IrisCompatFeature			.isIrisCompatCullingEnabled	()
				&&	(	IrisCompatFeature			.isShadowCullingEnabled		()	|| !	ShadowRenderingState.areShadowsCurrentlyBeingRendered())
				&&		OrientationCullingFeature	.isEnabled					()
				&&	(	OrientationCullingFeature	.shouldIgnoreCullState		()	|| 		RenderTypeUtils		.isCulled(renderType))
		) {
			return switch (renderType.mode) {
				case QUADS		-> quadDispatcher;
				case TRIANGLES	-> triangleDispatcher;
				default			-> parent.select(renderType);
			};
		}

		return parent.select(renderType);
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/programs/processing/IrisPolygonProcessor.java
================================================
package com.github.argon4w.acceleratedrendering.compat.iris.programs.processing;

import com.github.argon4w.acceleratedrendering.compat.iris.IrisCompatFeature;
import com.github.argon4w.acceleratedrendering.core.programs.dispatchers.FixedPolygonProgramDispatcher;
import com.github.argon4w.acceleratedrendering.core.programs.dispatchers.IPolygonProgramDispatcher;
import com.github.argon4w.acceleratedrendering.core.programs.processing.IPolygonProcessor;
import com.mojang.blaze3d.vertex.VertexFormat;
import net.minecraft.resources.ResourceLocation;

public class IrisPolygonProcessor implements IPolygonProcessor {

	private final IPolygonProcessor			parent;
	private final IPolygonProgramDispatcher	quadDispatcher;
	private final IPolygonProgramDispatcher	triangleDispatcher;

	public IrisPolygonProcessor(
			IPolygonProcessor	parent,
			ResourceLocation	quadProgramKey,
			ResourceLocation	triangleProgramKey
	) {
		this.parent				= parent;
		this.quadDispatcher		= new FixedPolygonProgramDispatcher	(VertexFormat.Mode.QUADS,		quadProgramKey);
		this.triangleDispatcher	= new FixedPolygonProgramDispatcher	(VertexFormat.Mode.TRIANGLES,	triangleProgramKey);
	}

	@Override
	public IPolygonProgramDispatcher select(VertexFormat.Mode mode) {
		if (		IrisCompatFeature	.isEnabled					()
				&&	IrisCompatFeature	.isPolygonProcessingEnabled	()
		) {
			return switch (mode) {
				case QUADS		-> quadDispatcher;
				case TRIANGLES	-> triangleDispatcher;
				default			-> parent.select(mode);
			};
		}

		return parent.select(mode);
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/configs/FeatureConfig.java
================================================
package com.github.argon4w.acceleratedrendering.configs;

import com.github.argon4w.acceleratedrendering.core.backends.states.buffers.BlockBufferBindingStateType;
import com.github.argon4w.acceleratedrendering.core.backends.states.buffers.cache.BlockBufferBindingCacheType;
import com.github.argon4w.acceleratedrendering.core.backends.states.scissors.ScissorBindingStateType;
import com.github.argon4w.acceleratedrendering.core.backends.states.viewports.ViewportBindingStateType;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.layers.storage.LayerStorageType;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.pools.meshes.MeshInfoCacheType;
import com.github.argon4w.acceleratedrendering.core.meshes.MeshType;
import com.github.argon4w.acceleratedrendering.core.meshes.data.cache.MeshDataCacheType;
import com.github.argon4w.acceleratedrendering.features.filter.FilterType;
import it.unimi.dsi.fastutil.objects.ObjectArrayList;
import net.neoforged.neoforge.common.ModConfigSpec;
import org.apache.commons.lang3.tuple.Pair;

import java.util.List;

public class FeatureConfig {

	public static	final	FeatureConfig											CONFIG;
	public static	final	ModConfigSpec											SPEC;

	public			final	ModConfigSpec.IntValue									corePooledRingBufferSize;
	public			final	ModConfigSpec.IntValue									corePooledBatchingSize;
	public			final	ModConfigSpec.IntValue									coreCachedImageSize;
	public			final	ModConfigSpec.IntValue									coreDynamicUVResolution;
	public			final	ModConfigSpec.ConfigValue<FeatureStatus>				coreDebugContextEnabled;
	public			final	ModConfigSpec.ConfigValue<FeatureStatus>				coreForceTranslucentAcceleration;
	public			final	ModConfigSpec.ConfigValue<FeatureStatus>				coreCacheIdenticalPose;
	public			final	ModConfigSpec.ConfigValue<MeshInfoCacheType>			coreMeshInfoCacheType;
	public			final	ModConfigSpec.ConfigValue<LayerStorageType>				coreLayerStorageType;
	public			final	ModConfigSpec.ConfigValue<MeshDataCacheType>				coreMeshMergeType;
	public			final	ModConfigSpec.ConfigValue<FeatureStatus>				coreUploadMeshImmediately;
	public			final	ModConfigSpec.ConfigValue<FeatureStatus>				coreCacheDynamicRenderType;
	public			final	ModConfigSpec.ConfigValue<ViewportBindingStateType>		coreViewportBindingType;
	public			final	ModConfigSpec.ConfigValue<ScissorBindingStateType>		coreScissorBindingType;

	public			final	ModConfigSpec.ConfigValue<FeatureStatus>				restoringFeatureStatus;
	public			final	ModConfigSpec.ConfigValue<BlockBufferBindingCacheType>	restoringBindingCacheType;
	public			final	ModConfigSpec.ConfigValue<BlockBufferBindingStateType>	restoringShaderStorageType;
	public			final	ModConfigSpec.ConfigValue<BlockBufferBindingStateType>	restoringAtomicCounterType;
	public			final	ModConfigSpec.IntValue									restoringShaderStorageRange;
	public			final	ModConfigSpec.IntValue									restoringAtomicCounterRange;

	public			final	ModConfigSpec.ConfigValue<FeatureStatus>				acceleratedEntityRenderingFeatureStatus;
	public			final	ModConfigSpec.ConfigValue<PipelineSetting>				acceleratedEntityRenderingDefaultPipeline;
	public			final	ModConfigSpec.ConfigValue<MeshType>						acceleratedEntityRenderingMeshType;
	public			final	ModConfigSpec.ConfigValue<FeatureStatus>				acceleratedEntityRenderingGuiAcceleration;

	public			final	ModConfigSpec.ConfigValue<FeatureStatus>				acceleratedTextRenderingFeatureStatus;
	public			final	ModConfigSpec.ConfigValue<PipelineSetting>				acceleratedTextRenderingDefaultPipeline;
	public			final	ModConfigSpec.ConfigValue<MeshType>						acceleratedTextRenderingMeshType;

	public			final	ModConfigSpec.ConfigValue<FeatureStatus>				acceleratedItemRenderingFeatureStatus;
	public			final	ModConfigSpec.ConfigValue<FeatureStatus>				acceleratedItemRenderingBakeMeshForQuads;
	public			final	ModConfigSpec.ConfigValue<PipelineSetting>				acceleratedItemRenderingDefaultPipeline;
	public			final	ModConfigSpec.ConfigValue<MeshType>						acceleratedItemRenderingMeshType;
	public			final	ModConfigSpec.ConfigValue<FeatureStatus>				acceleratedItemRenderingHandAcceleration;
	public			final	ModConfigSpec.ConfigValue<FeatureStatus>				acceleratedItemRenderingGuiAcceleration;
	public 			final	ModConfigSpec.ConfigValue<FeatureStatus>				acceleratedItemRenderingGuiItemBatching;
	public			final	ModConfigSpec.ConfigValue<FeatureStatus>				acceleratedItemRenderingMergeGuiItemBatches;

	public			final	ModConfigSpec.ConfigValue<FeatureStatus>				orientationCullingFeatureStatus;
	public			final	ModConfigSpec.ConfigValue<FeatureStatus>				orientationCullingDefaultCulling;
	public			final	ModConfigSpec.ConfigValue<FeatureStatus>				orientationCullingIgnoreCullState;

	public			final	ModConfigSpec.ConfigValue<FeatureStatus>				filterFeatureStatus;
	public			final	ModConfigSpec.ConfigValue<FeatureStatus>				filterMenuFilter;
	public			final	ModConfigSpec.ConfigValue<FeatureStatus>				filterEntityFilter;
	public			final	ModConfigSpec.ConfigValue<FeatureStatus>				filterBlockEntityFilter;
	public			final	ModConfigSpec.ConfigValue<FeatureStatus>				filterItemFilter;
	public			final	ModConfigSpec.ConfigValue<FeatureStatus>				filterStageFilter;
	public			final	ModConfigSpec.ConfigValue<FilterType>					filterMenuFilterType;
	public			final	ModConfigSpec.ConfigValue<FilterType>					filterEntityFilterType;
	public			final	ModConfigSpec.ConfigValue<FilterType>					filterBlockEntityFilterType;
	public			final	ModConfigSpec.ConfigValue<FilterType>					filterItemFilterType;
	public			final	ModConfigSpec.ConfigValue<FilterType>					filterStageFilterType;
	public			final	ModConfigSpec.ConfigValue<List<? extends String>>		filterMenuFilterValues;
	public			final	ModConfigSpec.ConfigValue<List<? extends String>>		filterEntityFilterValues;
	public			final	ModConfigSpec.ConfigValue<List<? extends String>>		filterBlockEntityFilterValues;
	public			final	ModConfigSpec.ConfigValue<List<? extends String>>		filterItemFilterValues;
	public			final	ModConfigSpec.ConfigValue<List<? extends String>>		filterStageFilterValues;

	public			final	ModConfigSpec.ConfigValue<FeatureStatus>				irisCompatFeatureStatus;
	public			final	ModConfigSpec.ConfigValue<FeatureStatus>				irisCompatOrientationCullingCompat;
	public			final	ModConfigSpec.ConfigValue<FeatureStatus>				irisCompatShadowCulling;
	public			final	ModConfigSpec.ConfigValue<FeatureStatus>				irisCompatPolygonProcessing;

	public			final	ModConfigSpec.ConfigValue<FeatureStatus>				curiosCompatFeatureStatus;
	public			final	ModConfigSpec.ConfigValue<FeatureStatus>				curiosCompatLayerAcceleration;
	public			final	ModConfigSpec.ConfigValue<FeatureStatus>				curiosItemFilter;
	public			final	ModConfigSpec.ConfigValue<FilterType>					curiosItemFilterType;
	public			final	ModConfigSpec.ConfigValue<List<? extends String>>		curiosItemFilterValues;

	static {
		Pair<FeatureConfig, ModConfigSpec> pair	= new ModConfigSpec.Builder()	.configure	(FeatureConfig::new);
		CONFIG									= pair							.getLeft	();
		SPEC									= pair							.getRight	();
	}

	private FeatureConfig(ModConfigSpec.Builder builder) {
		builder
				.comment				("Core Settings")
				.comment				("Core Settings allows you to change setting that are related to all rendering features.")
				.translation			("acceleratedrendering.configuration.core_settings")
				.push					("core_settings");

		corePooledRingBufferSize						= builder
				.gameRestart			()
				.comment				("Count of buffer sets that holds data for in-flight frame rendering.")
				.comment				("Changing this value may affects your FPS. Smaller value means less in-flight frames, while larger values means more in-flight frames. More in-flight frames means more FPS but more VRAM.")
				.translation			("acceleratedrendering.configuration.core_settings.pooled_ring_buffer_size")
				.defineInRange			("pooled_ring_buffer_size",				8,	1,	Integer.MAX_VALUE);

		corePooledBatchingSize							= builder
				.gameRestart			()
				.comment				("Count of batches of RenderTypes that is allowed in a draw call.")
				.comment				("Changing this value may affects your FPS. Smaller value means less batches allowed in a draw call, while larger values means more batches. More batches means more FPS but more VRAM and more CPU pressure on handling RenderTypes.")
				.translation			("acceleratedrendering.configuration.core_settings.pooled_batching_size")
				.defineInRange			("pooled_batching_size",				32,	1,	Integer.MAX_VALUE);

		coreCachedImageSize								= builder
				.comment				("Count of images that cached for static mesh culling.")
				.comment				("Changing this value may affects your FPS. Smaller value means less images allowed to be cached, while larger means more cached images. More cached images means more FPS but more RAM pressure.")
				.translation			("acceleratedrendering.configuration.core_settings.cached_image_size")
				.defineInRange			("cached_image_size",					32,	1,	Integer.MAX_VALUE);

		coreDynamicUVResolution							= builder
				.comment				("Resolution of UV scrolling in caching dynamic render types.")
				.comment				("Changing this value may affects your visual effects and VRAM usage. Smaller value means lower resolution in UV scrolling and less cached render types, while larger means higher resolution and more cached render types. Higher resolution means smoother animations on charged creepers and breezes but more VRAM usage.")
				.translation			("acceleratedrendering.configuration.core_settings.dynamic_uv_resolution")
				.defineInRange			("dynamic_uv_resolution",				64,	1,	Integer.MAX_VALUE);

		coreDebugContextEnabled							= builder
				.comment				("- DISABLED: Debug context will be disabled, which may cause significant rendering glitches on some NVIDIA cards because of the \"theaded optimization\".")
				.comment				("- ENABLED: Debug context will be enabled, which can prevent NVIDIA driver from applying the \"threaded optimization\" that causes the glitches.")
				.translation			("acceleratedrendering.configuration.core_settings.debug_context")
				.gameRestart			()
				.defineEnum				("debug_context",						FeatureStatus.ENABLED);

		coreForceTranslucentAcceleration				= builder
				.comment				("- DISABLED: Translucent RenderType will fallback to vanilla rendering pipeline if the accelerated pipeline does not support translucent sorting unless mods explicitly enable force translucent acceleration temporarily when rendering their own faces.")
				.comment				("- ENABLED: Translucent RenderType will still be rendered in accelerated pipeline even if the pipeline does not support translucent sorting unless mods explicitly disable force translucent acceleration temporarily when rendering their own faces.")
				.translation			("acceleratedrendering.configuration.core_settings.force_translucent_acceleration")
				.defineEnum				("force_translucent_acceleration",		FeatureStatus.ENABLED);

		coreCacheIdenticalPose							= builder
				.comment				("- DISABLED: Poses with identical transform matrix and normal matrix that used to transform vertices will not be cached in buffer which slightly decreases CPU pressure but increase VRAM usage unless mods explicitly disable it when rendering.")
				.comment				("- ENABLED: Poses with identical transform matrix and normal matrix that used to transform vertices will be cached in buffer which save VRAM but slightly increase CPU pressure unless mods explicitly disable it when rendering.")
				.translation			("acceleratedrendering.configuration.core_settings.cache_identical_pose")
				.defineEnum				("cache_identical_pose",				FeatureStatus.ENABLED);

		coreMeshInfoCacheType							= builder
				.comment				("- SIMPLE: The most basic implementation of cache. Usually used for testing if other cache types are working correctly.")
				.comment				("- HANDLE: Faster implementation of cache using VarHandle and flatten values to improve performance on read/write operations.")
				.comment				("- UNSAFE: Fastest implementation of cache using unsafe memory operations that skip multiple safety checks to read/write.")
				.translation			("acceleratedrendering.configuration.core_settings.mesh_info_cache_type")
				.gameRestart			()
				.defineEnum				("mesh_info_cache_type",				MeshInfoCacheType.HANDLE);

		coreLayerStorageType							= builder
				.comment				("- SORTED: The basic implementation of batching layer storage that renders opaque and translucent geometries together in a single stage with better performance but slight visual glitches on translucent geometries.")
				.comment				("- SEPARATED: The visually-precise implementation of batching layer storage that separates opaque and translucent geometries into two rendering stages to prevent visual glitches, slightly slower than basic implementation.")
				.translation			("acceleratedrendering.configuration.core_settings.layer_storage_type")
				.gameRestart			()
				.defineEnum				("layer_storage_type",					LayerStorageType.SEPARATED);

		coreMeshMergeType								= builder
				.comment				("- IGNORED: Meshes with identical vertices will not be merged, which will use less RAM but more VRAM in storing duplicated meshes.")
				.comment				("- MERGED: Meshes with identical vertices will be merged together, which will use less VRAM more RAM in storing the data of meshes used in merging.")
				.translation			("acceleratedrendering.configuration.core_settings.mesh_merge_type")
				.gameRestart			()
				.defineEnum				("mesh_merge_type",						MeshDataCacheType.MERGED);

		coreUploadMeshImmediately						= builder
				.comment				("- DISABLED: Meshes that is going to be accelerated will be collected and uploaded together at the end for choosing better uploading method and increasing memory access efficiency to reach the best performance. Also this method allows mesh cache with bigger capacity (up to VRAM limit), but it may not follow the correct draw order.")
				.comment				("- ENABLED: Meshes that is going to be accelerated will be uploaded immediately after the draw command. It is less efficient and only have about 2GB mesh cache (generally enough) but will follow the original draw order to get the most compatibility.")
				.translation			("acceleratedrendering.configuration.core_settings.upload_mesh_immediately")
				.defineEnum				("upload_mesh_immediately",				FeatureStatus.DISABLED);

		coreCacheDynamicRenderType						= builder
				.comment				("- DISABLED: Dynamic render types like lightning on charged creepers and winds on breezes will not be accelerated for less VRAM usage and smoother animations, but may exceptionally skip acceleration in modded geometries using these render types.")
				.comment				("- ENABLED: Dynamic render types like lightning on charged creepers and winds on breezes will be accelerated to accelerate modded geometries using these render types, but may have more VRAM usage and less smooth animations based on resolution settings.")
				.translation			("acceleratedrendering.configuration.core_settings.cache_dynamic_render_type")
				.defineEnum				("cache_dynamic_render_type",			FeatureStatus.ENABLED);

		coreViewportBindingType							= builder
				.comment				("- IGNORED: Viewport settings that will be modified by other mods will not be restored after the acceleration, which is faster but reduces compatibility with them.")
				.comment				("- MOJANG: Viewport settings that will be modified by other mods will be recorded and restored using Mojang's GLStateManager to work correctly with them.")
				.comment				("- OPENGL: Viewport settings that will be modified by other mods will be recorded and restored using OpenGL to work correctly with them even if they don't set viewport using Mojang's GLStateManager, which is slower but has most compatibility.")
				.translation			("acceleratedrendering.configuration.core_settings.viewport_binding_state")
				.gameRestart			()
				.defineEnum				("viewport_binding_state",				ViewportBindingStateType.IGNORED);

		coreScissorBindingType							= builder
				.comment				("- IGNORED: Scissor settings that will be modified by other mods will not be restored after the acceleration, which is faster but reduces compatibility with them.")
				.comment				("- MOJANG: Scissor settings that will be modified by other mods will be recorded and restored using Mojang's GuiGraphics to work correctly with them.")
				.comment				("- OPENGL: Scissor settings that will be modified by other mods will be recorded and restored using OpenGL to work correctly with them even if they don't set viewport using Mojang's GuiGraphics, which is slower but has most compatibility.")
				.translation			("acceleratedrendering.configuration.core_settings.scissor_binding_state")
				.gameRestart			()
				.defineEnum				("scissor_binding_state",				ScissorBindingStateType.MOJANG);

		builder
				.comment				("Block Buffer Restoring Settings")
				.comment				("A few mods and shader packs will use their on block buffers when rendering, which may introduce conflicts when working with Accelerated Rendering that also uses block buffers.")
				.comment				("Block Buffer Restoring can record the binding of block buffers before the acceleration and restore them after the acceleration to work correctly with them.")
				.translation			("acceleratedrendering.configuration.core_settings.block_buffer_binding_restoring")
				.push					("block_buffer_binding_restoring");

		restoringFeatureStatus							= builder
				.comment				("- DISABLED: Disable block buffer restoring, which is faster but may cause visual glitches with mods and shaders that uses block buffers.")
				.comment				("- ENABLED: Enable block buffer restoring, which may be slower due to recording and restoring block buffer bindings that ensures working correctly with mods and shaders that use block buffers.")
				.translation			("acceleratedrendering.configuration.core_settings.block_buffer_binding_restoring.feature_status")
				.defineEnum				("feature_status",						FeatureStatus.ENABLED);

		restoringBindingCacheType						= builder
				.comment				("- SIMPLE: The most basic implementation of cache. Usually used for testing if other cache types are working properly.")
				.comment				("- HANDLE: Faster implementation of cache using VarHandle and flatten values to improve performance on read/write operations.")
				.comment				("- UNSAFE: Fastest implementation of cache using unsafe memory operations that skip multiple safety checks to read/write.")
				.translation			("acceleratedrendering.configuration.core_settings.block_buffer_binding_restoring.binding_cache_type")
				.gameRestart			()
				.defineEnum				("binding_cache_type",					BlockBufferBindingCacheType.HANDLE);

		restoringShaderStorageType						= builder
				.comment				("- IGNORED: Shader storage buffers will not be restored which improves FPS but reduces compatibility with mods and shaders that ues shader storage buffers.")
				.comment				("- RESTORED: Shader storage buffers will be restored, which is slight slower but has better compatibility with mods and shaders that ues shader storage buffers.")
				.translation			("acceleratedrendering.configuration.core_settings.block_buffer_binding_restoring.shader_storage_type")
				.gameRestart			()
				.defineEnum				("shader_storage_type",					BlockBufferBindingStateType.RESTORED);

		restoringAtomicCounterType						= builder
				.comment				("- IGNORED: Atomic counter buffers will not be restored which improves FPS but reduces compatibility with mods and shaders that ues atomic counter buffers.")
				.comment				("- RESTORED: Atomic counter buffers will be restored, which is slight slower but has better compatibility with mods and shaders that ues atomic counter buffers.")
				.translation			("acceleratedrendering.configuration.core_settings.block_buffer_binding_restoring.atomic_counter_type")
				.gameRestart			()
				.defineEnum				("atomic_counter_type",					BlockBufferBindingStateType.RESTORED);

		restoringShaderStorageRange						= builder
				.comment				("Range of shader storage buffer bindings that will be restored.")
				.comment				("Changing this value may affects your FPS. Smaller value means less shader storage buffer restored but less compatibility, while larger values means more shader storage buffer restored and better compatibility. More shader storage buffers means less FPS.")
				.translation			("acceleratedrendering.configuration.core_settings.block_buffer_binding_restoring.shader_storage_range")
				.gameRestart			()
				.defineInRange			("shader_storage_range",				9,	0,	9);

		restoringAtomicCounterRange						= builder
				.comment				("Range of atomic counter buffer bindings that will be restored.")
				.comment				("Changing this value may affects your FPS. Smaller value means less atomic counter buffer restored but less compatibility, while larger values means more atomic counter buffer restored and better compatibility. More atomic counter buffers means less FPS.")
				.translation			("acceleratedrendering.configuration.core_settings.block_buffer_binding_restoring.atomic_counter_range")
				.gameRestart			()
				.defineInRange			("atomic_counter_range",				1,	0,	1);

		builder.pop();

		builder.pop();

		builder
				.comment				("Accelerated Entity Rendering Settings")
				.comment				("Accelerated Entity Rendering uses GPU to cache and transform vertices while rendering entities, instead of generating and transforming vertices every time the entities are rendered in CPU.")
				.translation			("acceleratedrendering.configuration.accelerated_entity_rendering")
				.push					("accelerated_entity_rendering");

		acceleratedEntityRenderingFeatureStatus			= builder
				.comment				("- DISABLED: Disable accelerated entity rendering.")
				.comment				("- ENABLED: Enable accelerated entity rendering.")
				.translation			("acceleratedrendering.configuration.accelerated_entity_rendering.feature_status")
				.defineEnum				("feature_status",						FeatureStatus.ENABLED);

		acceleratedEntityRenderingDefaultPipeline		= builder
				.comment				("- VANILLA: Entities will not be rendered into the accelerated pipeline unless mods explicitly enable it temporarily when rendering their own entities.")
				.comment				("- ACCELERATED: All entities will be rendered in the accelerated pipeline unless mods explicitly disable it temporarily when rendering their own entities.")
				.translation			("acceleratedrendering.configuration.accelerated_entity_rendering.default_pipeline")
				.defineEnum				("default_pipeline",					PipelineSetting.ACCELERATED);

		acceleratedEntityRenderingMeshType				= builder
				.gameRestart			()
				.comment				("- CLIENT: Cached mesh will be stored on the client side (CPU), which will use less VRAM but take more time to upload to the server side (GPU) during rendering.")
				.comment				("- SERVER: Cached mesh will be stored on the server side (GPU), which may speed up rendering but will use more VRAM to store the mesh.")
				.translation			("acceleratedrendering.configuration.accelerated_entity_rendering.mesh_type")
				.defineEnum				("mesh_type",							MeshType.SERVER);

		acceleratedEntityRenderingGuiAcceleration		= builder
				.comment				("- DISABLED: Accelerated Rendering will not accelerate entities when rendering it in a GUI unless mods explicitly enable it temporarily when rendering their own entities.")
				.comment				("- ENABLED: Accelerated Rendering will still accelerate entities when rendering it in a GUI unless mods explicitly disable it temporarily when rendering their own entities.")
				.translation			("acceleratedrendering.configuration.accelerated_entity_rendering.gui_acceleration")
				.defineEnum				("gui_acceleration",					FeatureStatus.ENABLED);

		builder.pop();

		builder
				.comment				("Accelerated Item Rendering Settings")
				.comment				("Accelerated Item Rendering uses GPU to cache and transform vertices while rendering item models, instead of generating and transforming vertices every time the item models are rendered in CPU.")
				.translation			("acceleratedrendering.configuration.accelerated_item_rendering")
				.push					("accelerated_item_rendering");

		acceleratedItemRenderingFeatureStatus			= builder
				.comment				("- DISABLED: Disable accelerated item rendering.")
				.comment				("- ENABLED: Enable accelerated item rendering.")
				.translation			("acceleratedrendering.configuration.accelerated_item_rendering.feature_status")
				.defineEnum				("feature_status",						FeatureStatus.ENABLED);

		acceleratedItemRenderingBakeMeshForQuads		= builder
				.comment				("- DISABLED: Accelerated Rendering will not bake mesh for quads provided by dynamic item models (something that is not SimpleBakedModel) unless mods explicitly enable it temporarily when rendering their own item models.")
				.comment				("- ENABLED: Accelerated Rendering will bake mesh for all quads provided by dynamic item models (something that is not SimpleBakedModel) unless mods explicitly disable it temporarily when rendering their own item models, which will accelerate the rendering of these models but will crash if they keep allocating new quad data. (but who will?)")
				.translation			("acceleratedrendering.configuration.accelerated_item_rendering.bake_mesh_for_quads")
				.defineEnum				("bake_mesh_for_quads",					FeatureStatus.ENABLED);

		acceleratedItemRenderingDefaultPipeline			= builder
				.comment				("- VANILLA: Item models will not be rendered into the accelerated pipeline unless mods explicitly enable it temporarily when rendering their own item models.")
				.comment				("- ACCELERATED: All item models will be rendered in the accelerated pipeline unless mods explicitly disable it temporarily when rendering their own item models.")
				.translation			("acceleratedrendering.configuration.accelerated_item_rendering.default_pipeline")
				.defineEnum				("default_pipeline",					PipelineSetting.ACCELERATED);

		acceleratedItemRenderingMeshType				= builder
				.gameRestart			()
				.comment				("- CLIENT: Cached mesh will be stored on the client side (CPU), which will use less VRAM but take more time to upload to the server side (GPU) during rendering.")
				.comment				("- SERVER: Cached mesh will be stored on the server side (GPU), which may speed up rendering but will use more VRAM to store the mesh.")
				.translation			("acceleratedrendering.configuration.accelerated_item_rendering.mesh_type")
				.defineEnum				("mesh_type",							MeshType.SERVER);

		acceleratedItemRenderingHandAcceleration		= builder
				.comment				("- DISABLED: Accelerated Rendering will not accelerate item models that are marked as \"too small to make up the cost of acceleration\" when rendering it in hand unless mods explicitly enable it temporarily when rendering their own item models.")
				.comment				("- ENABLED: Accelerated Rendering will still accelerate item models that are marked as \"too small to make up the cost of acceleration\" when rendering it in hand unless mods explicitly disable it temporarily when rendering their own item models, which may slightly reduce the FPS but accelerate vanilla-like modded item models with large amount of vertices.")
				.translation			("acceleratedrendering.configuration.accelerated_item_rendering.hand_acceleration")
				.defineEnum				("hand_acceleration",					FeatureStatus.ENABLED);

		acceleratedItemRenderingGuiAcceleration			= builder
				.comment				("- DISABLED: Accelerated Rendering will not accelerate item models that are marked as \"too small to make up the cost of acceleration\" when rendering it in a container GUI unless mods explicitly enable it temporarily when rendering their own item models.")
				.comment				("- ENABLED: Accelerated Rendering will still accelerate item models that are marked as \"too small to make up the cost of acceleration\" when rendering it in a container GUI unless mods explicitly disable it temporarily when rendering their own item models, which may slightly reduce the FPS but accelerate vanilla-like modded item models with large amount of vertices.")
				.translation			("acceleratedrendering.configuration.accelerated_item_rendering.gui_acceleration")
				.defineEnum				("gui_acceleration",					FeatureStatus.ENABLED);

		acceleratedItemRenderingGuiItemBatching			= builder
				.comment				("- DISABLED: Items in the container GUI will be rendered as per item per batch if the GUI Acceleration is enabled, which is inefficient and may cause reduction in FPS, but it has better compatibility in modded container GUI.")
				.comment				("- ENABLED: Items in the container will be rendered together in a single batch if the GUI Acceleration is enabled, which is much more efficient but has little compatibility in modded container GUI.")
				.translation			("acceleratedrendering.configuration.accelerated_item_rendering.gui_item_batching")
				.defineEnum				("gui_item_batching",					FeatureStatus.ENABLED);

		acceleratedItemRenderingMergeGuiItemBatches		= builder
				.comment				("- DISABLED: Items rendered in background and slots will be separated into two batches when accelerate container GUI, which is inefficient any may cause slight reduction in FPS, but it has better compatibility in modded container GUI.")
				.comment				("- ENABLED: Items rendered in background and slots will be merged into a single batch when accelerate container GUI, which is much more efficient but has less compatibility in modded container GUI.")
				.translation			("acceleratedrendering.configuration.accelerated_item_rendering.merge_gui_item_batching")
				.defineEnum				("merge_gui_item_batching",				FeatureStatus.ENABLED);

		builder.pop();

		builder
				.comment				("Accelerated Text Rendering Settings")
				.comment				("Accelerated Text Rendering uses GPU to cache and transform vertices while rendering text through BakedGlyph, instead of generating and transforming vertices every time the text are rendered in CPU.")
				.translation			("acceleratedrendering.configuration.accelerated_text_rendering")
				.push					("accelerated_text_rendering");

		acceleratedTextRenderingFeatureStatus			= builder
				.comment				("- DISABLED: Disable accelerated text rendering.")
				.comment				("- ENABLED: Enable accelerated text rendering.")
				.translation			("acceleratedrendering.configuration.accelerated_text_rendering.feature_status")
				.defineEnum				("feature_status",						FeatureStatus.ENABLED);

		acceleratedTextRenderingDefaultPipeline			= builder
				.comment				("- VANILLA: Text will not be rendered into the accelerated pipeline unless mods explicitly enable it temporarily when rendering their own text.")
				.comment				("- ACCELERATED: All text will be rendered in the accelerated pipeline unless mods explicitly disable it temporarily when rendering their own text.")
				.translation			("acceleratedrendering.configuration.accelerated_text_rendering.default_pipeline")
				.defineEnum				("default_pipeline",					PipelineSetting.ACCELERATED);

		acceleratedTextRenderingMeshType				= builder
				.gameRestart			()
				.comment				("- CLIENT: Cached mesh will be stored on the client side (CPU), which will use less VRAM but take more time to upload to the server side (GPU) during rendering.")
				.comment				("- SERVER: Cached mesh will be stored on the server side (GPU), which may speed up rendering but will use more VRAM to store the mesh.")
				.translation			("acceleratedrendering.configuration.accelerated_text_rendering.mesh_type")
				.defineEnum				("mesh_type",							MeshType.SERVER);

		builder.pop();

		builder
				.comment				("Simple Orientation Face Culling Settings")
				.comment				("Simple Orientation face culling uses an compute shader before the draw call to discard faces that is not visible on screen by checking if it is facing to the screen using a determinant of 3 * 3 matrix.")
				.translation			("acceleratedrendering.configuration.orientation_culling")
				.push					("orientation_culling");

		orientationCullingFeatureStatus					= builder
				.comment				("- DISABLED: Disable simple orientation face culling.")
				.comment				("- ENABLED: Enable simple orientation face culling.")
				.translation			("acceleratedrendering.configuration.orientation_culling.feature_status")
				.defineEnum				("feature_Status",						FeatureStatus.ENABLED);

		orientationCullingDefaultCulling				= builder
				.comment				("- DISABLED: Faces will not be culled unless mods explicitly enable it temporarily when rendering their own faces.")
				.comment				("- ENABLED: All faces will be culled unless mods explicitly disable it temporarily when rendering their own faces.")
				.translation			("acceleratedrendering.configuration.orientation_culling.default_culling")
				.defineEnum				("default_culling",						FeatureStatus.ENABLED);

		orientationCullingIgnoreCullState				= builder
				.comment				("- DISABLED: Simple orientation face culling will not cull entities that are not declared as \"cullable\".")
				.comment				("- ENABLED: Simple orientation face culling will cull all entities even if they are not declared as \"cullable\".")
				.translation			("acceleratedrendering.configuration.orientation_culling.ignore_cull_state")
				.defineEnum				("ignore_cull_state",					FeatureStatus.DISABLED);

		builder.pop();

		builder
				.comment				("Filters Settings")
				.comment				("Filters allows you to prevent specific entities/block entities/items from being accelerated when rendering for better compatibility.")
				.translation			("acceleratedrendering.configuration.filter")
				.push					("filter");

		filterFeatureStatus								= builder
				.comment				("- DISABLED: Filters will be disabled and all entities, block entities and items will be accelerated when rendering.")
				.comment				("- ENABLED: Filters will test if the entities, block entities and items should be accelerated when rendering based on the filter values and the filter type.")
				.translation			("acceleratedrendering.configuration.filter.feature_status")
				.defineEnum				("feature_status",						FeatureStatus.ENABLED);

		filterMenuFilter								= builder
				.comment				("- DISABLED: Menu filter will be disabled and geometries in all container GUI will be accelerated.")
				.comment				("- ENABLED: Menu filter will test if geometries in specific container GUI should be accelerated when rendering based on the filter values and the filter type.")
				.translation			("acceleratedrendering.configuration.filter.menu_filter")
				.defineEnum				("menu_filter",							FeatureStatus.ENABLED);

		filterEntityFilter								= builder
				.comment				("- DISABLED: Entity filter will be disabled and all entities will be accelerated.")
				.comment				("- ENABLED: Entity filter will test if the entities should be accelerated when rendering based on the filter values and the filter type.")
				.translation			("acceleratedrendering.configuration.filter.entity_filter")
				.defineEnum				("entity_filter",						FeatureStatus.DISABLED);

		filterBlockEntityFilter							= builder
				.comment				("- DISABLED: Block entity filter will be disabled and all block entities will be accelerated.")
				.comment				("- ENABLED: Block entity filter will test if the block entities should be accelerated when rendering based on the filter values and the filter type.")
				.translation			("acceleratedrendering.configuration.filter.block_entity_filter")
				.defineEnum				("block_entity_filter",					FeatureStatus.DISABLED);

		filterItemFilter								= builder
				.comment				("- DISABLED: Item filter will be disabled and all items will be accelerated.")
				.comment				("- ENABLED: Item filter will test if the items should be accelerated when rendering based on the filter values and the filter type.")
				.translation			("acceleratedrendering.configuration.filter.item_filter")
				.defineEnum				("item_filter",							FeatureStatus.DISABLED);

		filterStageFilter								= builder
				.comment				("- DISABLED: Custom rendering stage filter will be disabled and geometries in all custom rendering stages will be accelerated.")
				.comment				("- ENABLED: Custom rendering stage filter will test if geometries in specific custom rendering stage should be accelerated when rendering based on the filter values and the filter type.")
				.translation			("acceleratedrendering.configuration.filter.stage_filter")
				.defineEnum				("stage_filter",						FeatureStatus.ENABLED);

		filterMenuFilterType							= builder
				.comment				("- BLACKLIST: Container GUIs that are not in the filter values can pass the filter and be accelerated when rendering.")
				.comment				("- WHITELIST: Container GUIs that are in the filter values can pass the filter and be accelerated when rendering.")
				.translation			("acceleratedrendering.configuration.filter.menu_filter_type")
				.defineEnum				("menu_filter_type",					FilterType.WHITELIST);

		filterEntityFilterType							= builder
				.comment				("- BLACKLIST: Entities that are not in the filter values can pass the filter and be accelerated when rendering.")
				.comment				("- WHITELIST: Entities that are in the filter values can pass the filter and be accelerated when rendering.")
				.translation			("acceleratedrendering.configuration.filter.entity_filter_type")
				.defineEnum				("entity_filter_type",					FilterType.BLACKLIST);

		filterBlockEntityFilterType						= builder
				.comment				("- BLACKLIST: Block entities that are not in the filter values can pass the filter and be accelerated when rendering.")
				.comment				("- WHITELIST: Block entities that are in the filter values can pass the filter and be accelerated when rendering.")
				.translation			("acceleratedrendering.configuration.filter.block_entity_filter_type")
				.defineEnum				("block_entity_filter_type",			FilterType.BLACKLIST);

		filterItemFilterType							= builder
				.comment				("- BLACKLIST: Items that are not in the filter values can pass the filter and be accelerated when rendering.")
				.comment				("- WHITELIST: Items that are in the filter values can pass the filter and be accelerated when rendering.")
				.translation			("acceleratedrendering.configuration.filter.item_filter_type")
				.defineEnum				("item_filter_type",					FilterType.BLACKLIST);

		filterStageFilterType							= builder
				.comment				("- BLACKLIST: Custom rendering stages that are not in the filter values can pass the filter and be accelerated when rendering.")
				.comment				("- WHITELIST: Custom rendering stages that are in the filter values can pass the filter and be accelerated when rendering.")
				.translation			("acceleratedrendering.configuration.filter.stage_filter_type")
				.defineEnum				("stage_filter_type",					FilterType.WHITELIST);

		filterMenuFilterValues							= builder
				.comment				("You can configure the menu filter by this list.")
				.comment				("Menu filter will use this list and the filter type to determine if a container GUI can pass the filter.")
				.translation			("acceleratedrendering.configuration.filter.menu_filter_values")
				.gameRestart			()
				.defineListAllowEmpty	("menu_filter_values",					ObjectArrayList.of("minecraft:.*"),								() -> "minecraft:empty", object -> object instanceof String);

		filterEntityFilterValues						= builder
				.comment				("You can configure the entity filter by this list.")
				.comment				("Entity filter will use this list and the filter type to determine if an entity can pass the filter.")
				.translation			("acceleratedrendering.configuration.filter.entity_filter_values")
				.gameRestart			()
				.defineListAllowEmpty	("entity_filter_values",				new ObjectArrayList<>(),										() -> "minecraft:empty", object -> object instanceof String);

		filterBlockEntityFilterValues					= builder
				.comment				("You can configure the block entity filter by this list.")
				.comment				("Block entity filter will use this list and the filter type to determine if a block entity can pass the filter.")
				.translation			("acceleratedrendering.configuration.filter.block_entity_filter_values")
				.gameRestart			()
				.defineListAllowEmpty	("block_entity_filter_values",			new ObjectArrayList<>(),										() -> "minecraft:empty", object -> object instanceof String);

		filterItemFilterValues							= builder
				.comment				("You can configure the item filter by this list.")
				.comment				("Item filter will use this list and the filter type to determine if an item can pass the filter.")
				.translation			("acceleratedrendering.configuration.filter.item_filter_values")
				.gameRestart			()
				.defineListAllowEmpty	("item_filter_values",					new ObjectArrayList<>(),										() -> "minecraft:empty", object -> object instanceof String);

		filterStageFilterValues							= builder
				.comment				("You can configure the custom rendering stage filter by this list.")
				.comment				("Custom rendering stage filter will use this list and the filter type to determine if a custom rendering stage can pass the filter.")
				.comment				("It's not recommend to modify this list unless other mods adds their own custom rendering stages.")
				.translation			("acceleratedrendering.configuration.filter.stage_filter_values")
				.gameRestart			()
				.defineListAllowEmpty	("stage_filter_values",					ObjectArrayList.of("after_entities", "after_block_entities"),	() -> "minecraft:empty", object -> object instanceof String);

		builder.pop();

		builder
				.comment				("Iris Compatibility Settings")
				.comment				("Iris Compatibility Settings allows Accelerated Rendering to work correctly with Iris.")
				.translation			("acceleratedrendering.configuration.iris_compatibility")
				.push					("iris_compatibility");

		irisCompatFeatureStatus							= builder
				.comment				("- DISABLED: Accelerated Rendering will be incompatible with Iris and cause visual glitches when working with Iris.")
				.comment				("- ENABLED: Accelerated Rendering will use compute shaders that fits Iris's vertex formats, which make it compatible with Iris.")
				.translation			("acceleratedrendering.configuration.iris_compatibility.feature_status")
				.defineEnum				("feature_status",						FeatureStatus.ENABLED);

		irisCompatOrientationCullingCompat				= builder
				.comment				("- DISABLED: Simple Orientation culling will not work with Iris because the culling shader is for vanilla's vertex formats.")
				.comment				("- ENABLED: Simple Orientation culling will use another culling shader that fits iris's vertex format, which make it compatible with Iris.")
				.translation			("acceleratedrendering.configuration.iris_compatibility.orientation_culling_compatibility")
				.defineEnum				("orientation_culling_compatibility",	FeatureStatus.ENABLED);

		irisCompatShadowCulling							= builder
				.comment				("- DISABLED: Entities will not be culled when they are rendered as shadows unless mods explicitly enable it temporarily when rendering their own shadows. Which reduce FPS due to redundant faces.")
				.comment				("- ENABLED: Entities will be culled when they are rendered as shadows unless mods explicitly disable it temporarily when rendering their own shadows. Redundant faces will be culled and improve FPS, but it may cause incorrect shadows.")
				.translation			("acceleratedrendering.configuration.iris_compatibility.shadow_culling")
				.defineEnum				("shadow_culling",						FeatureStatus.ENABLED);

		irisCompatPolygonProcessing						= builder
				.comment				("- DISABLED: Extra information in vertices provided by Iris will not be included or calculated in the accelerated pipeline unless mods explicitly enable it temporarily when rendering their own faces, which may cause visual glitches or incorrect rendering.")
				.comment				("- ENABLED: Extra information in vertices provided by Iris will be included and calculated in the accelerated pipeline by a compute shader unless mods explicitly disable it temporarily when rendering their own faces.")
				.translation			("acceleratedrendering.configuration.iris_compatibility.polygon_processing")
				.defineEnum				("polygon_processing",					FeatureStatus.ENABLED);

		builder.pop();

		builder
				.comment				("Curios Compatibility Settings")
				.comment				("Curios Compatibility Settings allows Accelerated Rendering to work correctly with Curios.")
				.translation			("acceleratedrendering.configuration.curios_compatibility")
				.push					("curios_compatibility");

		curiosCompatFeatureStatus						= builder
				.comment				("- DISABLED: Accelerated Rendering will not interrupt the acceleration of the Curios layer on entities.")
				.comment				("- ENABLED: Accelerated Rendering will interrupt the acceleration of Curios layer on entities to prevent some mods using extremely bad rendering code that breaks the caching of Accelerated Rendering.")
				.translation			("acceleratedrendering.configuration.curios_compatibility.feature_status")
				.defineEnum				("feature_status",						FeatureStatus.ENABLED);

		curiosCompatLayerAcceleration					= builder
				.comment				("- DISABLED: Curios layer will not be accelerated by default to prevent some mods using extremely bad rendering code that breaks the caching of Accelerated Rendering unless mods explicitly enable the acceleration when rendering their accessories or equipments.")
				.comment				("- ENABLED: Curios layer will be accelerated by default unless mods explicitly enable the acceleration when rendering their accessories or equipments.")
				.translation			("acceleratedrendering.configuration.curios_compatibility.layer_acceleration")
				.defineEnum				("layer_acceleration",					FeatureStatus.DISABLED);

		curiosItemFilter								= builder
				.comment				("- DISABLED: Curios item filter will be disabled and acceleration of the rendering of all curios accessories/equipments will be determined by the \"layer acceleration\" option.")
				.comment				("- ENABLED: Curios item filter will test if the acceleration of the curios accessories/equipments should be prevented based on the filter values and the filter type.")
				.translation			("acceleratedrendering.configuration.curios_compatibility.item_filter")
				.defineEnum				("item_filter",							FeatureStatus.DISABLED);

		curiosItemFilterType							= builder
				.comment				("- BLACKLIST: Curios items that are not in the filter values can pass the filter and not being prevented to be accelerated.")
				.comment				("- WHITELIST: Curios items that are in the filter values can pass the filter and not being prevented to be accelerated.")
				.translation			("acceleratedrendering.configuration.curios_compatibility.item_filter_type")
				.defineEnum				("item_filter_type",					FilterType.BLACKLIST);

		curiosItemFilterValues							= builder
				.comment				("You can configure the curios item filter by this list.")
				.comment				("Curios item filter will use this list and the filter type to determine if a curios item can pass the filter.")
				.translation			("acceleratedrendering.configuration.curios_compatibility.item_filter_values")
				.gameRestart			()
				.defineListAllowEmpty	("item_filter_values",					new ObjectArrayList<>(), () -> "minecraft:air", object -> object instanceof String);

		builder.pop();
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/configs/FeatureStatus.java
================================================
package com.github.argon4w.acceleratedrendering.configs;

public enum FeatureStatus {

	DISABLED,
	ENABLED
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/configs/PipelineSetting.java
================================================
package com.github.argon4w.acceleratedrendering.configs;

public enum PipelineSetting {

	VANILLA,
	ACCELERATED
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/CoreBuffers.java
================================================
package com.github.argon4w.acceleratedrendering.core;

import com.github.argon4w.acceleratedrendering.core.buffers.AcceleratedBufferSources;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.AcceleratedBufferSource;
import com.github.argon4w.acceleratedrendering.core.buffers.environments.IBufferEnvironment;
import com.mojang.blaze3d.vertex.VertexFormat;

public class CoreBuffers {

	public static final AcceleratedBufferSource BLOCK					= new AcceleratedBufferSource(IBufferEnvironment.Presets.BLOCK);
	public static final AcceleratedBufferSource ENTITY					= new AcceleratedBufferSource(IBufferEnvironment.Presets.ENTITY);
	public static final AcceleratedBufferSource	POS						= new AcceleratedBufferSource(IBufferEnvironment.Presets.POS);
	public static final AcceleratedBufferSource POS_COLOR				= new AcceleratedBufferSource(IBufferEnvironment.Presets.POS_COLOR);
	public static final AcceleratedBufferSource POS_TEX					= new AcceleratedBufferSource(IBufferEnvironment.Presets.POS_TEX);
	public static final AcceleratedBufferSource POS_TEX_COLOR			= new AcceleratedBufferSource(IBufferEnvironment.Presets.POS_TEX_COLOR);
	public static final AcceleratedBufferSource POS_COLOR_TEX_LIGHT		= new AcceleratedBufferSource(IBufferEnvironment.Presets.POS_COLOR_TEX_LIGHT);
	public static final AcceleratedBufferSource POS_TEX_COLOR_OUTLINE	= new AcceleratedBufferSource(IBufferEnvironment.Presets.POS_TEX_COLOR);

	public static final AcceleratedBufferSources CORE = AcceleratedBufferSources
			.builder()
			.source	(CoreBuffers		.BLOCK)
			.source	(CoreBuffers		.ENTITY)
			.source	(CoreBuffers		.POS)
			.source	(CoreBuffers		.POS_COLOR)
			.source	(CoreBuffers		.POS_TEX)
			.source	(CoreBuffers		.POS_TEX_COLOR)
			.source	(CoreBuffers		.POS_COLOR_TEX_LIGHT)
			.mode	(VertexFormat.Mode	.QUADS)
			.mode	(VertexFormat.Mode	.TRIANGLES)
			.build	();

	public static final AcceleratedBufferSources OUTLINE = AcceleratedBufferSources
			.builder()
			.source	(CoreBuffers		.POS_TEX_COLOR_OUTLINE)
			.mode	(VertexFormat.Mode	.QUADS)
			.mode	(VertexFormat.Mode	.TRIANGLES)
			.build	();
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/CoreBuffersProvider.java
================================================
package com.github.argon4w.acceleratedrendering.core;

import com.github.argon4w.acceleratedrendering.core.buffers.EmptyAcceleratedBufferSources;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.IAcceleratedBufferSource;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.builders.BufferSourceExtension;
import lombok.experimental.ExtensionMethod;
import net.minecraft.client.renderer.RenderBuffers;

import java.util.function.Supplier;

@ExtensionMethod(BufferSourceExtension.class)
public class CoreBuffersProvider {

	public static final Supplier<IAcceleratedBufferSource> EMPTY	= () -> EmptyAcceleratedBufferSources	.INSTANCE;
	public static final Supplier<IAcceleratedBufferSource> CORE		= () -> CoreBuffers						.CORE;
	public static final Supplier<IAcceleratedBufferSource> OUTLINE	= () -> CoreBuffers						.OUTLINE;

	public static void bindAcceleratedBufferSources(RenderBuffers renderBuffers) {
		renderBuffers.bufferSource			().getAcceleratable().bindAcceleratedBufferSource(CoreBuffersProvider.CORE);
		renderBuffers.crumblingBufferSource	().getAcceleratable().bindAcceleratedBufferSource(CoreBuffersProvider.CORE);
		renderBuffers.outlineBufferSource	().getAcceleratable().bindAcceleratedBufferSource(CoreBuffersProvider.OUTLINE);
	}
}


================================================
FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/CoreFeature.java
================================================
package com.github.argon4w.acceleratedrendering.core;

import com.github.argon4w.acceleratedrendering.configs.FeatureConfig;
import com.github.argon4w.acceleratedrendering.configs.FeatureStatus;
import com.github.argon4w.acceleratedrendering.core.backends.states.IBindingState;
import com.github.argon4w.acceleratedrendering.core.backends.states.buffers.BlockBufferBindingStateType;
import com.github.argon4w.acceleratedrendering.core.backends.states.buffers.BufferBlockType;
import com.github.argon4w.acceleratedrendering.core.backends.states.buffers.cache.BlockBufferBindingCacheType;
import com.github.argon4w.acceleratedrendering.core.backends.states.scissors.ScissorBindingStateType;
import com.github.argon4w.acceleratedrendering.core.backends.states.viewports.ViewportBindingStateType;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.layers.storage.ILayerStorage;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.layers.storage.LayerStorageType;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.pools.meshes.IMeshInfoCache;
import com.github.argon4w.acceleratedrendering.core.buffers.accelerated.pools.meshes.MeshInfoCacheType;
import com.github.argon4w.acceleratedrendering.core.meshes.data.cache.IMeshDataCache;
import com.github.argon4w.acceleratedrendering.core.meshes.data.cache.MeshDataCacheType;
import com.github.argon4w.acceleratedrendering.core.programs.ComputeShaderProgramLoader;
import com.github.argon4w.acceleratedrendering.core.utils.PackedVector2i;
import com.google.common.util.concurrent.Runnables;

import java.util.ArrayDeque;

public class CoreFeature {

	private static final	ArrayDeque<FeatureStatus>	FORCE_TRANSLUCENT_ACCELERATION_CONTROLLER_STACK	= new ArrayDeque<>();
	private static final	ArrayDeque<FeatureStatus>	CACHE_IDENTICAL_POSE_CONTROLLER_STACK			= new ArrayDeque<>();
	private static final	ArrayDeque<Integer>			DEFAULT_LAYER_CONTROLLER_STACK					= new ArrayDeque<>();
	private static final	ArrayDeque<Runnable>		DEFAULT_LAYER_BEFORE_FUNCTION_CONTROLLER_STACK	= new ArrayDeque<>();
	private static final	ArrayDeque<Runnable>		DEFAULT_LAYER_AFTER_FUNCTION_CONTROLLER_STACK	= new ArrayDeque<>();
	private static 			boolean						RENDERING_LEVEL									= false;
	private static			boolean						RENDERING_HAND									= false;
	private static			boolean						RENDERING_GUI									= false;
	private static			boolean						GUI_BATCHING									= false;

	public static boolean isLoaded() {
		return ComputeShaderProgramLoader.isProgramsLoaded();
	}

	public static boolean isConfigLoaded() {
		return FeatureConfig.SPEC.isLoaded();
	}

	public static boolean isDebugContextEnabled() {
		return FeatureConfig.CONFIG.coreDebugContextEnabled.get() == FeatureStatus.ENABLED;
	}

	public static int getPooledRingBufferSize() {
		return FeatureConfig.CONFIG.corePooledRingBufferSize.getAsInt();
	}

	public static int getPooledBatchingSize() {
		return FeatureConfig.CONFIG.corePooledBatchingSize.getAsInt();
	}

	public static int getCachedImageSize() {
		return FeatureConfig.CONFIG.coreCachedImageSize.getAsInt();
	}

	public static float getDynamicUVResolution() {
		return FeatureConfig.CONFIG.coreDynamicUVResolution.getAsInt();
	}

	public static boolean shouldForceAccelerateTranslucent() {
		return getForceTranslucentAccelerationSetting() == FeatureStatus.ENABLED;
	}

	public static boolean shouldCacheIdenticalPose() {
		return getCacheIdenticalPoseSetting() == FeatureStatus.ENABLED;
	}

	public static MeshInfoCacheType getMeshInfoCacheType() {
		return FeatureConfig.CONFIG.coreMeshInfoCacheType.get();
	}

	public static LayerStorageType getLayerStorageType() {
		return FeatureConfig.CONFIG.coreLayerStorageType.get();
	}

	public static MeshDataCacheType getMeshMergeType() {
		return FeatureConfig.CONFIG.coreMeshMergeType.get();
	}

	public static boolean shouldUploadMeshImmediately() {
		return FeatureConfig.CONFIG.coreUploadMeshImmediately.get() == FeatureStatus.ENABLED;
	}

	public static boolean shouldCacheDynamicRenderType() {
		return FeatureConfig.CONFIG.coreCacheDynamicRenderType.get() == FeatureStatus.ENABLED;
	}

	public static boolean shouldRestoreBlockBuffers() {
		return FeatureConfig.CONFIG.restoringFeatureStatus.get() == FeatureStatus.ENABLED;
	}

	public static BlockBufferBindingCacheType getBlockBufferBindingCacheType() {
		return FeatureConfig.CONFIG.restoringBindingCacheType.get();
	}

	public static BlockBufferBindingStateType getShaderStorageStateType() {
		return FeatureConfig.CONFIG.restoringShaderStorageType.get();
	}

	public static ViewportBindingStateType getViewportBindingStateType() {
		return FeatureConfig.CONFIG.coreViewportBindingType.get();
	}

	public static ScissorBindingStateType getScissorBindingStateType() {
		return FeatureConfig.CONFIG.coreScissorBindingType.get();
	}

	public static BlockBufferBindingStateType getAtomicCounterStateType() {
		return FeatureConfig.CONFIG.restoringAtomicCounterType.get();
	}

	public static int getShaderStorageRestoringRange() {
		return FeatureConfig.CONFIG.restoringShaderStorageRange.getAsInt();
	}

	public static int getAtomicCounterRestoringRange() {
		return FeatureConfig.CONFIG.restoringAtomicCounterRange.getAsInt();
	}

	public static IMeshInfoCache createMeshInfoCache() {
		return getMeshInfoCacheType().create();
	}

	public static ILayerStorage createLayerStorage() {
		return getLayerStorageType().create(getPooledBatchingSize());
	}

	public static IMeshDataCache createMeshDataCache() {
		return getMeshMergeType().create();
	}

	public static IBindingState createViewportState() {
		return getViewportBindingStateType().create();
	}

	public static IBindingState createScissorState() {
		return getScissorBindingStateType().create();
	}

	public static IBindingState createShaderStorageState() {
		return getShaderStorageStateType().create(getBlockBufferBindingCacheType(), BufferBlockType.SHADER_STORAGE, getShaderStorageRestoringRange());
	}

	public static IBindingState createAtomicCounterState() {
		return getAtomicCounterStateType().create(getBlockBufferBindingCacheType(), BufferBlockType.ATOMIC_COUNTER, getAtomicCounterRestoringRange());
	}

	public static int packDynamicUV(float u, float v) {
		return PackedVector2i.pack(u * getDynamicUVResolution(), v * getDynamicUVResolution());
	}

	public static float unpackDynamicU(int packedUV) {
		return PackedVector2i.unpackU(packedUV) / getDynamicUVResolution();
	}

	public static float unpackDynamicV(int packedUV) {
		return PackedVector2i.unpackV(packedUV) / getDynamicUVResolution();
	}

	public static void disableForceTranslucentAcceleration() {
		FORCE_TRANSLUCENT_ACCELERATION_CONTROLLER_STACK.push(FeatureStatus.DISABLED);
	}

	public static void dis
Download .txt
gitextract_d9366gy4/

├── .gitattributes
├── .github/
│   └── workflows/
│       └── build.yml
├── .gitignore
├── LICENSE
├── README.md
├── build.gradle
├── changelogs/
│   ├── changelog-1.0.0.md
│   ├── changelog-1.0.1.md
│   ├── changelog-1.0.2.md
│   ├── changelog-1.0.3.md
│   ├── changelog-1.0.4.md
│   ├── changelog-1.0.5.1.md
│   ├── changelog-1.0.5.md
│   ├── changelog-1.0.6.md
│   ├── changelog-1.0.7.md
│   └── changelog-1.0.8.md
├── gradle/
│   └── wrapper/
│       ├── gradle-wrapper.jar
│       └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── images/
│   ├── LOGO.psd
│   └── benchmark.psd
├── settings.gradle
└── src/
    └── main/
        ├── java/
        │   └── com/
        │       └── github/
        │           └── argon4w/
        │               └── acceleratedrendering/
        │                   ├── AcceleratedRenderingModEntry.java
        │                   ├── compat/
        │                   │   ├── AbstractCompatMixinPlugin.java
        │                   │   ├── curios/
        │                   │   │   ├── CuriosCompatFeature.java
        │                   │   │   └── mixins/
        │                   │   │       └── CuriosLayerMixin.java
        │                   │   ├── immediatelyfast/
        │                   │   │   └── mixins/
        │                   │   │       ├── BatchableBufferSourceMixin.java
        │                   │   │       ├── BatchingBuffersMixin.java
        │                   │   │       └── WrappedRenderLayerMixin.java
        │                   │   └── iris/
        │                   │       ├── IrisCompatBuffers.java
        │                   │       ├── IrisCompatBuffersProvider.java
        │                   │       ├── IrisCompatFeature.java
        │                   │       ├── environments/
        │                   │       │   └── IrisBufferEnvironment.java
        │                   │       ├── interfaces/
        │                   │       │   ├── IIrisAcceleratedBufferBuilder.java
        │                   │       │   ├── IIrisMeshInfo.java
        │                   │       │   └── IIrisMeshInfoCache.java
        │                   │       ├── mixins/
        │                   │       │   ├── acceleratedrendering/
        │                   │       │   │   ├── AcceleratedBufferBuilderMixin.java
        │                   │       │   │   ├── AcceleratedBufferSourceMixin.java
        │                   │       │   │   ├── AcceleratedRenderingModEntryMixin.java
        │                   │       │   │   ├── CoreBuffersProviderMixin.java
        │                   │       │   │   ├── FlattenMeshInfoCacheMixin.java
        │                   │       │   │   ├── IBufferEnvironmentPresetsMixin.java
        │                   │       │   │   ├── MeshUploaderMixin.java
        │                   │       │   │   ├── MeshUploadingProgramDispatcherMixin.java
        │                   │       │   │   ├── RenderTypeUtilsMixin.java
        │                   │       │   │   ├── SimpleMeshInfoCacheMixin.java
        │                   │       │   │   ├── SimpleMeshInfoMixin.java
        │                   │       │   │   └── UnsafeMemoryMeshInfoCacheMixin.java
        │                   │       │   ├── iris/
        │                   │       │   │   ├── FullyBufferedMultiBufferSourceMixin.java
        │                   │       │   │   ├── HandRendererMixin.java
        │                   │       │   │   ├── IrisVertexFormatsMixin.java
        │                   │       │   │   ├── ModelToEntityVertexSerializerMixin.java
        │                   │       │   │   └── ShadowRendererMixin.java
        │                   │       │   ├── plugin/
        │                   │       │   │   └── IrisCompatMixinPlugin.java
        │                   │       │   └── vanilla/
        │                   │       │       └── LevelRendererMixin.java
        │                   │       └── programs/
        │                   │           ├── IrisPrograms.java
        │                   │           ├── culling/
        │                   │           │   ├── IrisCullingProgramDispatcher.java
        │                   │           │   └── IrisCullingProgramSelector.java
        │                   │           └── processing/
        │                   │               └── IrisPolygonProcessor.java
        │                   ├── configs/
        │                   │   ├── FeatureConfig.java
        │                   │   ├── FeatureStatus.java
        │                   │   └── PipelineSetting.java
        │                   ├── core/
        │                   │   ├── CoreBuffers.java
        │                   │   ├── CoreBuffersProvider.java
        │                   │   ├── CoreFeature.java
        │                   │   ├── CoreStates.java
        │                   │   ├── backends/
        │                   │   │   ├── DebugOutput.java
        │                   │   │   ├── GLConstants.java
        │                   │   │   ├── Sync.java
        │                   │   │   ├── VertexArray.java
        │                   │   │   ├── buffers/
        │                   │   │   │   ├── EmptyServerBuffer.java
        │                   │   │   │   ├── IClientBuffer.java
        │                   │   │   │   ├── IServerBuffer.java
        │                   │   │   │   ├── ImmutableBuffer.java
        │                   │   │   │   ├── MappedBuffer.java
        │                   │   │   │   └── MutableBuffer.java
        │                   │   │   ├── programs/
        │                   │   │   │   ├── BarrierFlags.java
        │                   │   │   │   ├── ComputeProgram.java
        │                   │   │   │   ├── ComputeShader.java
        │                   │   │   │   └── Uniform.java
        │                   │   │   └── states/
        │                   │   │       ├── EmptyBindingState.java
        │                   │   │       ├── FramebufferBindingState.java
        │                   │   │       ├── IBindingState.java
        │                   │   │       ├── buffers/
        │                   │   │       │   ├── BlockBufferBindingStateType.java
        │                   │   │       │   ├── BufferBlockType.java
        │                   │   │       │   ├── SimpleBlockBufferBindingState.java
        │                   │   │       │   └── cache/
        │                   │   │       │       ├── BlockBufferBindingCacheType.java
        │                   │   │       │       ├── FlattenBlockBufferBindingCache.java
        │                   │   │       │       ├── IBlockBufferBindingCache.java
        │                   │   │       │       ├── SimpleBlockBufferBinding.java
        │                   │   │       │       ├── SimpleBlockBufferBindingCache.java
        │                   │   │       │       └── UnsafeMemoryBlockBufferBindingCache.java
        │                   │   │       ├── scissors/
        │                   │   │       │   ├── MojangScissorBindingState.java
        │                   │   │       │   ├── OpenGLScissorBindingState.java
        │                   │   │       │   └── ScissorBindingStateType.java
        │                   │   │       └── viewports/
        │                   │   │           ├── MojangViewportBindingState.java
        │                   │   │           ├── OpenGLViewportBindingState.java
        │                   │   │           └── ViewportBindingStateType.java
        │                   │   ├── buffers/
        │                   │   │   ├── AcceleratedBufferSources.java
        │                   │   │   ├── EmptyAcceleratedBufferSources.java
        │                   │   │   ├── accelerated/
        │                   │   │   │   ├── AcceleratedBufferSource.java
        │                   │   │   │   ├── AcceleratedRingBuffers.java
        │                   │   │   │   ├── IAcceleratedBufferSource.java
        │                   │   │   │   ├── IAccelerationHolder.java
        │                   │   │   │   ├── builders/
        │                   │   │   │   │   ├── AcceleratedBufferBuilder.java
        │                   │   │   │   │   ├── AcceleratedEntityOutlineGenerator.java
        │                   │   │   │   │   ├── AcceleratedSheetedDecalTextureGenerator.java
        │                   │   │   │   │   ├── AcceleratedSpriteCoordinateExpander.java
        │                   │   │   │   │   ├── AcceleratedVertexConsumerWrapper.java
        │                   │   │   │   │   ├── BufferSourceExtension.java
        │                   │   │   │   │   ├── IAcceleratableBufferSource.java
        │                   │   │   │   │   ├── IAcceleratedVertexConsumer.java
        │                   │   │   │   │   ├── IBufferGraph.java
        │                   │   │   │   │   └── VertexConsumerExtension.java
        │                   │   │   │   ├── layers/
        │                   │   │   │   │   ├── LayerDrawType.java
        │                   │   │   │   │   ├── LayerKey.java
        │                   │   │   │   │   ├── functions/
        │                   │   │   │   │   │   ├── CustomLayerFunction.java
        │                   │   │   │   │   │   ├── EmptyLayerFunction.java
        │                   │   │   │   │   │   └── ILayerFunction.java
        │                   │   │   │   │   └── storage/
        │                   │   │   │   │       ├── ILayerContexts.java
        │                   │   │   │   │       ├── ILayerStorage.java
        │                   │   │   │   │       ├── LayerStorageType.java
        │                   │   │   │   │       ├── SeparatedLayerStorage.java
        │                   │   │   │   │       ├── SimpleLayerContexts.java
        │                   │   │   │   │       ├── empty/
        │                   │   │   │   │       │   ├── EmptyLayerContexts.java
        │                   │   │   │   │       │   └── EmptyLayerStorage.java
        │                   │   │   │   │       └── sorted/
        │                   │   │   │   │           ├── SortedLayerContexts.java
        │                   │   │   │   │           └── SortedLayerStorage.java
        │                   │   │   │   ├── pools/
        │                   │   │   │   │   ├── DrawContextPool.java
        │                   │   │   │   │   ├── ElementBufferPool.java
        │                   │   │   │   │   ├── StagingBufferPool.java
        │                   │   │   │   │   └── meshes/
        │                   │   │   │   │       ├── FlattenMeshInfoCache.java
        │                   │   │   │   │       ├── IMeshInfoCache.java
        │                   │   │   │   │       ├── MeshInfoCacheType.java
        │                   │   │   │   │       ├── MeshUploaderPool.java
        │                   │   │   │   │       ├── SimpleMeshInfo.java
        │                   │   │   │   │       ├── SimpleMeshInfoCache.java
        │                   │   │   │   │       └── UnsafeMemoryMeshInfoCache.java
        │                   │   │   │   └── renderers/
        │                   │   │   │       ├── DecoratedRenderer.java
        │                   │   │   │       ├── IAcceleratedRenderer.java
        │                   │   │   │       ├── IBufferDecorator.java
        │                   │   │   │       └── SheetedDecalTextureRenderer.java
        │                   │   │   ├── environments/
        │                   │   │   │   ├── IBufferEnvironment.java
        │                   │   │   │   └── VanillaBufferEnvironment.java
        │                   │   │   └── memory/
        │                   │   │       ├── IMemoryInterface.java
        │                   │   │       ├── IMemoryLayout.java
        │                   │   │       ├── NullMemoryInterface.java
        │                   │   │       ├── SimpleDynamicMemoryInterface.java
        │                   │   │       ├── SimpleMemoryInterface.java
        │                   │   │       └── VertexLayout.java
        │                   │   ├── meshes/
        │                   │   │   ├── ClientMesh.java
        │                   │   │   ├── EmptyMesh.java
        │                   │   │   ├── IMesh.java
        │                   │   │   ├── MeshType.java
        │                   │   │   ├── ServerMesh.java
        │                   │   │   ├── collectors/
        │                   │   │   │   ├── CulledMeshCollector.java
        │                   │   │   │   ├── IMeshCollector.java
        │                   │   │   │   └── SimpleMeshCollector.java
        │                   │   │   └── data/
        │                   │   │       ├── MeshData.java
        │                   │   │       └── cache/
        │                   │   │           ├── IMeshDataCache.java
        │                   │   │           ├── IgnoreMeshDataCache.java
        │                   │   │           ├── MeshDataCacheType.java
        │                   │   │           ├── MeshDataCaches.java
        │                   │   │           └── SimpleMeshDataCache.java
        │                   │   ├── mixins/
        │                   │   │   ├── GameRendererMixin.java
        │                   │   │   ├── LevelRendererMixin.java
        │                   │   │   ├── buffers/
        │                   │   │   │   ├── BufferBuilderMixin.java
        │                   │   │   │   ├── BufferSourceMixin.java
        │                   │   │   │   ├── EntityOutlineGeneratorMixin.java
        │                   │   │   │   ├── MinecraftMixin.java
        │                   │   │   │   ├── OutlineBufferSourceMixin.java
        │                   │   │   │   ├── SheetedDecalTextureGeneratorMixin.java
        │                   │   │   │   ├── SpriteCoordinateExpanderMixin.java
        │                   │   │   │   ├── VertexConsumerMixin.java
        │                   │   │   │   ├── VertexDoubleConsumerMixin.java
        │                   │   │   │   └── VertexMultipleConsumerMixin.java
        │                   │   │   └── compatibility/
        │                   │   │       ├── MinecraftMixin.java
        │                   │   │       ├── ParticleEngineMixin.java
        │                   │   │       ├── RenderTypeMixin.java
        │                   │   │       └── WindowMixin.java
        │                   │   ├── programs/
        │                   │   │   ├── ComputeShaderDefinition.java
        │                   │   │   ├── ComputeShaderProgramLoader.java
        │                   │   │   ├── ComputeShaderPrograms.java
        │                   │   │   ├── LoadComputeShaderEvent.java
        │                   │   │   ├── culling/
        │                   │   │   │   ├── ICullingProgramDispatcher.java
        │                   │   │   │   ├── ICullingProgramSelector.java
        │                   │   │   │   ├── LoadCullingProgramSelectorEvent.java
        │                   │   │   │   ├── PassThroughCullingProgramDispatcher.java
        │                   │   │   │   └── PassThroughCullingProgramSelector.java
        │                   │   │   ├── dispatchers/
        │                   │   │   │   ├── EmptyProgramDispatcher.java
        │                   │   │   │   ├── FixedPolygonProgramDispatcher.java
        │                   │   │   │   ├── IPolygonProgramDispatcher.java
        │                   │   │   │   ├── MeshUploadingProgramDispatcher.java
        │                   │   │   │   └── TransformProgramDispatcher.java
        │                   │   │   ├── overrides/
        │                   │   │   │   ├── IShaderProgramOverride.java
        │                   │   │   │   ├── IShaderProgramOverrides.java
        │                   │   │   │   ├── ITransformShaderProgramOverride.java
        │                   │   │   │   ├── IUploadingShaderProgramOverride.java
        │                   │   │   │   ├── LoadShaderProgramOverridesEvent.java
        │                   │   │   │   └── OverrideProgramType.java
        │                   │   │   └── processing/
        │                   │   │       ├── EmptyPolygonProcessor.java
        │                   │   │       ├── IPolygonProcessor.java
        │                   │   │       └── LoadPolygonProcessorEvent.java
        │                   │   └── utils/
        │                   │       ├── CullerUtils.java
        │                   │       ├── DirectionUtils.java
        │                   │       ├── EmptyIterator.java
        │                   │       ├── FastColorUtils.java
        │                   │       ├── FuzzyMatrix4f.java
        │                   │       ├── IntArrayHashStrategy.java
        │                   │       ├── LoopResetPool.java
        │                   │       ├── MemUtils.java
        │                   │       ├── MutableSize.java
        │                   │       ├── PackedVector2i.java
        │                   │       ├── PoseStackExtension.java
        │                   │       ├── RegistryFilter.java
        │                   │       ├── RenderTypeUtils.java
        │                   │       ├── ResourceLocationUtils.java
        │                   │       ├── SimpleCachedArray.java
        │                   │       ├── SimpleResetPool.java
        │                   │       ├── SimpleTextureTarget.java
        │                   │       ├── TextureUtils.java
        │                   │       └── Vertex.java
        │                   └── features/
        │                       ├── culling/
        │                       │   ├── OrientationCullingFeature.java
        │                       │   ├── OrientationCullingProgramDispatcher.java
        │                       │   ├── OrientationCullingProgramSelector.java
        │                       │   └── OrientationCullingPrograms.java
        │                       ├── emf/
        │                       │   ├── IEMFModelVariant.java
        │                       │   └── mixins/
        │                       │       ├── EMFModelPartMixin.java
        │                       │       └── EMFModelPartWithStateMixin.java
        │                       ├── entities/
        │                       │   ├── AcceleratedEntityRenderingFeature.java
        │                       │   ├── AcceleratedEntityShadowRenderer.java
        │                       │   └── mixins/
        │                       │       ├── EntityRenderDispatcherMixin.java
        │                       │       └── InventoryScreenMixin.java
        │                       ├── filter/
        │                       │   ├── FilterFeature.java
        │                       │   ├── FilterType.java
        │                       │   └── mixins/
        │                       │       ├── AbstractContainerScreenMixin.java
        │                       │       ├── BlockEntityRenderDispatcherMixin.java
        │                       │       ├── ClientHooksMixin.java
        │                       │       ├── ItemRendererMixin.java
        │                       │       └── LevelRendererMixin.java
        │                       ├── ftb/
        │                       │   └── mixins/
        │                       │       └── BaseScreenMixin.java
        │                       ├── geckolib/
        │                       │   └── mixins/
        │                       │       ├── GeoBoneMixin.java
        │                       │       └── GeoRendererMixin.java
        │                       ├── items/
        │                       │   ├── AcceleratedItemRenderingFeature.java
        │                       │   ├── AcceleratedQuadsRenderer.java
        │                       │   ├── BakedModelExtension.java
        │                       │   ├── IAcceleratedBakedModel.java
        │                       │   ├── IAcceleratedBakedQuad.java
        │                       │   ├── colors/
        │                       │   │   ├── BlockLayerColors.java
        │                       │   │   ├── EmptyBlockColor.java
        │                       │   │   ├── EmptyItemColor.java
        │                       │   │   ├── FixedColors.java
        │                       │   │   ├── ILayerColors.java
        │                       │   │   └── ItemLayerColors.java
        │                       │   ├── contexts/
        │                       │   │   ├── AcceleratedModelRenderContext.java
        │                       │   │   ├── AcceleratedQuadsRenderContext.java
        │                       │   │   └── DecorationRenderContext.java
        │                       │   ├── gui/
        │                       │   │   ├── GuiBatchingController.java
        │                       │   │   ├── GuiRenderTypes.java
        │                       │   │   ├── contexts/
        │                       │   │   │   ├── BlitDrawContext.java
        │                       │   │   │   ├── DecoratorDrawContext.java
        │                       │   │   │   ├── FillDrawContext.java
        │                       │   │   │   ├── GradientDrawContext.java
        │                       │   │   │   ├── HighlightDrawContext.java
        │                       │   │   │   ├── IGuiElementContext.java
        │                       │   │   │   ├── ItemRenderContext.java
        │                       │   │   │   └── string/
        │                       │   │   │       ├── ComponentStringDrawContext.java
        │                       │   │   │       ├── FormattedStringDrawContext.java
        │                       │   │   │       ├── IStringDrawContext.java
        │                       │   │   │       ├── Outline8StringDrawContext.java
        │                       │   │   │       └── RawStringDrawContext.java
        │                       │   │   └── renderer/
        │                       │   │       ├── AcceleratedBlitRenderer.java
        │                       │   │       ├── AcceleratedFillRenderer.java
        │                       │   │       └── AcceleratedGradientRenderer.java
        │                       │   └── mixins/
        │                       │       ├── ItemRendererMixin.java
        │                       │       ├── ModelBlockRendererMixin.java
        │                       │       ├── accessors/
        │                       │       │   ├── BlockColorsAccessor.java
        │                       │       │   └── ItemColorsAccessor.java
        │                       │       ├── compatibility/
        │                       │       │   ├── ClientHooksMixin.java
        │                       │       │   └── GuiLayerManagerMixin.java
        │                       │       ├── gui/
        │                       │       │   ├── AbstractContainerScreenMixin.java
        │                       │       │   ├── FontMixin.java
        │                       │       │   ├── GuiGraphicsMixin.java
        │                       │       │   └── GuiMixin.java
        │                       │       └── models/
        │                       │           ├── BakedCompositeModelMixin.java
        │                       │           ├── BakedModelMixin.java
        │                       │           ├── BakedQuadMixin.java
        │                       │           ├── BakedSeparateTransformsModelMixin.java
        │                       │           ├── MultipartBakedModelMixin.java
        │                       │           ├── SimpleBakedModelMixin.java
        │                       │           └── WeightedBakedModelMixin.java
        │                       ├── modelparts/
        │                       │   └── mixins/
        │                       │       └── ModelPartMixin.java
        │                       ├── simplebedrockmodel/
        │                       │   └── mixins/
        │                       │       └── BedrockPartMixin.java
        │                       ├── text/
        │                       │   ├── AcceleratedBakedGlyphRenderer.java
        │                       │   ├── AcceleratedTextRenderingFeature.java
        │                       │   └── mixins/
        │                       │       ├── BakedGlyphEffectMixin.java
        │                       │       └── BakedGlyphMixin.java
        │                       └── touhoulittlemaid/
        │                           └── mixins/
        │                               ├── GeoBoneMixin.java
        │                               └── IGeoRendererMixin.java
        └── resources/
            ├── META-INF/
            │   ├── accesstransformer.cfg
            │   └── neoforge.mods.toml
            ├── acceleratedrendering.compat.curios.mixins.json
            ├── acceleratedrendering.compat.immediatelyfast.mixins.json
            ├── acceleratedrendering.compat.iris.mixins.json
            ├── acceleratedrendering.core.mixins.json
            ├── acceleratedrendering.feature.entities.mixins.json
            ├── acceleratedrendering.feature.entitymodelfeature.mixins.json
            ├── acceleratedrendering.feature.filter.mixins.json
            ├── acceleratedrendering.feature.ftb.mixins.json
            ├── acceleratedrendering.feature.geckolib.mixins.json
            ├── acceleratedrendering.feature.items.mixins.json
            ├── acceleratedrendering.feature.modelparts.mixins.json
            ├── acceleratedrendering.feature.simplebedrockmodel.mixins.json
            ├── acceleratedrendering.feature.text.mixins.json
            ├── acceleratedrendering.feature.touhoulittlemaid.mixins.json
            └── assets/
                └── acceleratedrendering/
                    ├── lang/
                    │   ├── en_us.json
                    │   └── zh_cn.json
                    └── shaders/
                        ├── compat/
                        │   ├── culling/
                        │   │   ├── iris_block_quad_culling_shader.compute
                        │   │   ├── iris_block_triangle_culling_shader.compute
                        │   │   ├── iris_entity_quad_culling_shader.compute
                        │   │   └── iris_entity_triangle_culling_shader.compute
                        │   ├── processing/
                        │   │   ├── iris_block_quad_processing_shader.compute
                        │   │   ├── iris_block_triangle_processing_shader.compute
                        │   │   ├── iris_entity_quad_processing_shader.compute
                        │   │   ├── iris_entity_triangle_processing_shader.compute
                        │   │   ├── iris_glyph_quad_processing_shader.compute
                        │   │   └── iris_glyph_triangle_processing_shader.compute
                        │   ├── transform/
                        │   │   ├── iris_block_vertex_transform_shader.compute
                        │   │   ├── iris_entity_vertex_transform_shader.compute
                        │   │   └── iris_glyph_vertex_transform_shader.compute
                        │   └── uploading/
                        │       ├── iris_block_mesh_uploading_shader.compute
                        │       ├── iris_entity_mesh_uploading_shader.compute
                        │       └── iris_glyph_mesh_uploading_shader.compute
                        └── core/
                            ├── culling/
                            │   ├── block_quad_culling_shader.compute
                            │   ├── block_triangle_culling_shader.compute
                            │   ├── entity_quad_culling_shader.compute
                            │   ├── entity_triangle_culling_shader.compute
                            │   ├── pass_through_quad_culling_shader.compute
                            │   ├── pass_through_triangle_culling_shader.compute
                            │   ├── pos_tex_color_quad_culling_shader.compute
                            │   ├── pos_tex_color_triangle_culling_shader.compute
                            │   ├── pos_tex_quad_culling_shader.compute
                            │   └── pos_tex_triangle_culling_shader.compute
                            ├── transform/
                            │   ├── block_vertex_transform_shader.compute
                            │   ├── entity_vertex_transform_shader.compute
                            │   ├── pos_color_tex_light_vertex_transform_shader.compute
                            │   ├── pos_color_vertex_transform_shader.compute
                            │   ├── pos_tex_color_vertex_transform_shader.compute
                            │   ├── pos_tex_vertex_transform_shader.compute
                            │   └── pos_vertex_transform_shader.compute
                            └── uploading/
                                ├── block_mesh_uploading_shader.compute
                                ├── entity_mesh_uploading_shader.compute
                                ├── pos_color_mesh_uploading_shader.compute
                                ├── pos_color_tex_light_mesh_uploading_shader.compute
                                ├── pos_mesh_uploading_shader.compute
                                ├── pos_tex_color_mesh_uploading_shader.compute
                                └── pos_tex_mesh_uploading_shader.compute
Download .txt
SYMBOL INDEX (1515 symbols across 272 files)

FILE: src/main/java/com/github/argon4w/acceleratedrendering/AcceleratedRenderingModEntry.java
  class AcceleratedRenderingModEntry (line 14) | @Mod(
    method AcceleratedRenderingModEntry (line 23) | public AcceleratedRenderingModEntry(IEventBus modEventBus, ModContaine...

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/AbstractCompatMixinPlugin.java
  class AbstractCompatMixinPlugin (line 11) | public abstract class AbstractCompatMixinPlugin implements IMixinConfigP...
    method AbstractCompatMixinPlugin (line 15) | public AbstractCompatMixinPlugin() {
    method getModIDs (line 27) | protected abstract List<String> getModIDs();
    method shouldApplyMixin (line 29) | @Override
    method getRefMapperConfig (line 34) | @Override
    method getMixins (line 39) | @Override
    method onLoad (line 44) | @Override
    method acceptTargets (line 49) | @Override
    method preApply (line 54) | @Override
    method postApply (line 64) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/curios/CuriosCompatFeature.java
  class CuriosCompatFeature (line 15) | public class CuriosCompatFeature {
    method isEnabled (line 25) | public static boolean isEnabled() {
    method testCuriosItem (line 29) | public static boolean testCuriosItem(ItemStack itemStack) {
    method shouldAccelerateCurios (line 33) | public static boolean shouldAccelerateCurios() {
    method shouldFilterCuriosItems (line 37) | public static boolean shouldFilterCuriosItems() {
    method getCuriosItemFilterType (line 41) | public static FilterType getCuriosItemFilterType() {
    method disableLayerAcceleration (line 45) | public static void disableLayerAcceleration() {
    method disableCuriosItemFilter (line 49) | public static void disableCuriosItemFilter() {
    method forceEnableLayerAcceleration (line 53) | public static void forceEnableLayerAcceleration() {
    method forceEnableCuriosItemFilter (line 57) | public static void forceEnableCuriosItemFilter() {
    method forceSetLayerAcceleration (line 61) | public static void forceSetLayerAcceleration(FeatureStatus status) {
    method forceSetCuriosItemFilter (line 65) | public static void forceSetCuriosItemFilter(FeatureStatus status) {
    method resetLayerAcceleration (line 69) | public static void resetLayerAcceleration() {
    method resetCuriosItemFilter (line 73) | public static void resetCuriosItemFilter() {
    method getLayerAccelerationSetting (line 77) | public static FeatureStatus getLayerAccelerationSetting() {
    method getCuriosItemFilterSetting (line 81) | public static FeatureStatus getCuriosItemFilterSetting() {
    method getDefaultLayerAccelerationSettings (line 85) | public static FeatureStatus getDefaultLayerAccelerationSettings() {
    method getDefaultCuriosItemFilterSetting (line 89) | public static FeatureStatus getDefaultCuriosItemFilterSetting() {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/curios/mixins/CuriosLayerMixin.java
  class CuriosLayerMixin (line 24) | @Pseudo
    method startRenderCuriosLayer (line 28) | @Inject(
    method stopRenderCuriosLayer (line 54) | @Inject(
    method filterCuriosItem (line 80) | @WrapOperation(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/immediatelyfast/mixins/BatchableBufferSourceMixin.java
  class BatchableBufferSourceMixin (line 14) | @Pseudo
    method initAcceleration (line 19) | @ModifyReturnValue(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/immediatelyfast/mixins/BatchingBuffersMixin.java
  class BatchingBuffersMixin (line 13) | @Pseudo
    method bindAcceleratableBufferSourceCore1 (line 18) | @ModifyReturnValue(
    method bindAcceleratableBufferSourceCore2 (line 30) | @ModifyReturnValue(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/immediatelyfast/mixins/WrappedRenderLayerMixin.java
  class WrappedRenderLayerMixin (line 13) | @Pseudo
    method saveOriginal (line 20) | @Inject(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/IrisCompatBuffers.java
  class IrisCompatBuffers (line 8) | public class IrisCompatBuffers {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/IrisCompatBuffersProvider.java
  class IrisCompatBuffersProvider (line 7) | public class IrisCompatBuffersProvider {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/IrisCompatFeature.java
  class IrisCompatFeature (line 9) | public class IrisCompatFeature {
    method isEnabled (line 14) | public static boolean isEnabled() {
    method isIrisCompatCullingEnabled (line 18) | public static boolean isIrisCompatCullingEnabled() {
    method isShadowCullingEnabled (line 22) | public static boolean isShadowCullingEnabled() {
    method isPolygonProcessingEnabled (line 26) | public static boolean isPolygonProcessingEnabled() {
    method disableShadowCulling (line 30) | public static void disableShadowCulling() {
    method disablePolygonProcessing (line 34) | public static void disablePolygonProcessing() {
    method forceEnableShadowCulling (line 38) | public static void forceEnableShadowCulling() {
    method forceEnablePolygonProcessing (line 42) | public static void forceEnablePolygonProcessing() {
    method forceSetShadowCulling (line 46) | public static void forceSetShadowCulling(FeatureStatus status) {
    method forceSetIrisPolygonProcessing (line 50) | public static void forceSetIrisPolygonProcessing(FeatureStatus status) {
    method resetShadowCulling (line 54) | public static void resetShadowCulling() {
    method resetPolygonProcessing (line 58) | public static void resetPolygonProcessing() {
    method getShadowCullingSetting (line 62) | public static FeatureStatus getShadowCullingSetting() {
    method getPolygonProcessingSetting (line 66) | public static FeatureStatus getPolygonProcessingSetting() {
    method getDefaultShadowCullingSetting (line 70) | public static FeatureStatus getDefaultShadowCullingSetting() {
    method getDefaultPolygonProcessingSetting (line 74) | public static FeatureStatus getDefaultPolygonProcessingSetting() {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/environments/IrisBufferEnvironment.java
  class IrisBufferEnvironment (line 28) | public class IrisBufferEnvironment implements IBufferEnvironment {
    method IrisBufferEnvironment (line 33) | public IrisBufferEnvironment(
    method getSubSet (line 49) | private IBufferEnvironment getSubSet() {
    method setupBufferState (line 53) | @Override
    method getVertexFormats (line 58) | @Override
    method getLayout (line 63) | @Override
    method getImmediateMeshBuffer (line 68) | @Override
    method getTransformProgramOverride (line 73) | @Override
    method getUploadingProgramOverride (line 78) | @Override
    method selectMeshUploadingProgramDispatcher (line 83) | @Override
    method selectTransformProgramDispatcher (line 88) | @Override
    method selectCullingProgramDispatcher (line 93) | @Override
    method selectProcessingProgramDispatcher (line 98) | @Override
    method isAccelerated (line 103) | @Override
    method getVertexSize (line 108) | @Override
    class IrisSubSet (line 113) | public static class IrisSubSet implements IBufferEnvironment {
      method IrisSubSet (line 125) | public IrisSubSet(
      method setupBufferState (line 146) | @Override
      method isAccelerated (line 151) | @Override
      method getVertexFormats (line 156) | @Override
      method getLayout (line 161) | @Override
      method getImmediateMeshBuffer (line 166) | @Override
      method getTransformProgramOverride (line 171) | @Override
      method getUploadingProgramOverride (line 176) | @Override
      method selectMeshUploadingProgramDispatcher (line 181) | @Override
      method selectTransformProgramDispatcher (line 186) | @Override
      method selectCullingProgramDispatcher (line 191) | @Override
      method selectProcessingProgramDispatcher (line 196) | @Override
      method getVertexSize (line 201) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/interfaces/IIrisAcceleratedBufferBuilder.java
  type IIrisAcceleratedBufferBuilder (line 5) | public interface IIrisAcceleratedBufferBuilder {
    method getEntityIdOffset (line 7) | IMemoryInterface getEntityIdOffset	();
    method getEntityOffset (line 8) | IMemoryInterface getEntityOffset	();

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/interfaces/IIrisMeshInfo.java
  type IIrisMeshInfo (line 3) | public interface IIrisMeshInfo {
    method getRenderedEntity (line 5) | short getRenderedEntity		();
    method getRenderedBlockEntity (line 6) | short getRenderedBlockEntity();
    method getRenderedItem (line 7) | short getRenderedItem		();

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/interfaces/IIrisMeshInfoCache.java
  type IIrisMeshInfoCache (line 3) | public interface IIrisMeshInfoCache {
    method getRenderedEntity (line 5) | short getRenderedEntity		(int i);
    method getRenderedBlockEntity (line 6) | short getRenderedBlockEntity(int i);
    method getRenderedItem (line 7) | short getRenderedItem		(int i);

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/AcceleratedBufferBuilderMixin.java
  class AcceleratedBufferBuilderMixin (line 26) | @Mixin(AcceleratedBufferBuilder.class)
    method constructor (line 35) | @Inject(
    method addIrisVertex (line 52) | @Inject(
    method addIrisVertex (line 74) | @Inject(
    method addIrisMesh (line 86) | @Inject(
    method addIrisData (line 102) | @Unique
    method getEntityIdOffset (line 111) | @Unique
    method getEntityOffset (line 117) | @Unique

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/AcceleratedBufferSourceMixin.java
  class AcceleratedBufferSourceMixin (line 13) | @Mixin(AcceleratedBufferSource.class)
    method unwrapIrisRenderType (line 16) | @ModifyArg(
    method beforeBindDrawBuffers (line 28) | @Inject(
    method afterBindDrawBuffers (line 42) | @Inject(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/AcceleratedRenderingModEntryMixin.java
  class AcceleratedRenderingModEntryMixin (line 12) | @Mixin(AcceleratedRenderingModEntry.class)
    method registerIrisEvents (line 15) | @Inject(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/CoreBuffersProviderMixin.java
  class CoreBuffersProviderMixin (line 10) | @Mixin(CoreBuffersProvider.class)
    method bindAcceleratedBufferSourcesForIris (line 13) | @WrapMethod(method = "bindAcceleratedBufferSources")

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/FlattenMeshInfoCacheMixin.java
  class FlattenMeshInfoCacheMixin (line 19) | @Mixin(FlattenMeshInfoCache.class)
    method modifySize (line 31) | @ModifyConstant(
    method addIrisData (line 47) | @Inject(
    method getRenderedEntity (line 70) | @Override
    method getRenderedBlockEntity (line 75) | @Override
    method getRenderedItem (line 80) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/IBufferEnvironmentPresetsMixin.java
  class IBufferEnvironmentPresetsMixin (line 17) | @Mixin(IBufferEnvironment.Presets.class)
    method useIrisBloockEnvironment (line 24) | @WrapOperation(
    method useIrisEntityEnvironment (line 42) | @WrapOperation(
    method useIrisGlyphEnvironment (line 60) | @WrapOperation(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/MeshUploaderMixin.java
  class MeshUploaderMixin (line 17) | @Mixin(MeshUploaderPool.MeshUploader.class)
    method uploadIrisData (line 26) | @Inject(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/MeshUploadingProgramDispatcherMixin.java
  class MeshUploadingProgramDispatcherMixin (line 17) | @Mixin(MeshUploadingProgramDispatcher.class)
    method addIrisData (line 20) | @Inject(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/RenderTypeUtilsMixin.java
  class RenderTypeUtilsMixin (line 15) | @Mixin(RenderTypeUtils.class)
    method unwrapIrisRenderType1 (line 18) | @ModifyVariable(
    method unwrapIrisRenderType2 (line 28) | @ModifyVariable(
    method unwrapIrisRenderType3 (line 38) | @ModifyVariable(
    method unwrapIrisRenderType4 (line 48) | @ModifyVariable(
    method unwrapIrisRenderType5 (line 58) | @ModifyVariable(
    method getIrisRenderTypeDrawType (line 68) | @Inject(
    method checkIrisTransparency (line 83) | @Inject(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/SimpleMeshInfoCacheMixin.java
  class SimpleMeshInfoCacheMixin (line 12) | @Mixin(SimpleMeshInfoCache.class)
    method getRenderedEntity (line 17) | @Override
    method getRenderedBlockEntity (line 22) | @Override
    method getRenderedItem (line 27) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/SimpleMeshInfoMixin.java
  class SimpleMeshInfoMixin (line 12) | @Mixin(SimpleMeshInfo.class)
    method setIrisData (line 19) | @Inject(method = "setupMeshInfo", at = @At("TAIL"))
    method getRenderedEntity (line 33) | @Unique
    method getRenderedBlockEntity (line 39) | @Unique
    method getRenderedItem (line 45) | @Unique

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/UnsafeMemoryMeshInfoCacheMixin.java
  class UnsafeMemoryMeshInfoCacheMixin (line 18) | @Mixin(UnsafeMemoryMeshInfoCache.class)
    method modifySize (line 30) | @ModifyConstant(
    method addIrisData (line 46) | @Inject(
    method getRenderedEntity (line 69) | @Override
    method getRenderedBlockEntity (line 74) | @Override
    method getRenderedItem (line 79) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/iris/FullyBufferedMultiBufferSourceMixin.java
  class FullyBufferedMultiBufferSourceMixin (line 14) | @Pseudo
    method initAcceleration (line 19) | @ModifyReturnValue(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/iris/HandRendererMixin.java
  class HandRendererMixin (line 26) | @Pseudo
    method bindAcceleratedBufferSourceHand (line 36) | @Inject(
    method startRenderSolidFast (line 46) | @Inject(
    method stopRenderSolidFast (line 65) | @Inject(
    method startRenderTranslucentFast (line 110) | @Inject(
    method stopRenderTranslucentFast (line 129) | @Inject(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/iris/IrisVertexFormatsMixin.java
  class IrisVertexFormatsMixin (line 12) | @Pseudo
    method addPaddingForEntityFormat (line 25) | @WrapOperation(
    method addPaddingForGlyphFormat (line 51) | @WrapOperation(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/iris/ModelToEntityVertexSerializerMixin.java
  class ModelToEntityVertexSerializerMixin (line 9) | @Pseudo
    method modifyMidU (line 13) | @ModifyConstant(
    method modifyMidV (line 21) | @ModifyConstant(
    method modifyTangent (line 29) | @ModifyConstant(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/iris/ShadowRendererMixin.java
  class ShadowRendererMixin (line 28) | @Pseudo
    method bindAcceleratedShadowBufferSources (line 36) | @Inject(method = "<init>", at = @At("TAIL"))
    method endAllBatches (line 56) | @Inject(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/plugin/IrisCompatMixinPlugin.java
  class IrisCompatMixinPlugin (line 7) | public class IrisCompatMixinPlugin extends AbstractCompatMixinPlugin {
    method getModIDs (line 9) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/vanilla/LevelRendererMixin.java
  class LevelRendererMixin (line 21) | @Mixin(
    method drawIrisAllCoreBuffers (line 27) | @Inject(
    method drawIrisOpaqueCoreBuffers (line 72) | @Inject(
    method drawIrisTranslucentCoreBuffers (line 109) | @Inject(
    method preventDrawVanillaCoreBuffers (line 145) | @WrapOperation(
    method deleteIrisBuffers (line 156) | @Inject(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/programs/IrisPrograms.java
  class IrisPrograms (line 14) | public class IrisPrograms {
    method onLoadComputeShaders (line 33) | @SubscribeEvent
    method onLoadCullingPrograms (line 136) | @SubscribeEvent
    method onLoadPolygonProcessors (line 151) | @SubscribeEvent

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/programs/culling/IrisCullingProgramDispatcher.java
  class IrisCullingProgramDispatcher (line 16) | public class IrisCullingProgramDispatcher implements ICullingProgramDisp...
    method IrisCullingProgramDispatcher (line 29) | public IrisCullingProgramDispatcher(VertexFormat.Mode mode, ResourceLo...
    method dispatch (line 39) | @Override
    method shouldCull (line 62) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/programs/culling/IrisCullingProgramSelector.java
  class IrisCullingProgramSelector (line 13) | public class IrisCullingProgramSelector implements ICullingProgramSelect...
    method IrisCullingProgramSelector (line 19) | public IrisCullingProgramSelector(
    method select (line 29) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/programs/processing/IrisPolygonProcessor.java
  class IrisPolygonProcessor (line 10) | public class IrisPolygonProcessor implements IPolygonProcessor {
    method IrisPolygonProcessor (line 16) | public IrisPolygonProcessor(
    method select (line 26) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/configs/FeatureConfig.java
  class FeatureConfig (line 18) | public class FeatureConfig {
    method FeatureConfig (line 101) | private FeatureConfig(ModConfigSpec.Builder builder) {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/configs/FeatureStatus.java
  type FeatureStatus (line 3) | public enum FeatureStatus {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/configs/PipelineSetting.java
  type PipelineSetting (line 3) | public enum PipelineSetting {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/CoreBuffers.java
  class CoreBuffers (line 8) | public class CoreBuffers {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/CoreBuffersProvider.java
  class CoreBuffersProvider (line 11) | @ExtensionMethod(BufferSourceExtension.class)
    method bindAcceleratedBufferSources (line 18) | public static void bindAcceleratedBufferSources(RenderBuffers renderBu...

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/CoreFeature.java
  class CoreFeature (line 23) | public class CoreFeature {
    method isLoaded (line 35) | public static boolean isLoaded() {
    method isConfigLoaded (line 39) | public static boolean isConfigLoaded() {
    method isDebugContextEnabled (line 43) | public static boolean isDebugContextEnabled() {
    method getPooledRingBufferSize (line 47) | public static int getPooledRingBufferSize() {
    method getPooledBatchingSize (line 51) | public static int getPooledBatchingSize() {
    method getCachedImageSize (line 55) | public static int getCachedImageSize() {
    method getDynamicUVResolution (line 59) | public static float getDynamicUVResolution() {
    method shouldForceAccelerateTranslucent (line 63) | public static boolean shouldForceAccelerateTranslucent() {
    method shouldCacheIdenticalPose (line 67) | public static boolean shouldCacheIdenticalPose() {
    method getMeshInfoCacheType (line 71) | public static MeshInfoCacheType getMeshInfoCacheType() {
    method getLayerStorageType (line 75) | public static LayerStorageType getLayerStorageType() {
    method getMeshMergeType (line 79) | public static MeshDataCacheType getMeshMergeType() {
    method shouldUploadMeshImmediately (line 83) | public static boolean shouldUploadMeshImmediately() {
    method shouldCacheDynamicRenderType (line 87) | public static boolean shouldCacheDynamicRenderType() {
    method shouldRestoreBlockBuffers (line 91) | public static boolean shouldRestoreBlockBuffers() {
    method getBlockBufferBindingCacheType (line 95) | public static BlockBufferBindingCacheType getBlockBufferBindingCacheTy...
    method getShaderStorageStateType (line 99) | public static BlockBufferBindingStateType getShaderStorageStateType() {
    method getViewportBindingStateType (line 103) | public static ViewportBindingStateType getViewportBindingStateType() {
    method getScissorBindingStateType (line 107) | public static ScissorBindingStateType getScissorBindingStateType() {
    method getAtomicCounterStateType (line 111) | public static BlockBufferBindingStateType getAtomicCounterStateType() {
    method getShaderStorageRestoringRange (line 115) | public static int getShaderStorageRestoringRange() {
    method getAtomicCounterRestoringRange (line 119) | public static int getAtomicCounterRestoringRange() {
    method createMeshInfoCache (line 123) | public static IMeshInfoCache createMeshInfoCache() {
    method createLayerStorage (line 127) | public static ILayerStorage createLayerStorage() {
    method createMeshDataCache (line 131) | public static IMeshDataCache createMeshDataCache() {
    method createViewportState (line 135) | public static IBindingState createViewportState() {
    method createScissorState (line 139) | public static IBindingState createScissorState() {
    method createShaderStorageState (line 143) | public static IBindingState createShaderStorageState() {
    method createAtomicCounterState (line 147) | public static IBindingState createAtomicCounterState() {
    method packDynamicUV (line 151) | public static int packDynamicUV(float u, float v) {
    method unpackDynamicU (line 155) | public static float unpackDynamicU(int packedUV) {
    method unpackDynamicV (line 159) | public static float unpackDynamicV(int packedUV) {
    method disableForceTranslucentAcceleration (line 163) | public static void disableForceTranslucentAcceleration() {
    method disableCacheIdenticalPose (line 167) | public static void disableCacheIdenticalPose() {
    method forceEnableForceTranslucentAcceleration (line 171) | public static void forceEnableForceTranslucentAcceleration() {
    method forceEnableCacheIdenticalPose (line 175) | public static void forceEnableCacheIdenticalPose() {
    method forceSetForceTranslucentAcceleration (line 179) | public static void forceSetForceTranslucentAcceleration(FeatureStatus ...
    method forceSetCacheIdenticalPose (line 183) | public static void forceSetCacheIdenticalPose(FeatureStatus status) {
    method forceSetDefaultLayer (line 187) | public static void forceSetDefaultLayer(int defaultLayer) {
    method forceSetDefaultLayerBeforeFunction (line 191) | public static void forceSetDefaultLayerBeforeFunction(Runnable runnabl...
    method forceSetDefaultLayerAfterFunction (line 195) | public static void forceSetDefaultLayerAfterFunction(Runnable runnable) {
    method resetForceTranslucentAcceleration (line 199) | public static void resetForceTranslucentAcceleration() {
    method resetCacheIdenticalPose (line 203) | public static void resetCacheIdenticalPose() {
    method resetDefaultLayer (line 207) | public static void resetDefaultLayer() {
    method resetDefaultLayerBeforeFunction (line 211) | public static void resetDefaultLayerBeforeFunction() {
    method resetDefaultLayerAfterFunction (line 215) | public static void resetDefaultLayerAfterFunction() {
    method getForceTranslucentAccelerationSetting (line 219) | public static FeatureStatus getForceTranslucentAccelerationSetting() {
    method getCacheIdenticalPoseSetting (line 223) | public static FeatureStatus getCacheIdenticalPoseSetting() {
    method getDefaultLayer (line 227) | public static int getDefaultLayer() {
    method getDefaultLayerBeforeFunction (line 231) | public static Runnable getDefaultLayerBeforeFunction() {
    method getDefaultLayerAfterFunction (line 235) | public static Runnable getDefaultLayerAfterFunction() {
    method getDefaultForceTranslucentAccelerationSetting (line 239) | public static FeatureStatus getDefaultForceTranslucentAccelerationSett...
    method getDefaultCacheIdenticalPoseSetting (line 243) | public static FeatureStatus getDefaultCacheIdenticalPoseSetting() {
    method setRenderingLevel (line 247) | public static void setRenderingLevel() {
    method resetRenderingLevel (line 251) | public static void resetRenderingLevel() {
    method setRenderingHand (line 255) | public static void setRenderingHand() {
    method resetRenderingHand (line 259) | public static void resetRenderingHand() {
    method setRenderingGui (line 263) | public static void setRenderingGui() {
    method resetRenderingGui (line 267) | public static void resetRenderingGui() {
    method isRenderingLevel (line 271) | public static boolean isRenderingLevel() {
    method isRenderingHand (line 275) | public static boolean isRenderingHand() {
    method isRenderingGui (line 279) | public static boolean isRenderingGui() {
    method setGuiBatching (line 283) | public static void setGuiBatching() {
    method resetGuiBatching (line 287) | public static void resetGuiBatching() {
    method isGuiBatching (line 291) | public static boolean isGuiBatching() {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/CoreStates.java
  class CoreStates (line 5) | public class CoreStates {
    method recordBuffers (line 10) | public static void recordBuffers() {
    method restoreBuffers (line 17) | public static void restoreBuffers() {
    method delete (line 24) | public static void delete() {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/backends/DebugOutput.java
  class DebugOutput (line 6) | public class DebugOutput {
    method enable (line 8) | public static void enable() {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/backends/GLConstants.java
  class GLConstants (line 5) | public class GLConstants {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/backends/Sync.java
  class Sync (line 5) | public class Sync {
    method Sync (line 9) | public Sync() {
    method isSyncSet (line 13) | public boolean isSyncSet() {
    method isSyncSignaled (line 17) | public boolean isSyncSignaled() {
    method waitSync (line 21) | public void waitSync() {
    method setSync (line 25) | public void setSync() {
    method deleteSync (line 29) | public void deleteSync() {
    method resetSync (line 33) | public void resetSync() {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/backends/VertexArray.java
  class VertexArray (line 5) | public class VertexArray {
    method VertexArray (line 9) | public VertexArray() {
    method bind (line 13) | public void bind() {
    method unbind (line 17) | public void unbind() {
    method delete (line 21) | public void delete() {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/backends/buffers/EmptyServerBuffer.java
  class EmptyServerBuffer (line 5) | public class EmptyServerBuffer implements IServerBuffer {
    method getBufferHandle (line 9) | @Override
    method delete (line 14) | @Override
    method bind (line 19) | @Override
    method data (line 24) | @Override
    method bindBase (line 29) | @Override
    method bindRange (line 34) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/backends/buffers/IClientBuffer.java
  type IClientBuffer (line 3) | public interface IClientBuffer {
    method reserve (line 5) | long reserve	(long bytes);
    method reserve (line 6) | long reserve	(long bytes, boolean occupied);
    method addressAt (line 7) | long addressAt	(long position);

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/backends/buffers/IServerBuffer.java
  type IServerBuffer (line 5) | public interface IServerBuffer {
    method getBufferHandle (line 7) | int getBufferHandle ();
    method delete (line 8) | void delete			();
    method data (line 9) | void data			(ByteBuffer	data);
    method bind (line 10) | void bind           (int		target);
    method bindBase (line 11) | void bindBase       (int		target, int index);
    method bindRange (line 12) | void bindRange      (int		target, int index, long offset, long size);

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/backends/buffers/ImmutableBuffer.java
  class ImmutableBuffer (line 7) | public class ImmutableBuffer implements IServerBuffer {
    method ImmutableBuffer (line 11) | public ImmutableBuffer(long size, int bits) {
    method copyTo (line 21) | public void copyTo(IServerBuffer buffer, long size) {
    method map (line 31) | public long map(long length, int bits) {
    method unmap (line 40) | public void unmap() {
    method getBufferHandle (line 44) | @Override
    method delete (line 49) | @Override
    method bind (line 54) | @Override
    method data (line 59) | @Override
    method bindBase (line 68) | @Override
    method bindRange (line 77) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/backends/buffers/MappedBuffer.java
  class MappedBuffer (line 7) | @Getter
    method MappedBuffer (line 14) | public MappedBuffer(long initialSize) {
    method reserve (line 25) | @Override
    method reserve (line 47) | @Override
    method addressAt (line 52) | @Override
    method beforeExpand (line 57) | @Override
    method afterExpand (line 62) | @Override
    method reset (line 67) | public void reset() {
    method getCurrent (line 71) | public long getCurrent() {
    method map (line 75) | public long map() {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/backends/buffers/MutableBuffer.java
  class MutableBuffer (line 7) | public class MutableBuffer extends MutableSize implements IServerBuffer {
    method MutableBuffer (line 13) | public MutableBuffer(long initialSize, int bits) {
    method doExpand (line 20) | @Override
    method map (line 30) | public long map(int flags) {
    method unmap (line 34) | public void unmap() {
    method copyTo (line 38) | public void copyTo(IServerBuffer buffer) {
    method getBufferHandle (line 42) | @Override
    method delete (line 47) | @Override
    method bind (line 52) | @Override
    method data (line 57) | @Override
    method bindBase (line 62) | @Override
    method bindRange (line 67) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/backends/programs/BarrierFlags.java
  type BarrierFlags (line 5) | public enum BarrierFlags {
    method BarrierFlags (line 14) | BarrierFlags(int flag) {
    method getFlags (line 18) | public static int getFlags(BarrierFlags... barrierFlags) {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/backends/programs/ComputeProgram.java
  class ComputeProgram (line 7) | @Getter
    method ComputeProgram (line 13) | public ComputeProgram(int barrierFlags) {
    method dispatch (line 18) | public void dispatch(
    method setup (line 30) | public void setup() {
    method linkProgram (line 34) | public void linkProgram() {
    method isLinked (line 38) | public boolean isLinked() {
    method useProgram (line 42) | public void useProgram() {
    method resetProgram (line 46) | public void resetProgram() {
    method attachShader (line 50) | public void attachShader(ComputeShader computeShader) {
    method waitBarriers (line 54) | public void waitBarriers() {
    method getUniformLocation (line 58) | public int getUniformLocation(String name) {
    method getUniform (line 62) | public Uniform getUniform(String name) {
    method getInfoLog (line 66) | public String getInfoLog() {
    method delete (line 70) | public void delete() {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/backends/programs/ComputeShader.java
  class ComputeShader (line 7) | @Getter
    method ComputeShader (line 12) | public ComputeShader() {
    method setShaderSource (line 16) | public void setShaderSource(String source) {
    method compileShader (line 20) | public void compileShader() {
    method isCompiled (line 24) | public boolean isCompiled() {
    method getInfoLog (line 28) | public String getInfoLog() {
    method delete (line 32) | public void delete() {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/backends/programs/Uniform.java
  class Uniform (line 9) | public class Uniform {
    method Uniform (line 14) | public Uniform(int programHandle, int uniformLocation) {
    method uploadMatrix4f (line 19) | public void uploadMatrix4f(Matrix4f matrix) {
    method uploadUnsignedInt (line 30) | public void uploadUnsignedInt(int value) {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/EmptyBindingState.java
  class EmptyBindingState (line 5) | public class EmptyBindingState implements IBindingState {
    method record (line 9) | @Override
    method restore (line 14) | @Override
    method delete (line 19) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/FramebufferBindingState.java
  class FramebufferBindingState (line 7) | public class FramebufferBindingState implements IBindingState {
    method FramebufferBindingState (line 13) | public FramebufferBindingState() {
    method record (line 19) | @Override
    method restore (line 29) | @Override
    method delete (line 39) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/IBindingState.java
  type IBindingState (line 5) | public interface IBindingState {
    method record (line 7) | void record	(GuiGraphics graphics);
    method restore (line 8) | void restore();
    method delete (line 9) | void delete	();

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/buffers/BlockBufferBindingStateType.java
  type BlockBufferBindingStateType (line 7) | public enum BlockBufferBindingStateType {
    method create (line 12) | public IBindingState create(
    method create (line 25) | public static IBindingState create(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/buffers/BufferBlockType.java
  type BufferBlockType (line 8) | @Getter

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/buffers/SimpleBlockBufferBindingState.java
  class SimpleBlockBufferBindingState (line 10) | public class SimpleBlockBufferBindingState implements IBindingState {
    method SimpleBlockBufferBindingState (line 19) | public SimpleBlockBufferBindingState(
    method record (line 36) | @Override
    method restore (line 48) | @Override
    method delete (line 75) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/buffers/cache/BlockBufferBindingCacheType.java
  type BlockBufferBindingCacheType (line 3) | public enum BlockBufferBindingCacheType {
    method create (line 9) | public IBlockBufferBindingCache create(int size) {
    method create (line 13) | public static IBlockBufferBindingCache create(BlockBufferBindingCacheT...

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/buffers/cache/FlattenBlockBufferBindingCache.java
  class FlattenBlockBufferBindingCache (line 6) | public class FlattenBlockBufferBindingCache implements IBlockBufferBindi...
    method FlattenBlockBufferBindingCache (line 16) | public FlattenBlockBufferBindingCache(int size) {
    method delete (line 20) | @Override
    method setup (line 25) | @Override
    method getBuffer (line 39) | @Override
    method getOffset (line 44) | @Override
    method getSize (line 49) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/buffers/cache/IBlockBufferBindingCache.java
  type IBlockBufferBindingCache (line 3) | public interface IBlockBufferBindingCache {
    method delete (line 5) | void	delete		();
    method setup (line 6) | void	setup		(int bindingPoint, int buffer, long offset, long size);
    method getBuffer (line 7) | int		getBuffer	(int bindingPoint);
    method getOffset (line 8) | long	getOffset	(int bindingPoint);
    method getSize (line 9) | long	getSize		(int bindingPoint);

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/buffers/cache/SimpleBlockBufferBinding.java
  class SimpleBlockBufferBinding (line 5) | @Getter
    method SimpleBlockBufferBinding (line 12) | public SimpleBlockBufferBinding() {
    method setupBlockBufferBinding (line 18) | public void setupBlockBufferBinding(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/buffers/cache/SimpleBlockBufferBindingCache.java
  class SimpleBlockBufferBindingCache (line 3) | public class SimpleBlockBufferBindingCache implements IBlockBufferBindin...
    method SimpleBlockBufferBindingCache (line 7) | public SimpleBlockBufferBindingCache(int size) {
    method delete (line 15) | @Override
    method setup (line 20) | @Override
    method getBuffer (line 34) | @Override
    method getOffset (line 39) | @Override
    method getSize (line 44) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/buffers/cache/UnsafeMemoryBlockBufferBindingCache.java
  class UnsafeMemoryBlockBufferBindingCache (line 6) | public class UnsafeMemoryBlockBufferBindingCache implements IBlockBuffer...
    method UnsafeMemoryBlockBufferBindingCache (line 16) | public UnsafeMemoryBlockBufferBindingCache(int size) {
    method delete (line 20) | @Override
    method setup (line 25) | @Override
    method getBuffer (line 39) | @Override
    method getOffset (line 44) | @Override
    method getSize (line 49) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/scissors/MojangScissorBindingState.java
  class MojangScissorBindingState (line 9) | public class MojangScissorBindingState implements IBindingState {
    method MojangScissorBindingState (line 18) | public MojangScissorBindingState() {
    method record (line 26) | @Override
    method restore (line 47) | @Override
    method delete (line 68) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/scissors/OpenGLScissorBindingState.java
  class OpenGLScissorBindingState (line 11) | public class OpenGLScissorBindingState implements IBindingState {
    method OpenGLScissorBindingState (line 18) | public OpenGLScissorBindingState() {
    method record (line 24) | @Override
    method restore (line 31) | @Override
    method delete (line 52) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/scissors/ScissorBindingStateType.java
  type ScissorBindingStateType (line 6) | public enum ScissorBindingStateType {
    method create (line 12) | public IBindingState create() {
    method create (line 16) | public static IBindingState create(ScissorBindingStateType type) {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/viewports/MojangViewportBindingState.java
  class MojangViewportBindingState (line 7) | public class MojangViewportBindingState implements IBindingState {
    method MojangViewportBindingState (line 14) | public MojangViewportBindingState() {
    method record (line 21) | @Override
    method restore (line 29) | @Override
    method delete (line 45) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/viewports/OpenGLViewportBindingState.java
  class OpenGLViewportBindingState (line 11) | public class OpenGLViewportBindingState implements IBindingState {
    method OpenGLViewportBindingState (line 15) | public OpenGLViewportBindingState() {
    method record (line 19) | @Override
    method restore (line 24) | @Override
    method delete (line 34) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/viewports/ViewportBindingStateType.java
  type ViewportBindingStateType (line 6) | public enum ViewportBindingStateType {
    method create (line 12) | public IBindingState create() {
    method create (line 16) | public static IBindingState create(ViewportBindingStateType type) {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/AcceleratedBufferSources.java
  class AcceleratedBufferSources (line 16) | public class AcceleratedBufferSources implements IAcceleratedBufferSource {
    method AcceleratedBufferSources (line 23) | private AcceleratedBufferSources(
    method getBuffer (line 35) | @Override
    method builder (line 61) | public static Builder builder() {
    class Builder (line 65) | public static class Builder {
      method Builder (line 73) | private Builder() {
      method source (line 81) | public Builder source(AcceleratedBufferSource bufferSource) {
      method mode (line 92) | public Builder mode(VertexFormat.Mode mode) {
      method supportTranslucent (line 97) | public Builder supportTranslucent() {
      method supportDynamic (line 102) | public Builder supportDynamic() {
      method build (line 107) | public AcceleratedBufferSources build() {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/EmptyAcceleratedBufferSources.java
  class EmptyAcceleratedBufferSources (line 7) | public class EmptyAcceleratedBufferSources implements IAcceleratedBuffer...
    method getBuffer (line 11) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/AcceleratedBufferSource.java
  class AcceleratedBufferSource (line 28) | public class AcceleratedBufferSource implements IAcceleratedBufferSource {
    method AcceleratedBufferSource (line 40) | public AcceleratedBufferSource(IBufferEnvironment bufferEnvironment) {
    method delete (line 54) | public void delete() {
    method getBuffer (line 58) | @Override
    method prepareBuffers (line 127) | public void prepareBuffers() {
    method drawBuffers (line 179) | public void drawBuffers(LayerDrawType drawType) {
    method clearBuffers (line 230) | public void clearBuffers() {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/AcceleratedRingBuffers.java
  class AcceleratedRingBuffers (line 31) | public class AcceleratedRingBuffers extends LoopResetPool<AcceleratedRin...
    method AcceleratedRingBuffers (line 33) | public AcceleratedRingBuffers(IBufferEnvironment bufferEnvironment) {
    method create (line 37) | @Override
    method reset (line 42) | @Override
    method delete (line 47) | @Override
    method test (line 52) | @Override
    method init (line 57) | @Override
    method fail (line 62) | @Override
    class Buffers (line 78) | public static class Buffers {
      method Buffers (line 103) | public Buffers(IBufferEnvironment bufferEnvironment) {
      method reset (line 122) | public void reset() {
      method bindTransformBuffers (line 138) | public void bindTransformBuffers() {
      method bindElementBuffer (line 144) | public void bindElementBuffer(ElementBufferPool.ElementSegment eleme...
      method bindDrawBuffers (line 155) | public void bindDrawBuffers() {
      method prepare (line 172) | public void prepare() {
      method unbindVertexArray (line 178) | public void unbindVertexArray() {
      method getMeshUploader (line 182) | public MeshUploaderPool.MeshUploader getMeshUploader() {
      method getVertexBuffer (line 186) | public StagingBufferPool.StagingBuffer getVertexBuffer() {
      method getVaryingBuffer (line 190) | public StagingBufferPool.StagingBuffer getVaryingBuffer() {
      method getElementSegment (line 194) | public ElementBufferPool.ElementSegment getElementSegment() {
      method getDrawContext (line 198) | public DrawContextPool.DrawContext getDrawContext() {
      method getVertexSize (line 202) | public long getVertexSize() {
      method getSharing (line 206) | public int getSharing() {
      method reserveSharing (line 210) | public long reserveSharing() {
      method setUsed (line 214) | public void setUsed() {
      method setInFlight (line 218) | public void setInFlight() {
      method waitSync (line 223) | protected void waitSync() {
      method isFree (line 236) | public boolean isFree() {
      method delete (line 255) | public void delete() {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/IAcceleratedBufferSource.java
  type IAcceleratedBufferSource (line 6) | public interface IAcceleratedBufferSource {
    method getBuffer (line 8) | AcceleratedBufferBuilder getBuffer(RenderType renderType, Runnable bef...

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/IAccelerationHolder.java
  type IAccelerationHolder (line 9) | public interface IAccelerationHolder {
    method initAcceleration (line 11) | VertexConsumer				initAcceleration(RenderType renderType, Supplier<IAc...
    method getAccelerated (line 12) | AcceleratedBufferBuilder	getAccelerated	();

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/builders/AcceleratedBufferBuilder.java
  class AcceleratedBufferBuilder (line 33) | @EqualsAndHashCode(onlyExplicitlyIncluded = true)
    method AcceleratedBufferBuilder (line 86) | public AcceleratedBufferBuilder(
    method addVertex (line 142) | @Override
    method addVertex (line 161) | @Override
    method setColor (line 194) | @Override
    method setUv (line 213) | @Override
    method setUv1 (line 225) | @Override
    method setUv2 (line 237) | @Override
    method setNormal (line 249) | @Override
    method setNormal (line 278) | @Override
    method addVertex (line 295) | @Override
    method beginTransform (line 340) | @Override
    method endTransform (line 361) | @Override
    method addClientMesh (line 369) | @Override
    method addServerMesh (line 404) | @Override
    method doRender (line 457) | @Override
    method decorate (line 478) | @Override
    method isAccelerated (line 483) | @Override
    method getRenderType (line 488) | @Override
    method getAsLong (line 493) | @Override
    method getVaryingSize (line 498) | public long getVaryingSize() {
    method getTotalVertexCount (line 502) | public int getTotalVertexCount() {
    method isEmpty (line 506) | public boolean isEmpty() {
    method setOutdated (line 510) | public void setOutdated() {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/builders/AcceleratedEntityOutlineGenerator.java
  class AcceleratedEntityOutlineGenerator (line 13) | @AllArgsConstructor
    method getDelegate (line 21) | @Override
    method decorate (line 26) | @Override
    method addClientMesh (line 36) | @Override
    method addServerMesh (line 55) | @Override
    method addVertex (line 72) | @Override
    method addVertex (line 86) | @Override
    method setColor (line 102) | @Override
    method setUv1 (line 112) | @Override
    method setUv2 (line 117) | @Override
    method setNormal (line 122) | @Override
    method setNormal (line 131) | @Override
    method addVertex (line 141) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/builders/AcceleratedSheetedDecalTextureGenerator.java
  class AcceleratedSheetedDecalTextureGenerator (line 14) | @ExtensionMethod	(VertexConsumerExtension.class)
    method AcceleratedSheetedDecalTextureGenerator (line 33) | public AcceleratedSheetedDecalTextureGenerator(
    method getDelegate (line 52) | @Override
    method decorate (line 57) | @Override
    method addClientMesh (line 69) | @Override
    method addServerMesh (line 88) | @Override
    method addVertex (line 105) | @Override
    method setUv (line 123) | @Override
    method setColor (line 128) | @Override
    method setNormal (line 139) | @Override
    method addVertex (line 179) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/builders/AcceleratedSpriteCoordinateExpander.java
  class AcceleratedSpriteCoordinateExpander (line 9) | @AllArgsConstructor
    method getDelegate (line 17) | @Override
    method decorate (line 22) | @Override
    method setUv (line 32) | @Override
    method addVertex (line 41) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/builders/AcceleratedVertexConsumerWrapper.java
  class AcceleratedVertexConsumerWrapper (line 15) | @ExtensionMethod(VertexConsumerExtension.class)
    method decorate (line 18) | @Override
    method getDelegate (line 20) | protected	abstract VertexConsumer getDelegate	();
    method beginTransform (line 22) | @Override
    method endTransform (line 29) | @Override
    method isAccelerated (line 36) | @Override
    method getRenderType (line 43) | @Override
    method getLayout (line 50) | @Override
    method getPolygonSize (line 57) | @Override
    method addClientMesh (line 64) | @Override
    method addServerMesh (line 83) | @Override
    method doRender (line 100) | @Override
    method addVertex (line 121) | @Override
    method addVertex (line 135) | @Override
    method setColor (line 151) | @Override
    method setUv (line 167) | @Override
    method setUv1 (line 173) | @Override
    method setUv2 (line 179) | @Override
    method setNormal (line 185) | @Override
    method setNormal (line 199) | @Override
    method addVertex (line 215) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/builders/BufferSourceExtension.java
  class BufferSourceExtension (line 5) | public class BufferSourceExtension {
    method getAcceleratable (line 7) | public static IAcceleratableBufferSource getAcceleratable(MultiBufferS...

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/builders/IAcceleratableBufferSource.java
  type IAcceleratableBufferSource (line 7) | public interface IAcceleratableBufferSource {
    method getBoundAcceleratedBufferSource (line 9) | Supplier<IAcceleratedBufferSource>	getBoundAcceleratedBufferSource	();
    method isBufferSourceAcceleratable (line 10) | boolean								isBufferSourceAcceleratable		();
    method bindAcceleratedBufferSource (line 11) | void								bindAcceleratedBufferSource		(Supplier<IAcceleratedBufferS...

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/builders/IAcceleratedVertexConsumer.java
  type IAcceleratedVertexConsumer (line 16) | public interface IAcceleratedVertexConsumer extends IBufferDecorator, IB...
    method decorate (line 18) | @Override
    method beginTransform (line 23) | default void beginTransform(Matrix4f transform,	Matrix3f normal) {
    method endTransform (line 27) | default void endTransform() {
    method isAccelerated (line 31) | default boolean isAccelerated() {
    method getRenderType (line 35) | default RenderType getRenderType() {
    method getLayout (line 39) | default VertexLayout getLayout() {
    method getPolygonSize (line 43) | default int getPolygonSize() {
    method downloadTexture (line 47) | default NativeImage downloadTexture() {
    method doRender (line 51) | default <T> void doRender(
    method addClientMesh (line 63) | default void addClientMesh(
    method addServerMesh (line 73) | default void addServerMesh(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/builders/IBufferGraph.java
  type IBufferGraph (line 3) | public interface IBufferGraph {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/builders/VertexConsumerExtension.java
  class VertexConsumerExtension (line 6) | public class VertexConsumerExtension {
    method getAccelerated (line 8) | public static IAcceleratedVertexConsumer getAccelerated(VertexConsumer...
    method getHolder (line 12) | public static IAccelerationHolder getHolder(VertexConsumer in) {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/layers/LayerDrawType.java
  type LayerDrawType (line 3) | public enum LayerDrawType {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/layers/functions/CustomLayerFunction.java
  class CustomLayerFunction (line 8) | public class CustomLayerFunction implements ILayerFunction, Consumer<Run...
    method CustomLayerFunction (line 13) | public CustomLayerFunction() {
    method addBefore (line 18) | @Override
    method addAfter (line 23) | @Override
    method runBefore (line 28) | @Override
    method runAfter (line 33) | @Override
    method reset (line 38) | @Override
    method accept (line 44) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/layers/functions/EmptyLayerFunction.java
  class EmptyLayerFunction (line 3) | public class EmptyLayerFunction implements ILayerFunction {
    method addBefore (line 7) | @Override
    method addAfter (line 12) | @Override
    method runBefore (line 17) | @Override
    method runAfter (line 22) | @Override
    method reset (line 27) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/layers/functions/ILayerFunction.java
  type ILayerFunction (line 3) | public interface ILayerFunction {
    method addBefore (line 5) | void addBefore	(Runnable before);
    method addAfter (line 6) | void addAfter	(Runnable after);
    method runBefore (line 7) | void runBefore	();
    method runAfter (line 8) | void runAfter	();
    method reset (line 9) | void reset		();

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/layers/storage/ILayerContexts.java
  type ILayerContexts (line 5) | public interface ILayerContexts extends Iterable<DrawContextPool.DrawCon...
    method add (line 7) | void	add		(DrawContextPool.DrawContext drawContext);
    method reset (line 8) | void	reset	();
    method prepare (line 9) | void	prepare	();
    method isEmpty (line 10) | boolean	isEmpty	();

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/layers/storage/ILayerStorage.java
  type ILayerStorage (line 5) | public interface ILayerStorage {
    method get (line 7) | ILayerContexts	get		(LayerDrawType type);
    method reset (line 8) | void			reset	();

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/layers/storage/LayerStorageType.java
  type LayerStorageType (line 5) | public enum LayerStorageType {
    method create (line 10) | public ILayerStorage create(int size) {
    method create (line 14) | public static ILayerStorage create(LayerStorageType type, int size) {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/layers/storage/SeparatedLayerStorage.java
  class SeparatedLayerStorage (line 9) | public class SeparatedLayerStorage implements ILayerStorage {
    method SeparatedLayerStorage (line 15) | public SeparatedLayerStorage(int size) {
    method get (line 25) | @Override
    method reset (line 30) | @Override
    class AllContexts (line 36) | public class AllContexts implements ILayerContexts {
      method add (line 38) | @Override
      method reset (line 43) | @Override
      method prepare (line 49) | @Override
      method isEmpty (line 54) | @Override
      method iterator (line 60) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/layers/storage/SimpleLayerContexts.java
  class SimpleLayerContexts (line 8) | public class SimpleLayerContexts implements ILayerContexts {
    method SimpleLayerContexts (line 12) | public SimpleLayerContexts(int size) {
    method add (line 16) | @Override
    method reset (line 21) | @Override
    method prepare (line 26) | @Override
    method isEmpty (line 31) | @Override
    method iterator (line 36) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/layers/storage/empty/EmptyLayerContexts.java
  class EmptyLayerContexts (line 9) | public class EmptyLayerContexts implements ILayerContexts {
    method add (line 13) | @Override
    method reset (line 18) | @Override
    method prepare (line 23) | @Override
    method isEmpty (line 28) | @Override
    method iterator (line 33) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/layers/storage/empty/EmptyLayerStorage.java
  class EmptyLayerStorage (line 7) | public class EmptyLayerStorage implements ILayerStorage {
    method get (line 11) | @Override
    method reset (line 16) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/layers/storage/sorted/SortedLayerContexts.java
  class SortedLayerContexts (line 7) | public class SortedLayerContexts extends SimpleLayerContexts {
    method SortedLayerContexts (line 9) | public SortedLayerContexts(int size) {
    method prepare (line 13) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/layers/storage/sorted/SortedLayerStorage.java
  class SortedLayerStorage (line 8) | public class SortedLayerStorage implements ILayerStorage {
    method SortedLayerStorage (line 12) | public SortedLayerStorage(int size) {
    method get (line 16) | @Override
    method reset (line 21) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/pools/DrawContextPool.java
  class DrawContextPool (line 14) | public class DrawContextPool extends SimpleResetPool<DrawContextPool.Dra...
    method DrawContextPool (line 16) | public DrawContextPool(int size) {
    method create (line 20) | @Override
    method reset (line 25) | @Override
    method delete (line 30) | @Override
    method delete (line 35) | @Override
    method fail (line 40) | @Override
    class DrawContext (line 46) | @Getter
      method DrawContext (line 60) | public DrawContext(int index) {
      method bindComputeBuffers (line 73) | public void bindComputeBuffers(ElementBufferPool.ElementSegment elem...
      method drawElements (line 87) | public void drawElements(VertexFormat.Mode mode) {
      method compareTo (line 95) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/pools/ElementBufferPool.java
  class ElementBufferPool (line 12) | public class ElementBufferPool extends SimpleResetPool<ElementBufferPool...
    method ElementBufferPool (line 19) | public ElementBufferPool(int size) {
    method prepare (line 28) | public void prepare() {
    method reset (line 32) | @Override
    method delete (line 39) | @Override
    method create (line 44) | @Override
    method reset (line 49) | @Override
    method delete (line 54) | @Override
    method test (line 59) | @Override
    class ElementSegment (line 64) | @Getter
      method ElementSegment (line 70) | public ElementSegment() {
      method onExpand (line 76) | @Override
      method reset (line 82) | private void reset() {
      method allocateOffset (line 86) | public void allocateOffset() {
      method countElements (line 90) | public void countElements(int count) {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/pools/StagingBufferPool.java
  class StagingBufferPool (line 12) | public class StagingBufferPool extends SimpleResetPool<StagingBufferPool...
    method StagingBufferPool (line 19) | public StagingBufferPool(int size) {
    method prepare (line 28) | public void prepare() {
    method delete (line 32) | @Override
    method reset (line 38) | @Override
    method create (line 45) | @Override
    method reset (line 50) | @Override
    method delete (line 55) | @Override
    method test (line 60) | @Override
    class StagingBuffer (line 65) | @Getter
      method StagingBuffer (line 70) | public StagingBuffer() {
      method onExpand (line 75) | @Override
      method delete (line 81) | @Override
      method reset (line 86) | @Override
      method poolDelete (line 91) | private void poolDelete() {
      method poolReset (line 95) | private void poolReset() {
      method allocateOffset (line 99) | public void allocateOffset() {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/pools/meshes/FlattenMeshInfoCache.java
  class FlattenMeshInfoCache (line 7) | public class FlattenMeshInfoCache implements IMeshInfoCache {
    method FlattenMeshInfoCache (line 21) | public FlattenMeshInfoCache() {
    method reset (line 27) | @Override
    method delete (line 32) | @Override
    method setup (line 37) | @Override
    method getMeshCount (line 61) | @Override
    method getSharing (line 66) | @Override
    method getShouldCull (line 71) | @Override
    method getColor (line 76) | @Override
    method getLight (line 81) | @Override
    method getOverlay (line 86) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/pools/meshes/IMeshInfoCache.java
  type IMeshInfoCache (line 3) | public interface IMeshInfoCache {
    method reset (line 5) | void	reset			();
    method delete (line 6) | void	delete			();
    method setup (line 7) | void	setup			(int color, int light, int overlay, int sharing, int shou...
    method getMeshCount (line 8) | int		getMeshCount	();
    method getSharing (line 9) | int		getSharing		(int i);
    method getShouldCull (line 10) | int		getShouldCull	(int i);
    method getColor (line 11) | int		getColor		(int i);
    method getLight (line 12) | int		getLight		(int i);
    method getOverlay (line 13) | int		getOverlay		(int i);

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/pools/meshes/MeshInfoCacheType.java
  type MeshInfoCacheType (line 3) | public enum MeshInfoCacheType {
    method create (line 9) | public IMeshInfoCache create() {
    method create (line 13) | public static IMeshInfoCache create(MeshInfoCacheType type) {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/pools/meshes/MeshUploaderPool.java
  class MeshUploaderPool (line 18) | public class MeshUploaderPool extends SimpleResetPool<MeshUploaderPool.M...
    method MeshUploaderPool (line 20) | public MeshUploaderPool() {
    method create (line 24) | @Override
    method reset (line 29) | @Override
    method delete (line 34) | @Override
    method fail (line 39) | @Override
    class MeshUploader (line 45) | public static class MeshUploader implements LongSupplier {
      method MeshUploader (line 61) | public MeshUploader() {
      method addUpload (line 75) | public void addUpload(
      method upload (line 91) | public void upload() {
      method bindBuffers (line 105) | public void bindBuffers() {
      method reset (line 109) | public void reset() {
      method delete (line 114) | public void delete() {
      method getAsLong (line 119) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/pools/meshes/SimpleMeshInfo.java
  class SimpleMeshInfo (line 6) | @Getter
    method SimpleMeshInfo (line 15) | public SimpleMeshInfo() {
    method setupMeshInfo (line 22) | public void setupMeshInfo(
    method reset (line 36) | @Override
    method delete (line 41) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/pools/meshes/SimpleMeshInfoCache.java
  class SimpleMeshInfoCache (line 7) | public class SimpleMeshInfoCache implements IMeshInfoCache, IntFunction<...
    method SimpleMeshInfoCache (line 11) | public SimpleMeshInfoCache() {
    method setup (line 15) | @Override
    method reset (line 32) | @Override
    method delete (line 37) | @Override
    method getMeshCount (line 42) | @Override
    method getSharing (line 47) | @Override
    method getShouldCull (line 52) | @Override
    method getColor (line 57) | @Override
    method getLight (line 62) | @Override
    method getOverlay (line 67) | @Override
    method apply (line 72) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/pools/meshes/UnsafeMemoryMeshInfoCache.java
  class UnsafeMemoryMeshInfoCache (line 6) | public class UnsafeMemoryMeshInfoCache implements IMeshInfoCache {
    method UnsafeMemoryMeshInfoCache (line 20) | public UnsafeMemoryMeshInfoCache() {
    method reset (line 26) | @Override
    method delete (line 31) | @Override
    method setup (line 36) | @Override
    method getMeshCount (line 60) | @Override
    method getSharing (line 65) | @Override
    method getShouldCull (line 70) | @Override
    method getColor (line 75) | @Override
    method getLight (line 80) | @Override
    method getOverlay (line 85) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/renderers/DecoratedRenderer.java
  class DecoratedRenderer (line 8) | @AllArgsConstructor
    method render (line 14) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/renderers/IAcceleratedRenderer.java
  type IAcceleratedRenderer (line 7) | public interface IAcceleratedRenderer<T> {
    method render (line 9) | void render(VertexConsumer vertexConsumer, T context, Matrix4f transfo...

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/renderers/IBufferDecorator.java
  type IBufferDecorator (line 5) | public interface IBufferDecorator {
    method decorate (line 7) | VertexConsumer decorate(VertexConsumer buffer);

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/renderers/SheetedDecalTextureRenderer.java
  class SheetedDecalTextureRenderer (line 9) | public class SheetedDecalTextureRenderer<T> implements IAcceleratedRende...
    method SheetedDecalTextureRenderer (line 16) | public SheetedDecalTextureRenderer(
    method render (line 28) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/environments/IBufferEnvironment.java
  type IBufferEnvironment (line 18) | public interface IBufferEnvironment {
    method getVertexSize (line 20) | int									getVertexSize						();
    method getVertexFormats (line 21) | Set<VertexFormat>					getVertexFormats					();
    method getLayout (line 22) | VertexLayout						getLayout							();
    method getImmediateMeshBuffer (line 23) | IServerBuffer						getImmediateMeshBuffer				();
    method selectMeshUploadingProgramDispatcher (line 24) | MeshUploadingProgramDispatcher		selectMeshUploadingProgramDispatcher();
    method selectTransformProgramDispatcher (line 25) | TransformProgramDispatcher			selectTransformProgramDispatcher	();
    method getTransformProgramOverride (line 26) | ITransformShaderProgramOverride		getTransformProgramOverride			(Render...
    method getUploadingProgramOverride (line 27) | IUploadingShaderProgramOverride		getUploadingProgramOverride			(Render...
    method selectCullingProgramDispatcher (line 28) | ICullingProgramDispatcher			selectCullingProgramDispatcher		(RenderTyp...
    method selectProcessingProgramDispatcher (line 29) | IPolygonProgramDispatcher			selectProcessingProgramDispatcher	(VertexF...
    method isAccelerated (line 30) | boolean								isAccelerated						(VertexFormat		vertexFormat);
    method setupBufferState (line 31) | void								setupBufferState					();
    class Presets (line 33) | class Presets {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/environments/VanillaBufferEnvironment.java
  class VanillaBufferEnvironment (line 25) | public class VanillaBufferEnvironment implements IBufferEnvironment {
    method VanillaBufferEnvironment (line 36) | public VanillaBufferEnvironment(
    method setupBufferState (line 55) | @Override
    method getVertexFormats (line 60) | @Override
    method getLayout (line 65) | @Override
    method getImmediateMeshBuffer (line 70) | @Override
    method getTransformProgramOverride (line 75) | @Override
    method getUploadingProgramOverride (line 80) | @Override
    method selectMeshUploadingProgramDispatcher (line 85) | @Override
    method selectTransformProgramDispatcher (line 90) | @Override
    method selectCullingProgramDispatcher (line 95) | @Override
    method selectProcessingProgramDispatcher (line 100) | @Override
    method isAccelerated (line 105) | @Override
    method getVertexSize (line 110) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/memory/IMemoryInterface.java
  type IMemoryInterface (line 6) | public interface IMemoryInterface {
    method putByte (line 8) | void				putByte		(long	address,	byte		value);
    method putShort (line 9) | void				putShort	(long	address,	short		value);
    method putInt (line 10) | void				putInt		(long	address,	int			value);
    method putInt (line 11) | void				putInt		(long	address,	long		value);
    method putFloat (line 12) | void				putFloat	(long	address,	float		value);
    method putNormal (line 13) | void				putNormal	(long	address,	float		value);
    method putMatrix4f (line 14) | void				putMatrix4f	(long	address,	Matrix4f	value);
    method putMatrix3f (line 15) | void				putMatrix3f	(long	address,	Matrix3f	value);
    method at (line 16) | IMemoryInterface	at			(int	index);

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/memory/IMemoryLayout.java
  type IMemoryLayout (line 3) | public interface IMemoryLayout<T> {
    method getElement (line 5) | IMemoryInterface	getElement		(T element);
    method getElementOffset (line 6) | int					getElementOffset(T element);
    method containsElement (line 7) | boolean				containsElement	(T element);
    method getSize (line 8) | long				getSize			();

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/memory/NullMemoryInterface.java
  class NullMemoryInterface (line 6) | public class NullMemoryInterface implements IMemoryInterface {
    method putByte (line 10) | @Override
    method putShort (line 15) | @Override
    method putInt (line 20) | @Override
    method putInt (line 25) | @Override
    method putFloat (line 30) | @Override
    method putNormal (line 35) | @Override
    method putMatrix4f (line 40) | @Override
    method putMatrix3f (line 45) | @Override
    method at (line 50) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/memory/SimpleDynamicMemoryInterface.java
  class SimpleDynamicMemoryInterface (line 11) | @AllArgsConstructor
    method putByte (line 17) | @Override
    method putShort (line 22) | @Override
    method putInt (line 27) | @Override
    method putInt (line 32) | @Override
    method putFloat (line 37) | @Override
    method putNormal (line 42) | @Override
    method putMatrix4f (line 47) | @Override
    method putMatrix3f (line 52) | @Override
    method at (line 57) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/memory/SimpleMemoryInterface.java
  class SimpleMemoryInterface (line 9) | @AllArgsConstructor
    method putByte (line 15) | @Override
    method putShort (line 20) | @Override
    method putInt (line 25) | @Override
    method putInt (line 30) | @Override
    method putFloat (line 35) | @Override
    method putNormal (line 40) | @Override
    method putMatrix4f (line 45) | @Override
    method putMatrix3f (line 50) | @Override
    method at (line 55) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/memory/VertexLayout.java
  class VertexLayout (line 6) | public class VertexLayout implements IMemoryLayout<VertexFormatElement> {
    method VertexLayout (line 13) | public VertexLayout(VertexFormat vertexFormat) {
    method getElement (line 31) | @Override
    method getElementOffset (line 36) | @Override
    method containsElement (line 41) | @Override
    method getSize (line 46) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/meshes/ClientMesh.java
  class ClientMesh (line 13) | @AllArgsConstructor
    method write (line 19) | @Override
    class Builder (line 35) | public static class Builder implements IMesh.Builder {
      method Builder (line 41) | private Builder() {
      method build (line 45) | @Override
      method build (line 86) | @Override
      method delete (line 91) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/meshes/EmptyMesh.java
  class EmptyMesh (line 5) | public class EmptyMesh implements IMesh {
    method write (line 9) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/meshes/IMesh.java
  type IMesh (line 6) | public interface IMesh {
    method write (line 8) | void write(IAcceleratedVertexConsumer extension, int color, int light,...
    type Builder (line 10) | interface Builder {
      method build (line 12) | IMesh	build	(IMeshCollector collector);
      method build (line 13) | IMesh	build	(IMeshCollector collector, boolean forceDense);
      method delete (line 14) | void	delete	();

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/meshes/MeshType.java
  type MeshType (line 5) | @Getter
    method MeshType (line 13) | MeshType(IMesh.Builder builder) {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/meshes/ServerMesh.java
  method write (line 29) | @Override
  class Builder (line 44) | public static class Builder implements IMesh.Builder {
    method Builder (line 55) | private Builder() {
    method build (line 59) | @Override
    method build (line 152) | @Override
    method delete (line 157) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/meshes/collectors/CulledMeshCollector.java
  class CulledMeshCollector (line 13) | public class CulledMeshCollector implements VertexConsumer, IMeshCollect...
    method CulledMeshCollector (line 23) | public CulledMeshCollector(IAcceleratedVertexConsumer vertexConsumer) {
    method flush (line 33) | @Override
    method addVertex (line 62) | @Override
    method setColor (line 77) | @Override
    method setUv (line 96) | @Override
    method setUv1 (line 108) | @Override
    method setUv2 (line 113) | @Override
    method setNormal (line 125) | @Override
    method getData (line 141) | @Override
    method getBuffer (line 146) | @Override
    method getLayout (line 151) | @Override
    method getVertexCount (line 156) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/meshes/collectors/IMeshCollector.java
  type IMeshCollector (line 7) | public interface IMeshCollector {
    method getData (line 9) | MeshData			getData			();
    method getBuffer (line 10) | ByteBufferBuilder	getBuffer		();
    method getLayout (line 11) | VertexLayout		getLayout		();
    method getVertexCount (line 12) | int					getVertexCount	();
    method flush (line 13) | void				flush			();

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/meshes/collectors/SimpleMeshCollector.java
  class SimpleMeshCollector (line 13) | public class SimpleMeshCollector implements VertexConsumer, IMeshCollect...
    method SimpleMeshCollector (line 30) | public SimpleMeshCollector(VertexLayout layout) {
    method flush (line 46) | @Override
    method addVertex (line 51) | @Override
    method setColor (line 77) | @Override
    method setUv (line 103) | @Override
    method setUv1 (line 117) | @Override
    method setUv2 (line 122) | @Override
    method setNormal (line 136) | @Override
    method addVertex (line 159) | @Override
    method getData (line 205) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/meshes/data/MeshData.java
  class MeshData (line 10) | public class MeshData {
    method MeshData (line 14) | private MeshData(int[] data) {
    method builder (line 18) | public static Builder builder() {
    class Builder (line 22) | public static class Builder {
      method Builder (line 27) | public Builder() {
      method setPosition (line 32) | public Builder setPosition(
      method setColor (line 46) | public Builder setColor(
      method setNormal (line 62) | public Builder setNormal(
      method setUv (line 76) | public Builder setUv(float u, float v) {
      method setUv2 (line 81) | public Builder setUv2(int u, int v) {
      method addVertex (line 86) | public Builder addVertex() {
      method addVertex (line 91) | public Builder addVertex(
      method build (line 133) | public MeshData build() {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/meshes/data/cache/IMeshDataCache.java
  type IMeshDataCache (line 7) | public interface IMeshDataCache {
    method set (line 9) | void	set		(VertexLayout layout, MeshData data, IMesh mesh);
    method get (line 10) | IMesh	get		(VertexLayout layout, MeshData data);
    method count (line 11) | int		count	(VertexLayout layout, MeshData data);

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/meshes/data/cache/IgnoreMeshDataCache.java
  class IgnoreMeshDataCache (line 7) | public class IgnoreMeshDataCache implements IMeshDataCache {
    method set (line 9) | @Override
    method get (line 18) | @Override
    method count (line 23) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/meshes/data/cache/MeshDataCacheType.java
  type MeshDataCacheType (line 3) | public enum MeshDataCacheType {
    method create (line 8) | public IMeshDataCache create() {
    method create (line 12) | public static IMeshDataCache create(MeshDataCacheType type) {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/meshes/data/cache/MeshDataCaches.java
  class MeshDataCaches (line 5) | public class MeshDataCaches {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/meshes/data/cache/SimpleMeshDataCache.java
  class SimpleMeshDataCache (line 8) | public class SimpleMeshDataCache implements IMeshDataCache {
    method SimpleMeshDataCache (line 13) | public SimpleMeshDataCache() {
    method set (line 21) | @Override
    method get (line 42) | @Override
    method count (line 47) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/mixins/GameRendererMixin.java
  class GameRendererMixin (line 15) | @Mixin(GameRenderer.class)
    method startRenderItemInHandsFast (line 18) | @Inject(
    method stopRenderItemInHandsFast (line 35) | @Inject(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/mixins/LevelRendererMixin.java
  class LevelRendererMixin (line 25) | @Mixin(
    method startRenderLevel (line 31) | @Inject(
    method stopRenderLevel (line 48) | @Inject(
    method endOutlineBatches (line 65) | @Inject(
    method drawCoreBuffers (line 90) | @WrapOperation(
    method deleteBuffers (line 127) | @Inject(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/mixins/buffers/BufferBuilderMixin.java
  class BufferBuilderMixin (line 20) | @Mixin(BufferBuilder.class)
    method initAcceleration (line 27) | @Unique
    method isAccelerated (line 39) | @Unique
    method doRender (line 45) | @Unique
    method getAccelerated (line 67) | @Unique

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/mixins/buffers/BufferSourceMixin.java
  class BufferSourceMixin (line 18) | @ExtensionMethod(VertexConsumerExtension		.class)
    method getBoundAcceleratedBufferSource (line 24) | @Unique
    method isBufferSourceAcceleratable (line 30) | @Override
    method bindAcceleratedBufferSource (line 35) | @Unique
    method initAcceleration (line 41) | @ModifyReturnValue(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/mixins/buffers/EntityOutlineGeneratorMixin.java
  class EntityOutlineGeneratorMixin (line 18) | @ExtensionMethod(VertexConsumerExtension					.class)
    method decorate (line 25) | @Unique
    method isAccelerated (line 31) | @Unique
    method doRender (line 39) | @Unique

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/mixins/buffers/MinecraftMixin.java
  class MinecraftMixin (line 17) | @ExtensionMethod(BufferSourceExtension	.class)
    method bindAcceleratedBufferSources (line 25) | @Inject(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/mixins/buffers/OutlineBufferSourceMixin.java
  class OutlineBufferSourceMixin (line 16) | @ExtensionMethod(BufferSourceExtension.class)
    method getBoundAcceleratedBufferSource (line 22) | @Unique
    method isBufferSourceAcceleratable (line 30) | @Unique
    method bindAcceleratedBufferSource (line 38) | @Unique

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/mixins/buffers/SheetedDecalTextureGeneratorMixin.java
  class SheetedDecalTextureGeneratorMixin (line 17) | @ExtensionMethod(VertexConsumerExtension		.class)
    method isAccelerated (line 26) | @Unique
    method doRender (line 34) | @Unique

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/mixins/buffers/SpriteCoordinateExpanderMixin.java
  class SpriteCoordinateExpanderMixin (line 19) | @ExtensionMethod(VertexConsumerExtension	.class)
    method decorate (line 26) | @Unique
    method isAccelerated (line 32) | @Unique
    method doRender (line 40) | @Unique

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/mixins/buffers/VertexConsumerMixin.java
  type VertexConsumerMixin (line 8) | @Mixin(VertexConsumer.class)
    method isAccelerated (line 11) | @Unique

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/mixins/buffers/VertexDoubleConsumerMixin.java
  class VertexDoubleConsumerMixin (line 15) | @ExtensionMethod(VertexConsumerExtension.class)
    method isAccelerated (line 22) | @Unique
    method doRender (line 29) | @Unique

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/mixins/buffers/VertexMultipleConsumerMixin.java
  class VertexMultipleConsumerMixin (line 18) | @ExtensionMethod(VertexConsumerExtension.class)
    method constructor (line 26) | @Inject(
    method isAccelerated (line 38) | @Unique
    method doRender (line 44) | @Unique

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/mixins/compatibility/MinecraftMixin.java
  class MinecraftMixin (line 12) | @Mixin(Minecraft.class)
    method setDebugContext (line 15) | @Inject(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/mixins/compatibility/ParticleEngineMixin.java
  class ParticleEngineMixin (line 18) | @Mixin(ParticleEngine.class)
    method disableParticleAcceleration (line 21) | @Inject(
    method resetParticleAcceleration (line 38) | @Inject(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/mixins/compatibility/RenderTypeMixin.java
  class RenderTypeMixin (line 15) | @Mixin(RenderType.class)
    method cacheEnergySwirl (line 21) | @WrapMethod(method = "energySwirl")
    method cacheBreezeWind (line 35) | @WrapMethod(method = "breezeWind")

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/mixins/compatibility/WindowMixin.java
  class WindowMixin (line 8) | @Mixin(Window.class)
    method modifyGlMajorVersion (line 11) | @ModifyConstant(
    method modifyGlMinorVersion (line 22) | @ModifyConstant(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/programs/ComputeShaderProgramLoader.java
  class ComputeShaderProgramLoader (line 19) | public class ComputeShaderProgramLoader extends SimplePreparableReloadLi...
    method prepare (line 25) | @Override
    method apply (line 57) | @Override
    method getProgram (line 98) | public static ComputeProgram getProgram(ResourceLocation resourceLocat...
    method delete (line 108) | public static void delete() {
    method isProgramsLoaded (line 116) | public static boolean isProgramsLoaded() {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/programs/ComputeShaderPrograms.java
  class ComputeShaderPrograms (line 12) | @EventBusSubscriber(
    method onLoadComputeShaders (line 36) | @SubscribeEvent
    method onRegisterResourceReloadListeners (line 137) | @SubscribeEvent

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/programs/LoadComputeShaderEvent.java
  class LoadComputeShaderEvent (line 11) | public class LoadComputeShaderEvent extends Event implements IModBusEvent {
    method LoadComputeShaderEvent (line 15) | public LoadComputeShaderEvent() {
    method loadComputeShader (line 19) | public void loadComputeShader(
    method build (line 27) | public Map<ResourceLocation, ComputeShaderDefinition> build() {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/programs/culling/ICullingProgramDispatcher.java
  type ICullingProgramDispatcher (line 5) | public interface ICullingProgramDispatcher {
    method dispatch (line 7) | int		dispatch	(AcceleratedBufferBuilder builder);
    method shouldCull (line 8) | boolean	shouldCull	();

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/programs/culling/ICullingProgramSelector.java
  type ICullingProgramSelector (line 5) | public interface ICullingProgramSelector {
    method select (line 7) | ICullingProgramDispatcher select(RenderType renderType);

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/programs/culling/LoadCullingProgramSelectorEvent.java
  class LoadCullingProgramSelectorEvent (line 10) | public class LoadCullingProgramSelectorEvent extends Event implements IM...
    method LoadCullingProgramSelectorEvent (line 16) | public LoadCullingProgramSelectorEvent(VertexFormat vertexFormat) {
    method loadFor (line 21) | public void loadFor(VertexFormat vertexFormat, UnaryOperator<ICullingP...

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/programs/culling/PassThroughCullingProgramDispatcher.java
  class PassThroughCullingProgramDispatcher (line 11) | public class PassThroughCullingProgramDispatcher implements ICullingProg...
    method PassThroughCullingProgramDispatcher (line 23) | public PassThroughCullingProgramDispatcher(VertexFormat.Mode mode, Res...
    method dispatch (line 30) | @Override
    method shouldCull (line 48) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/programs/culling/PassThroughCullingProgramSelector.java
  class PassThroughCullingProgramSelector (line 5) | public class PassThroughCullingProgramSelector implements ICullingProgra...
    method select (line 9) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/programs/dispatchers/EmptyProgramDispatcher.java
  class EmptyProgramDispatcher (line 5) | public class EmptyProgramDispatcher implements IPolygonProgramDispatcher {
    method dispatch (line 9) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/programs/dispatchers/FixedPolygonProgramDispatcher.java
  class FixedPolygonProgramDispatcher (line 10) | public class FixedPolygonProgramDispatcher implements IPolygonProgramDis...
    method FixedPolygonProgramDispatcher (line 20) | public FixedPolygonProgramDispatcher(VertexFormat.Mode mode, ResourceL...
    method dispatch (line 27) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/programs/dispatchers/IPolygonProgramDispatcher.java
  type IPolygonProgramDispatcher (line 5) | public interface IPolygonProgramDispatcher {
    method dispatch (line 7) | int dispatch(AcceleratedBufferBuilder builder);

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/programs/dispatchers/MeshUploadingProgramDispatcher.java
  class MeshUploadingProgramDispatcher (line 22) | public class MeshUploadingProgramDispatcher {
    method MeshUploadingProgramDispatcher (line 35) | public MeshUploadingProgramDispatcher() {
    method dispatch (line 42) | public void dispatch(Collection<AcceleratedBufferBuilder> builders, Ac...
    method resetOverride (line 187) | public void resetOverride() {
    class Default (line 191) | public static class Default implements IUploadingShaderProgramOverride {
      method Default (line 201) | public Default(ResourceLocation key, long meshInfoSize) {
      method getMeshInfoSize (line 211) | @Override
      method useProgram (line 216) | @Override
      method setupProgram (line 221) | @Override
      method uploadMeshInfo (line 226) | @Override
      method dispatchUploading (line 231) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/programs/dispatchers/TransformProgramDispatcher.java
  class TransformProgramDispatcher (line 15) | public class TransformProgramDispatcher {
    method TransformProgramDispatcher (line 25) | public TransformProgramDispatcher() {
    method dispatch (line 30) | public void dispatch(Collection<AcceleratedBufferBuilder> builders) {
    method dispatch (line 60) | public int dispatch(
    method resetOverride (line 86) | public void resetOverride() {
    class Default (line 90) | public static class Default implements ITransformShaderProgramOverride {
      method Default (line 98) | public Default(ResourceLocation key, long varyingSize) {
      method getVaryingSize (line 106) | @Override
      method useProgram (line 111) | @Override
      method setupProgram (line 116) | @Override
      method uploadVarying (line 121) | @Override
      method dispatchTransform (line 126) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/programs/overrides/IShaderProgramOverride.java
  type IShaderProgramOverride (line 3) | public interface IShaderProgramOverride {
    method useProgram (line 5) | void useProgram		();
    method setupProgram (line 6) | void setupProgram	();

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/programs/overrides/IShaderProgramOverrides.java
  type IShaderProgramOverrides (line 7) | public interface IShaderProgramOverrides {
    method getTransformOverrides (line 9) | Map<RenderType, ITransformShaderProgramOverride> getTransformOverrides();
    method getUploadingOverrides (line 10) | Map<RenderType, IUploadingShaderProgramOverride> getUploadingOverrides();

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/programs/overrides/ITransformShaderProgramOverride.java
  type ITransformShaderProgramOverride (line 3) | public interface ITransformShaderProgramOverride extends IShaderProgramO...
    method uploadVarying (line 5) | void	uploadVarying		(long	varyingAddress,	int offset);
    method dispatchTransform (line 6) | int		dispatchTransform	(int	vertexCount,	int vertexOffset, int varying...
    method getVaryingSize (line 7) | long	getVaryingSize		();

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/programs/overrides/IUploadingShaderProgramOverride.java
  type IUploadingShaderProgramOverride (line 3) | public interface IUploadingShaderProgramOverride extends IShaderProgramO...
    method uploadMeshInfo (line 5) | void	uploadMeshInfo		(long	meshInfoAddress,	int	meshInfoIndex);
    method dispatchUploading (line 6) | int		dispatchUploading	(int	meshCount,			int	meshSize,	int vertexOffse...
    method getMeshInfoSize (line 7) | long	getMeshInfoSize		();

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/programs/overrides/LoadShaderProgramOverridesEvent.java
  class LoadShaderProgramOverridesEvent (line 10) | public class LoadShaderProgramOverridesEvent extends Event implements IM...
    method LoadShaderProgramOverridesEvent (line 16) | public LoadShaderProgramOverridesEvent(VertexFormat vertexFormat) {
    method loadFor (line 22) | public void loadFor(
    method getOverrides (line 36) | public IShaderProgramOverrides getOverrides(ITransformShaderProgramOve...
    class ProgramOverrides (line 45) | @Getter
      method ProgramOverrides (line 51) | public ProgramOverrides(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/programs/overrides/OverrideProgramType.java
  type OverrideProgramType (line 3) | public enum OverrideProgramType {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/programs/processing/EmptyPolygonProcessor.java
  class EmptyPolygonProcessor (line 7) | public class EmptyPolygonProcessor implements IPolygonProcessor {
    method select (line 11) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/programs/processing/IPolygonProcessor.java
  type IPolygonProcessor (line 6) | public interface IPolygonProcessor {
    method select (line 8) | IPolygonProgramDispatcher select(VertexFormat.Mode mode);

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/programs/processing/LoadPolygonProcessorEvent.java
  class LoadPolygonProcessorEvent (line 10) | public class LoadPolygonProcessorEvent extends Event implements IModBusE...
    method LoadPolygonProcessorEvent (line 16) | public LoadPolygonProcessorEvent(VertexFormat vertexFormat) {
    method loadFor (line 21) | public void loadFor(VertexFormat vertexFormat, UnaryOperator<IPolygonP...

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/utils/CullerUtils.java
  class CullerUtils (line 8) | public class CullerUtils {
    method shouldCull (line 10) | public static boolean shouldCull(Vertex[] vertices, NativeImage textur...

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/utils/DirectionUtils.java
  class DirectionUtils (line 5) | public class DirectionUtils {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/utils/EmptyIterator.java
  class EmptyIterator (line 6) | public class EmptyIterator<T> implements Iterator<T> {
    method hasNext (line 10) | @Override
    method next (line 15) | @Override
    method of (line 20) | @SuppressWarnings("unchecked")

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/utils/FastColorUtils.java
  class FastColorUtils (line 3) | public class FastColorUtils {
    method convert (line 5) | public static int convert(int color) {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/utils/FuzzyMatrix4f.java
  class FuzzyMatrix4f (line 6) | public class FuzzyMatrix4f extends Matrix4f {
    method FuzzyMatrix4f (line 8) | public FuzzyMatrix4f(Matrix4f matrix) {
    method FuzzyMatrix4f (line 12) | public FuzzyMatrix4f() {
    method hashCode (line 16) | @Override
    method equals (line 21) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/utils/IntArrayHashStrategy.java
  class IntArrayHashStrategy (line 7) | public class IntArrayHashStrategy implements Hash.Strategy<int[]> {
    method hashCode (line 11) | @Override
    method equals (line 16) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/utils/LoopResetPool.java
  class LoopResetPool (line 3) | public abstract class LoopResetPool<T, C> extends SimpleResetPool<T, C> {
    method LoopResetPool (line 5) | public LoopResetPool(int size, C context) {
    method get (line 9) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/utils/MemUtils.java
  class MemUtils (line 8) | public class MemUtils {
    method putNormal (line 10) | public static void putNormal(long address, float value) {
    method putMatrix3f (line 14) | public static void putMatrix3f(long address, Matrix3f matrix) {
    method putMatrix4f (line 28) | public static void putMatrix4f(long address, Matrix4f matrix) {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/utils/MutableSize.java
  class MutableSize (line 5) | @Getter
    method MutableSize (line 11) | public MutableSize(long initialSize) {
    method expand (line 16) | public void expand(long bytes) {
    method onExpand (line 31) | public void onExpand(long bytes) {
    method doExpand (line 35) | public void doExpand(long size, long bytes) {
    method beforeExpand (line 39) | public void beforeExpand() {
    method afterExpand (line 43) | public void afterExpand() {
    method resize (line 47) | public void resize(long atLeast) {
    method resizeTo (line 51) | public void resizeTo(long newBufferSize) {
    method resetResized (line 55) | public void resetResized() {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/utils/PackedVector2i.java
  class PackedVector2i (line 3) | public class PackedVector2i {
    method pack (line 5) | public static int pack(float u, float v) {
    method pack (line 9) | public static int pack(int u, int v) {
    method unpackU (line 13) | public static int unpackU(int packed) {
    method unpackV (line 17) | public static int unpackV(int packed) {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/utils/PoseStackExtension.java
  class PoseStackExtension (line 7) | public class PoseStackExtension {
    method setPose (line 9) | public static void setPose(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/utils/RegistryFilter.java
  class RegistryFilter (line 12) | public class RegistryFilter {
    method filterValues (line 14) | public static <T> Set<T> filterValues(Registry<T> registry, List<? ext...

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/utils/RenderTypeUtils.java
  class RenderTypeUtils (line 12) | public class RenderTypeUtils {
    method getTextureLocation (line 16) | public static ResourceLocation getTextureLocation(RenderType renderTyp...
    method isCulled (line 32) | public static boolean isCulled(RenderType renderType) {
    method isDynamic (line 47) | public static boolean isDynamic(RenderType renderType) {
    method hasDepth (line 61) | public static boolean hasDepth(RenderType renderType) {
    method withDepth (line 75) | public static RenderType withDepth(RenderType renderType) {
    method getDrawType (line 124) | public static LayerDrawType getDrawType(RenderType renderType) {
    method isTranslucent (line 128) | public static boolean isTranslucent(RenderType renderType) {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/utils/ResourceLocationUtils.java
  class ResourceLocationUtils (line 6) | public class ResourceLocationUtils {
    method create (line 8) | public static ResourceLocation create(String path) {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/utils/SimpleCachedArray.java
  class SimpleCachedArray (line 5) | public class SimpleCachedArray<T extends SimpleCachedArray.Element> exte...
    method SimpleCachedArray (line 7) | public SimpleCachedArray(int size, IntFunction<T> initializer) {
    method create (line 11) | @Override
    method reset (line 16) | @Override
    method delete (line 21) | @Override
    method fail (line 26) | @Override
    type Element (line 32) | public interface Element {
      method reset (line 34) | void reset	();
      method delete (line 35) | void delete	();

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/utils/SimpleResetPool.java
  class SimpleResetPool (line 7) | public abstract class SimpleResetPool<T, C> {
    method SimpleResetPool (line 15) | public SimpleResetPool(int size, C context) {
    method create (line 27) | protected abstract T	create	(C context, int i);
    method reset (line 28) | protected abstract void	reset	(T t);
    method delete (line 29) | protected abstract void	delete	(T t);
    method get (line 31) | @SuppressWarnings("unchecked")
    method reset (line 45) | @SuppressWarnings("unchecked")
    method delete (line 54) | @SuppressWarnings("unchecked")
    method expand (line 61) | protected void expand() {
    method at (line 72) | @SuppressWarnings("unchecked")
    method get (line 77) | public T get() {
    method init (line 81) | public void init(T t) {
    method fail (line 85) | protected T fail(boolean force) {
    method fail (line 89) | public T fail() {
    method test (line 93) | protected boolean test(T t) {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/utils/SimpleTextureTarget.java
  class SimpleTextureTarget (line 6) | public class SimpleTextureTarget extends TextureTarget {
    method SimpleTextureTarget (line 8) | public SimpleTextureTarget(boolean useDepth) {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/utils/TextureUtils.java
  class TextureUtils (line 20) | @EventBusSubscriber(
    method onResourceManagerReload (line 30) | @Override
    method onRegisterClientReloadListener (line 35) | @SubscribeEvent
    method downloadTexture (line 40) | public static NativeImage downloadTexture(RenderType renderType, int m...

FILE: src/main/java/com/github/argon4w/acceleratedrendering/core/utils/Vertex.java
  class Vertex (line 12) | @Getter
    method Vertex (line 26) | public Vertex() {
    method Vertex (line 34) | public Vertex(Vertex vertex) {
    method getPackedLight (line 42) | public int getPackedLight() {
    method getPackedColor (line 46) | public int getPackedColor() {
    method getPackedNormal (line 55) | public int getPackedNormal() {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/culling/OrientationCullingFeature.java
  class OrientationCullingFeature (line 9) | public class OrientationCullingFeature {
    method isEnabled (line 13) | public static boolean isEnabled() {
    method shouldIgnoreCullState (line 17) | public static boolean shouldIgnoreCullState() {
    method shouldCull (line 21) | public static boolean shouldCull() {
    method disableCulling (line 25) | public static void disableCulling() {
    method forceEnableCulling (line 29) | public static void forceEnableCulling() {
    method forceSetCulling (line 33) | public static void forceSetCulling(FeatureStatus status) {
    method resetCullingSetting (line 37) | public static void resetCullingSetting() {
    method getCullingSetting (line 41) | public static FeatureStatus getCullingSetting() {
    method getDefaultCullingSetting (line 45) | public static FeatureStatus getDefaultCullingSetting() {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/culling/OrientationCullingProgramDispatcher.java
  class OrientationCullingProgramDispatcher (line 12) | public class OrientationCullingProgramDispatcher implements ICullingProg...
    method OrientationCullingProgramDispatcher (line 25) | public OrientationCullingProgramDispatcher(VertexFormat.Mode mode, Res...
    method dispatch (line 35) | @Override
    method shouldCull (line 56) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/culling/OrientationCullingProgramSelector.java
  class OrientationCullingProgramSelector (line 10) | public class OrientationCullingProgramSelector implements ICullingProgra...
    method OrientationCullingProgramSelector (line 16) | public OrientationCullingProgramSelector(
    method select (line 26) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/culling/OrientationCullingPrograms.java
  class OrientationCullingPrograms (line 15) | @EventBusSubscriber(
    method onLoadComputeShaders (line 31) | @SubscribeEvent
    method onLoadCullingPrograms (line 90) | @SubscribeEvent(priority = EventPriority.HIGH)

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/emf/IEMFModelVariant.java
  type IEMFModelVariant (line 3) | public interface IEMFModelVariant {
    method setCurrentVariant (line 5) | void setCurrentVariant(int variant);

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/emf/mixins/EMFModelPartMixin.java
  class EMFModelPartMixin (line 32) | @ExtensionMethod(VertexConsumerExtension.class)
    method renderLikeVanillaFast (line 41) | @Inject(
    method compileFast (line 76) | @Inject(
    method render (line 111) | @Unique
    method setCurrentVariant (line 207) | @Unique
    method renderFast (line 213) | @Unique

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/emf/mixins/EMFModelPartWithStateMixin.java
  class EMFModelPartWithStateMixin (line 11) | @Mixin(EMFModelPartWithState.class)
    method resetEmfVariant (line 16) | @Inject(
    method setEmfVariant (line 24) | @Inject(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/entities/AcceleratedEntityRenderingFeature.java
  class AcceleratedEntityRenderingFeature (line 11) | public class AcceleratedEntityRenderingFeature {
    method isEnabled (line 16) | public static boolean isEnabled() {
    method shouldUseAcceleratedPipeline (line 20) | public static boolean shouldUseAcceleratedPipeline() {
    method shouldAccelerateInGui (line 24) | public static boolean shouldAccelerateInGui() {
    method getMeshType (line 28) | public static MeshType getMeshType() {
    method useVanillaPipeline (line 32) | public static void useVanillaPipeline() {
    method dontAccelerateInGui (line 36) | public static void dontAccelerateInGui() {
    method forceUseAcceleratedPipeline (line 40) | public static void forceUseAcceleratedPipeline() {
    method forceAccelerateInGui (line 44) | public static void forceAccelerateInGui() {
    method forceSetPipeline (line 48) | public static void forceSetPipeline(PipelineSetting pipeline) {
    method forceSetGuiAcceleration (line 52) | public static void forceSetGuiAcceleration(FeatureStatus status) {
    method resetPipeline (line 56) | public static void resetPipeline() {
    method resetGuiAcceleration (line 60) | public static void resetGuiAcceleration() {
    method getPipelineSetting (line 64) | public static PipelineSetting getPipelineSetting() {
    method getGuiAccelerationSetting (line 68) | public static FeatureStatus getGuiAccelerationSetting() {
    method getDefaultPipelineSetting (line 72) | public static PipelineSetting getDefaultPipelineSetting() {
    method getDefaultGuiAccelerationSetting (line 76) | public static FeatureStatus getDefaultGuiAccelerationSetting() {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/entities/AcceleratedEntityShadowRenderer.java
  class AcceleratedEntityShadowRenderer (line 18) | @ExtensionMethod(VertexConsumerExtension.class)
    method render (line 21) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/entities/mixins/EntityRenderDispatcherMixin.java
  class EntityRenderDispatcherMixin (line 24) | @ExtensionMethod(VertexConsumerExtension.class)
    method fastBlockShadow (line 34) | @Inject(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/entities/mixins/InventoryScreenMixin.java
  class InventoryScreenMixin (line 19) | @ExtensionMethod(BufferSourceExtension	.class)
    method renderEntityInInventoryFast (line 23) | @WrapMethod(method = "lambda$renderEntityInInventory$1")

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/filter/FilterFeature.java
  class FilterFeature (line 22) | public class FilterFeature {
    method isEnabled (line 44) | public static boolean isEnabled() {
    method testMenu (line 48) | public static boolean testMenu(AbstractContainerMenu menu) {
    method testEntity (line 52) | public static boolean testEntity(Entity entity) {
    method testBlockEntity (line 56) | public static boolean testBlockEntity(BlockEntity entity) {
    method testItem (line 60) | public static boolean testItem(ItemStack itemStack) {
    method testStage (line 64) | public static boolean testStage(RenderLevelStageEvent.Stage stage) {
    method shouldFilterMenus (line 68) | public static boolean shouldFilterMenus() {
    method shouldFilterEntities (line 72) | public static boolean shouldFilterEntities() {
    method shouldFilterBlockEntities (line 76) | public static boolean shouldFilterBlockEntities() {
    method shouldFilterItems (line 80) | public static boolean shouldFilterItems() {
    method shouldFilterStage (line 84) | public static boolean shouldFilterStage() {
    method getMenuFilterType (line 88) | public static FilterType getMenuFilterType() {
    method getEntityFilterType (line 92) | public static FilterType getEntityFilterType() {
    method getBlockEntityFilterType (line 96) | public static FilterType getBlockEntityFilterType() {
    method getItemFilterType (line 100) | public static FilterType getItemFilterType() {
    method getStageFilterType (line 104) | public static FilterType getStageFilterType() {
    method disableMenuFilter (line 108) | public static void disableMenuFilter() {
    method disableEntityFilter (line 112) | public static void disableEntityFilter() {
    method disableBlockEntityFilter (line 116) | public static void disableBlockEntityFilter() {
    method disableItemFilter (line 120) | public static void disableItemFilter() {
    method disableStageFilter (line 124) | public static void disableStageFilter() {
    method forceEnableMenuFilter (line 128) | public static void forceEnableMenuFilter() {
    method forceEnableEntityFilter (line 132) | public static void forceEnableEntityFilter() {
    method forceEnableBlockEntityFilter (line 136) | public static void forceEnableBlockEntityFilter() {
    method forceEnableItemFilter (line 140) | public static void forceEnableItemFilter() {
    method forceEnableStageFilter (line 144) | public static void forceEnableStageFilter() {
    method forceSetMenuFilter (line 148) | public static void forceSetMenuFilter(FeatureStatus status) {
    method forceSetEntityFilter (line 152) | public static void forceSetEntityFilter(FeatureStatus status) {
    method forceSetBlockEntityFilter (line 156) | public static void forceSetBlockEntityFilter(FeatureStatus status) {
    method forceSetItemFilter (line 160) | public static void forceSetItemFilter(FeatureStatus status) {
    method forceSetStageFilter (line 164) | public static void forceSetStageFilter(FeatureStatus status) {
    method resetMenuFilter (line 168) | public static void resetMenuFilter() {
    method resetEntityFilter (line 172) | public static void resetEntityFilter() {
    method resetBlockEntityFilter (line 176) | public static void resetBlockEntityFilter() {
    method resetItemFilter (line 180) | public static void resetItemFilter() {
    method resetStageFilter (line 184) | public static void resetStageFilter() {
    method getMenuFilterSetting (line 188) | public static FeatureStatus getMenuFilterSetting() {
    method getEntityFilterSetting (line 192) | public static FeatureStatus getEntityFilterSetting() {
    method getBlockEntityFilterSetting (line 196) | public static FeatureStatus getBlockEntityFilterSetting() {
    method getItemFilterSetting (line 200) | public static FeatureStatus getItemFilterSetting() {
    method getStageFilterSetting (line 204) | public static FeatureStatus getStageFilterSetting() {
    method getDefaultMenuFilterSetting (line 208) | public static FeatureStatus getDefaultMenuFilterSetting() {
    method getDefaultEntityFilterSetting (line 212) | public static FeatureStatus getDefaultEntityFilterSetting() {
    method getDefaultBlockEntityFilterSetting (line 216) | public static FeatureStatus getDefaultBlockEntityFilterSetting() {
    method getDefaultItemFilterSetting (line 220) | public static FeatureStatus getDefaultItemFilterSetting() {
    method getDefaultStageFilterSetting (line 224) | public static FeatureStatus getDefaultStageFilterSetting() {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/filter/FilterType.java
  type FilterType (line 5) | public enum FilterType {
    method test (line 10) | public <T> boolean test(Set<T> values, T value) {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/filter/mixins/AbstractContainerScreenMixin.java
  class AbstractContainerScreenMixin (line 16) | @Mixin(value = AbstractContainerScreen.class)
    method startBatching (line 21) | @WrapMethod(method = "render")

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/filter/mixins/BlockEntityRenderDispatcherMixin.java
  class BlockEntityRenderDispatcherMixin (line 14) | @Mixin(BlockEntityRenderDispatcher.class)
    method filterBlockEntity (line 17) | @WrapOperation(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/filter/mixins/ClientHooksMixin.java
  class ClientHooksMixin (line 16) | @Mixin(ClientHooks.class)
    method startRenderLevelStage (line 19) | @WrapOperation(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/filter/mixins/ItemRendererMixin.java
  class ItemRendererMixin (line 17) | @Mixin(
    method filterItem (line 23) | @WrapOperation(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/filter/mixins/LevelRendererMixin.java
  class LevelRendererMixin (line 16) | @Mixin(LevelRenderer.class)
    method filterEntity (line 19) | @WrapOperation(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/ftb/mixins/BaseScreenMixin.java
  class BaseScreenMixin (line 13) | @Pseudo
    method startBatching (line 17) | @Inject(
    method stopBatching (line 44) | @Inject(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/geckolib/mixins/GeoBoneMixin.java
  class GeoBoneMixin (line 26) | @Pseudo
    method render (line 36) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/geckolib/mixins/GeoRendererMixin.java
  type GeoRendererMixin (line 18) | @Pseudo
    method renderCubesOfBoneFast (line 23) | @SuppressWarnings	("unchecked")

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/AcceleratedItemRenderingFeature.java
  class AcceleratedItemRenderingFeature (line 11) | public class AcceleratedItemRenderingFeature {
    method isEnabled (line 18) | public static boolean isEnabled() {
    method shouldUseAcceleratedPipeline (line 22) | public static boolean shouldUseAcceleratedPipeline() {
    method shouldBakeMeshForQuad (line 26) | public static boolean shouldBakeMeshForQuad() {
    method shouldAccelerateInHand (line 30) | public static boolean shouldAccelerateInHand() {
    method shouldAccelerateInGui (line 34) | public static boolean shouldAccelerateInGui() {
    method shouldUseGuiItemBatching (line 38) | public static boolean shouldUseGuiItemBatching() {
    method shouldMergeGuiItemBatches (line 42) | public static boolean shouldMergeGuiItemBatches() {
    method getMeshType (line 46) | public static MeshType getMeshType() {
    method useVanillaPipeline (line 50) | public static void useVanillaPipeline() {
    method dontBakeMeshForQuad (line 54) | public static void dontBakeMeshForQuad() {
    method dontAccelerateInHand (line 58) | public static void dontAccelerateInHand() {
    method dontAccelerateInGui (line 62) | public static void dontAccelerateInGui() {
    method forceUseAcceleratedPipeline (line 66) | public static void forceUseAcceleratedPipeline() {
    method forceBakeMeshForQuad (line 70) | public static void forceBakeMeshForQuad() {
    method forceAccelerateInHand (line 74) | public static void forceAccelerateInHand() {
    method forceAccelerateInGui (line 78) | public static void forceAccelerateInGui() {
    method forceSetPipeline (line 82) | public static void forceSetPipeline(PipelineSetting pipeline) {
    method forceSetBakeQuadForMesh (line 86) | public static void forceSetBakeQuadForMesh(FeatureStatus status) {
    method forceSetHandAcceleration (line 90) | public static void forceSetHandAcceleration(FeatureStatus status) {
    method forceSetGUIAcceleration (line 94) | public static void forceSetGUIAcceleration(FeatureStatus status) {
    method resetPipeline (line 98) | public static void resetPipeline() {
    method resetBakeQuadForMesh (line 102) | public static void resetBakeQuadForMesh() {
    method resetHandAcceleration (line 106) | public static void resetHandAcceleration() {
    method resetGuiAcceleration (line 110) | public static void resetGuiAcceleration() {
    method getPipelineSetting (line 114) | public static PipelineSetting getPipelineSetting() {
    method getBakeQuadMeshSetting (line 118) | public static FeatureStatus getBakeQuadMeshSetting() {
    method getHandAccelerationSetting (line 122) | public static FeatureStatus getHandAccelerationSetting() {
    method getGUIAccelerationSetting (line 126) | public static FeatureStatus getGUIAccelerationSetting() {
    method getDefaultPipelineSetting (line 130) | public static PipelineSetting getDefaultPipelineSetting() {
    method getDefaultBakeQuadMeshSetting (line 134) | public static FeatureStatus getDefaultBakeQuadMeshSetting() {
    method getDefaultHandAccelerationSetting (line 138) | public static FeatureStatus getDefaultHandAccelerationSetting() {
    method getDefaultGUIAccelerationSetting (line 142) | public static FeatureStatus getDefaultGUIAccelerationSetting() {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/AcceleratedQuadsRenderer.java
  class AcceleratedQuadsRenderer (line 11) | @ExtensionMethod({
    method render (line 19) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/BakedModelExtension.java
  class BakedModelExtension (line 6) | public class BakedModelExtension {
    method getAccelerated (line 8) | public static IAcceleratedBakedModel getAccelerated(BakedModel in) {
    method getAccelerated (line 12) | public static IAcceleratedBakedQuad getAccelerated(BakedQuad in) {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/IAcceleratedBakedModel.java
  type IAcceleratedBakedModel (line 11) | public interface IAcceleratedBakedModel {
    method renderItemFast (line 13) | void	renderItemFast		(ItemStack	itemStack,	RandomSource	random, PoseSt...
    method renderBlockFast (line 14) | void	renderBlockFast		(BlockState	blockState, RandomSource	random, Pos...
    method getCustomColor (line 15) | int		getCustomColor 		(int		layer,		int				color);
    method isAccelerated (line 16) | boolean	isAccelerated		();
    method isAcceleratedInHand (line 17) | boolean	isAcceleratedInHand	();
    method isAcceleratedInGui (line 18) | boolean isAcceleratedInGui	();

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/IAcceleratedBakedQuad.java
  type IAcceleratedBakedQuad (line 7) | public interface IAcceleratedBakedQuad {
    method renderFast (line 9) | void	renderFast		(Matrix4f	transform, Matrix3f normal, IAcceleratedVer...
    method getCustomColor (line 10) | int		getCustomColor	(int		color);

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/colors/BlockLayerColors.java
  class BlockLayerColors (line 8) | public class BlockLayerColors implements ILayerColors {
    method BlockLayerColors (line 13) | public BlockLayerColors(BlockState blockState) {
    method getColor (line 18) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/colors/EmptyBlockColor.java
  class EmptyBlockColor (line 8) | public class EmptyBlockColor implements BlockColor {
    method getColor (line 12) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/colors/EmptyItemColor.java
  class EmptyItemColor (line 6) | public class EmptyItemColor implements ItemColor {
    method getColor (line 10) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/colors/FixedColors.java
  method getColor (line 5) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/colors/ILayerColors.java
  type ILayerColors (line 3) | public interface ILayerColors {
    method getColor (line 5) | int getColor(int layer);

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/colors/ItemLayerColors.java
  class ItemLayerColors (line 8) | public class ItemLayerColors implements ILayerColors {
    method ItemLayerColors (line 13) | public ItemLayerColors(ItemStack itemStack) {
    method getColor (line 18) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/gui/GuiBatchingController.java
  class GuiBatchingController (line 39) | @ExtensionMethod({
    method GuiBatchingController (line 60) | private GuiBatchingController() {
    method startBatching (line 74) | public void startBatching(GuiGraphics graphics) {
    method flushBatching (line 87) | @SuppressWarnings("UnstableApiUsage")
    method flushBatching (line 273) | public void flushBatching() {
    method submitBlit (line 301) | public void submitBlit(
    method submitItem (line 344) | public void submitItem(
    method submitFill (line 378) | public void submitFill(
    method submitGradient (line 435) | public void submitGradient(
    method submitCustomDecorator (line 495) | @SuppressWarnings("UnstableApiUsage")
    method submitHighlight (line 525) | public void submitHighlight(
    method submitString (line 552) | public void submitString(IStringDrawContext context) {
    method getLayer (line 563) | private List<IGuiElementContext> getLayer(float depth) {
    method getGlobalDepth (line 574) | public static float getGlobalDepth(
    method delete (line 582) | public void delete() {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/gui/GuiRenderTypes.java
  class GuiRenderTypes (line 12) | public class GuiRenderTypes extends RenderType {
    method GuiRenderTypes (line 32) | private GuiRenderTypes(
    method blit (line 54) | public static RenderType blit(ResourceLocation atlasLocation) {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/gui/contexts/BlitDrawContext.java
  method depth (line 25) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/gui/contexts/DecoratorDrawContext.java
  method depth (line 20) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/gui/contexts/FillDrawContext.java
  method depth (line 21) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/gui/contexts/GradientDrawContext.java
  method depth (line 22) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/gui/contexts/HighlightDrawContext.java
  method depth (line 15) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/gui/contexts/IGuiElementContext.java
  type IGuiElementContext (line 6) | public interface IGuiElementContext {
    method transform (line 8) | Matrix4f	transform	();
    method normal (line 9) | Matrix3f	normal		();
    method depth (line 10) | float		depth		();

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/gui/contexts/ItemRenderContext.java
  method depth (line 20) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/gui/contexts/string/ComponentStringDrawContext.java
  method normal (line 24) | @Override
  method depth (line 29) | @Override
  method drawString (line 34) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/gui/contexts/string/FormattedStringDrawContext.java
  method normal (line 25) | @Override
  method depth (line 30) | @Override
  method drawString (line 35) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/gui/contexts/string/IStringDrawContext.java
  type IStringDrawContext (line 6) | public interface IStringDrawContext extends IGuiElementContext {
    method drawString (line 8) | void drawString(MultiBufferSource buffer);

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/gui/contexts/string/Outline8StringDrawContext.java
  method normal (line 22) | @Override
  method depth (line 27) | @Override
  method drawString (line 32) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/gui/contexts/string/RawStringDrawContext.java
  method normal (line 24) | @Override
  method depth (line 29) | @Override
  method drawString (line 34) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/gui/renderer/AcceleratedBlitRenderer.java
  class AcceleratedBlitRenderer (line 11) | @ExtensionMethod(VertexConsumerExtension.class)
    method render (line 16) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/gui/renderer/AcceleratedFillRenderer.java
  class AcceleratedFillRenderer (line 11) | @ExtensionMethod(VertexConsumerExtension.class)
    method render (line 16) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/gui/renderer/AcceleratedGradientRenderer.java
  class AcceleratedGradientRenderer (line 12) | @ExtensionMethod(VertexConsumerExtension.class)
    method render (line 17) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/mixins/ItemRendererMixin.java
  class ItemRendererMixin (line 23) | @ExtensionMethod(value = {VertexConsumerExtension	.class, BakedModelExte...
    method renderFast (line 27) | @SuppressWarnings	("deprecation")

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/mixins/ModelBlockRendererMixin.java
  class ModelBlockRendererMixin (line 27) | @ExtensionMethod(value = {VertexConsumerExtension	.class, BakedModelExte...
    method renderModelFast (line 31) | @Inject(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/mixins/accessors/BlockColorsAccessor.java
  type BlockColorsAccessor (line 11) | @Mixin(BlockColors.class)
    method getBlockColors (line 14) | @Accessor("blockColors")

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/mixins/accessors/ItemColorsAccessor.java
  type ItemColorsAccessor (line 11) | @Mixin(ItemColors.class)
    method getItemColors (line 14) | @Accessor("itemColors")

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/mixins/compatibility/ClientHooksMixin.java
  class ClientHooksMixin (line 14) | @Mixin(ClientHooks.class)
    method disableAdditionalScreenAcceleration (line 17) | @WrapOperation(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/mixins/compatibility/GuiLayerManagerMixin.java
  class GuiLayerManagerMixin (line 14) | @SuppressWarnings	("UnstableApiUsage")
    method disableAdditionalGuiAcceleration (line 18) | @WrapOperation(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/mixins/gui/AbstractContainerScreenMixin.java
  class AbstractContainerScreenMixin (line 15) | @Mixin(AbstractContainerScreen.class)
    method startBackgroundBatching (line 18) | @Inject(
    method flushBackgroundBatching (line 32) | @Inject(
    method startItemBatching (line 52) | @Inject(
    method flushItemBatching (line 72) | @Inject(
    method startRenderHighlight (line 90) | @WrapMethod(method = "renderSlotHighlight(Lnet/minecraft/client/gui/Gu...

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/mixins/gui/FontMixin.java
  class FontMixin (line 19) | @Mixin(Font.class)
    method isBidirectional (line 22) | @Shadow public abstract boolean isBidirectional();
    method renderGuiStringFast1 (line 24) | @WrapMethod(method = "drawInBatch(Ljava/lang/String;FFIZLorg/joml/Matr...
    method renderGuiStringFast2 (line 70) | @WrapMethod(method = "drawInBatch(Ljava/lang/String;FFIZLorg/joml/Matr...
    method renderGuiStringFast3 (line 118) | @WrapMethod(method = "drawInBatch(Lnet/minecraft/network/chat/Componen...
    method renderGuiStringFast4 (line 163) | @WrapMethod(method = "drawInBatch(Lnet/minecraft/util/FormattedCharSeq...
    method renderGuiStringFast5 (line 208) | @WrapMethod(method = "drawInBatch8xOutline")

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/mixins/gui/GuiGraphicsMixin.java
  class GuiGraphicsMixin (line 27) | @Mixin(GuiGraphics.class)
    method renderFillFast (line 32) | @WrapMethod(method	= "fill(IIIII)V")
    method renderFillFast (line 67) | @WrapMethod(method	= "fill(Lnet/minecraft/client/renderer/RenderType;I...
    method renderGradientFast (line 106) | @WrapMethod(method = "fillGradient(Lnet/minecraft/client/renderer/Rend...
    method renderRenderTypeFast (line 148) | @WrapMethod(method = "fillRenderType")
    method renderBlitFast (line 186) | @WrapMethod(method = "innerBlit(Lnet/minecraft/resources/ResourceLocat...
    method renderBlitFast (line 235) | @WrapMethod(method = "innerBlit(Lnet/minecraft/resources/ResourceLocat...
    method renderDecorationCustomFast (line 297) | @SuppressWarnings	("UnstableApiUsage")
    method renderItemFast (line 339) | @WrapOperation(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/mixins/gui/GuiMixin.java
  class GuiMixin (line 12) | @Mixin(Gui.class)
    method startBatching (line 15) | @Inject(
    method flushBatching (line 27) | @Inject(

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/mixins/models/BakedCompositeModelMixin.java
  class BakedCompositeModelMixin (line 29) | @Getter
    method checkAccelerationSupport (line 39) | @Inject(
    method renderItemFast (line 67) | @Override
    method renderBlockFast (line 90) | @Override
    method getCustomColor (line 130) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/mixins/models/BakedModelMixin.java
  type BakedModelMixin (line 15) | @Mixin(BakedModel.class)
    method renderItemFast (line 18) | @Unique
    method renderBlockFast (line 31) | @Unique
    method isAccelerated (line 47) | @Unique
    method isAcceleratedInHand (line 53) | @Unique
    method isAcceleratedInGui (line 59) | @Unique
    method getCustomColor (line 65) | @Unique

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/mixins/models/BakedQuadMixin.java
  class BakedQuadMixin (line 25) | @Mixin(BakedQuad.class)
    method isTinted (line 33) | @Shadow public abstract			boolean									isTinted();
    method renderFast (line 35) | @Unique
    method getCustomColor (line 120) | @Unique

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/mixins/models/BakedSeparateTransformsModelMixin.java
  class BakedSeparateTransformsModelMixin (line 19) | @ExtensionMethod(BakedModelExtension			.class)
    method renderItemFast (line 25) | @Override
    method renderBlockFast (line 46) | @Override
    method getCustomColor (line 73) | @Override
    method isAccelerated (line 80) | @Override
    method isAcceleratedInHand (line 87) | @Override
    method isAcceleratedInGui (line 94) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/mixins/models/MultipartBakedModelMixin.java
  class MultipartBakedModelMixin (line 29) | @Getter
    method getSelectors (line 41) | @Shadow public abstract BitSet getSelectors(BlockState p_235050_);
    method checkAccelerationSupport (line 44) | @Inject(
    method renderItemFast (line 62) | @Override
    method renderBlockFast (line 74) | @Override
    method getCustomColor (line 124) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/mixins/models/SimpleBakedModelMixin.java
  class SimpleBakedModelMixin (line 42) | @ExtensionMethod(VertexConsumerExtension.class)
    method getQuads (line 46) | @Shadow public abstract List<BakedQuad> getQuads(BlockState pState, Di...
    method renderItemFast (line 51) | @Unique
    method renderBlockFast (line 72) | @Override
    method render (line 95) | @Unique
    method isAccelerated (line 209) | @Unique
    method isAcceleratedInHand (line 215) | @Unique
    method isAcceleratedInGui (line 221) | @Unique
    method getCustomColor (line 227) | @Unique

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/items/mixins/models/WeightedBakedModelMixin.java
  class WeightedBakedModelMixin (line 28) | @Getter
    method checkAccelerationSupport (line 40) | @Inject(
    method renderItemFast (line 58) | @Override
    method renderBlockFast (line 85) | @Override
    method getCustomColor (line 118) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/modelparts/mixins/ModelPartMixin.java
  class ModelPartMixin (line 30) | @ExtensionMethod	(VertexConsumerExtension.class)
    method renderFast (line 39) | @Inject(
    method compileFast (line 74) | @Inject(
    method render (line 109) | @Unique
    method renderFast (line 192) | @Unique

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/simplebedrockmodel/mixins/BedrockPartMixin.java
  class BedrockPartMixin (line 31) | @Pseudo
    method renderFast (line 51) | @Inject(method = "render(Lcom/mojang/blaze3d/vertex/PoseStack;Lcom/moj...
    method compileFast (line 90) | @Inject(
    method render (line 134) | @Unique
    method renderFast (line 207) | @Unique

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/text/AcceleratedBakedGlyphRenderer.java
  class AcceleratedBakedGlyphRenderer (line 19) | @ExtensionMethod(VertexConsumerExtension.class)
    method AcceleratedBakedGlyphRenderer (line 29) | public AcceleratedBakedGlyphRenderer(BakedGlyph bakedGlyph, boolean it...
    method render (line 35) | @Override

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/text/AcceleratedTextRenderingFeature.java
  class AcceleratedTextRenderingFeature (line 11) | public class AcceleratedTextRenderingFeature {
    method isEnabled (line 15) | public static boolean isEnabled() {
    method shouldUseAcceleratedPipeline (line 19) | public static boolean shouldUseAcceleratedPipeline() {
    method getMeshType (line 23) | public static MeshType getMeshType() {
    method useVanillaPipeline (line 27) | public static void useVanillaPipeline() {
    method forceUseAcceleratedPipeline (line 31) | public static void forceUseAcceleratedPipeline() {
    method forceSetPipeline (line 35) | public static void forceSetPipeline(PipelineSetting pipeline) {
    method resetPipeline (line 39) | public static void resetPipeline() {
    method getPipelineSetting (line 43) | public static PipelineSetting getPipelineSetting() {
    method getDefaultPipelineSetting (line 47) | public static PipelineSetting getDefaultPipelineSetting() {

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/text/mixins/BakedGlyphEffectMixin.java
  class BakedGlyphEffectMixin (line 9) | @EqualsAndHashCode

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/text/mixins/BakedGlyphMixin.java
  class BakedGlyphMixin (line 32) | @ExtensionMethod(value = VertexConsumerExtension.class)
    method renderFast (line 47) | @Inject(
    method renderEffectFast (line 93) | @Inject(
    method render (line 131) | @Unique

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/touhoulittlemaid/mixins/GeoBoneMixin.java
  class GeoBoneMixin (line 23) | @Pseudo
    method render (line 33) | @Unique

FILE: src/main/java/com/github/argon4w/acceleratedrendering/features/touhoulittlemaid/mixins/IGeoRendererMixin.java
  type IGeoRendererMixin (line 25) | @Pseudo
    method renderRecursivelyFast (line 30) | @Inject(
    method renderBoneFast (line 74) | @SuppressWarnings	("unchecked")
    method renderRecursivelyFast (line 140) | @Unique
Condensed preview — 359 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (966K chars).
[
  {
    "path": ".gitattributes",
    "chars": 256,
    "preview": "# Disable autocrlf on generated files, they always generate with LF\n# Add any extra files or paths here to make git stop"
  },
  {
    "path": ".github/workflows/build.yml",
    "chars": 1116,
    "preview": "name: Build\n\non: [push, pull_request, workflow_dispatch]\n\njobs:\n  build:\n    runs-on: ubuntu-22.04\n    steps:\n      - na"
  },
  {
    "path": ".gitignore",
    "chars": 163,
    "preview": "# eclipse\nbin\n*.launch\n.settings\n.metadata\n.classpath\n.project\n\n# idea\nout\n*.ipr\n*.iws\n*.iml\n.idea\n\n# gradle\nbuild\n.grad"
  },
  {
    "path": "LICENSE",
    "chars": 1064,
    "preview": "MIT License\n\nCopyright (c) 2023 Argon4W\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof"
  },
  {
    "path": "README.md",
    "chars": 4038,
    "preview": "# 加速渲染 ([EN version](#english))\n\n加速渲染是一个客户端实体渲染优化MOD.\n目的是改善在渲染大量实体或拥有大量顶点的复杂MOD实体的情况下产生的渲染性能问题,\n与此同时尽可能与光影MOD和其他MOD及其自定义"
  },
  {
    "path": "build.gradle",
    "chars": 9349,
    "preview": "plugins {\n    id 'java-library'\n    id 'eclipse'\n    id 'idea'\n    id 'maven-publish'\n    id 'net.neoforged.gradle.userd"
  },
  {
    "path": "changelogs/changelog-1.0.0.md",
    "chars": 675,
    "preview": "## 加速渲染 1.0.0-1.21.1 ALPHA\n- 支持加速原版/类原版MOD生物渲染.\n- 支持加速原版/类原版MOD方块实体渲染.\n- 支持加速物品模型渲染 **(需要开启``核心配置 > 强制加速半透明``)**.\n- 支持加速"
  },
  {
    "path": "changelogs/changelog-1.0.1.md",
    "chars": 691,
    "preview": "## 加速渲染 1.0.1-1.21.1 ALPHA\n- 添加了``核心配置 > 用立即上传模型``选项以保证绘制顺序, 提供更好的兼容性.\n- 添加了``Curios兼容性配置``以控制Curios饰品/装备的渲染加速.\n- 添加了``过"
  },
  {
    "path": "changelogs/changelog-1.0.2.md",
    "chars": 1928,
    "preview": "## 加速渲染 1.0.2-1.21.1 ALPHA\n- 添加了新的Shader Overrides API功能, 以实现更好MOD兼容性.\n- 添加了新的Batching Layer API功能, 以实现更好的MOD兼容性.\n- 添加了`"
  },
  {
    "path": "changelogs/changelog-1.0.3.md",
    "chars": 382,
    "preview": "## 加速渲染 1.0.3-1.21.1 ALPHA\n- 修复了物品装饰 (如通用机械的等级标识) 加速没有正确还原帧缓冲状态导致的渲染异常.\n- 修复了四顶点同UV的面在静态剔除中被错误剔除导致的渲染异常.\n\n## Accelerated"
  },
  {
    "path": "changelogs/changelog-1.0.4.md",
    "chars": 649,
    "preview": "## 加速渲染 1.0.4-1.21.1 ALPHA\n- 修复了与使用块缓冲的MOD和光影的兼容性.\n- 移植到1.20.1 Forge.\n\n## 注意事项\n- 1.20.1移植需要使用**Java 21**进行启动.\n- 1.20.1移植"
  },
  {
    "path": "changelogs/changelog-1.0.5.1.md",
    "chars": 186,
    "preview": "## 加速渲染 1.0.5.1-1.21.1 ALPHA\n- 修复了在模型面没有自定义颜色的情况下获取颜色导致崩溃.\n\n## Accelerated Rendering 1.0.5.1-1.21.1 ALPHA\n- Fixes crashe"
  },
  {
    "path": "changelogs/changelog-1.0.5.md",
    "chars": 197,
    "preview": "## 加速渲染 1.0.5-1.21.1 ALPHA\n- 修复了方块模型加速时从错误的位置获取RenderType导致崩溃.\n\n## Accelerated Rendering 1.0.5-1.21.1 ALPHA\n- Fixes cras"
  },
  {
    "path": "changelogs/changelog-1.0.6.md",
    "chars": 935,
    "preview": "## 加速渲染 1.0.6-1.21.1 ALPHA\n- 添加了``核心配置 > 启用缓存动态RenderType``选项以支持对动态渲染类型的加速.\n- 添加了``核心配置 > 模型合并类型``选项以支持对完全一致模型的合并以改善显存占用"
  },
  {
    "path": "changelogs/changelog-1.0.7.md",
    "chars": 506,
    "preview": "## 加速渲染 1.0.7-1.21.1 ALPHA\n- 添加了``过滤器配置 > 启用容器GUI过滤器``选项以阻止部分在渲染加速后会导致需渲染异常的容器GUI被加速, 提供更好的兼容性.\n- 修复了玩家在物品栏GUI中以错误光照渲染导致"
  },
  {
    "path": "changelogs/changelog-1.0.8.md",
    "chars": 1105,
    "preview": "## 加速渲染 1.0.8-1.21.1 ALPHA\n- 添加了``核心配置 > 裁切区域还原类型``选项以提供对修改了容器GUI渲染的MOD更好的兼容性.\n- 添加了``加速物品渲染配置 > 启用合并GUI物品批次``选项以以提供对修改了"
  },
  {
    "path": "gradle/wrapper/gradle-wrapper.properties",
    "chars": 253,
    "preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributi"
  },
  {
    "path": "gradle.properties",
    "chars": 2382,
    "preview": "# Sets default memory used for gradle commands. Can be overridden by user or command line properties.\norg.gradle.jvmargs"
  },
  {
    "path": "gradlew",
    "chars": 8739,
    "preview": "#!/bin/sh\n\n#\n# Copyright © 2015-2021 the original authors.\n#\n# Licensed under the Apache License, Version 2.0 (the \"Lice"
  },
  {
    "path": "gradlew.bat",
    "chars": 2872,
    "preview": "@rem\n@rem Copyright 2015 the original author or authors.\n@rem\n@rem Licensed under the Apache License, Version 2.0 (the \""
  },
  {
    "path": "settings.gradle",
    "chars": 224,
    "preview": "pluginManagement {\n    repositories {\n        gradlePluginPortal()\n        maven { url = 'https://maven.neoforged.net/re"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/AcceleratedRenderingModEntry.java",
    "chars": 1025,
    "preview": "package com.github.argon4w.acceleratedrendering;\n\nimport com.github.argon4w.acceleratedrendering.configs.FeatureConfig;\n"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/AbstractCompatMixinPlugin.java",
    "chars": 1421,
    "preview": "package com.github.argon4w.acceleratedrendering.compat;\n\nimport net.neoforged.fml.loading.LoadingModList;\nimport org.obj"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/curios/CuriosCompatFeature.java",
    "chars": 3258,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.curios;\n\nimport com.github.argon4w.acceleratedrendering.configs.F"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/curios/mixins/CuriosLayerMixin.java",
    "chars": 4677,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.curios.mixins;\n\nimport com.github.argon4w.acceleratedrendering.co"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/immediatelyfast/mixins/BatchableBufferSourceMixin.java",
    "chars": 1166,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.immediatelyfast.mixins;\n\nimport com.github.argon4w.acceleratedren"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/immediatelyfast/mixins/BatchingBuffersMixin.java",
    "chars": 1434,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.immediatelyfast.mixins;\n\nimport com.github.argon4w.acceleratedren"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/immediatelyfast/mixins/WrappedRenderLayerMixin.java",
    "chars": 926,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.immediatelyfast.mixins;\n\nimport lombok.EqualsAndHashCode;\nimport "
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/IrisCompatBuffers.java",
    "chars": 2933,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.iris;\n\nimport com.github.argon4w.acceleratedrendering.core.buffer"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/IrisCompatBuffersProvider.java",
    "chars": 433,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.iris;\n\nimport com.github.argon4w.acceleratedrendering.core.buffer"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/IrisCompatFeature.java",
    "chars": 2576,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.iris;\n\nimport com.github.argon4w.acceleratedrendering.configs.Fea"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/environments/IrisBufferEnvironment.java",
    "chars": 7590,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.iris.environments;\n\nimport com.github.argon4w.acceleratedrenderin"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/interfaces/IIrisAcceleratedBufferBuilder.java",
    "chars": 289,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.iris.interfaces;\n\nimport com.github.argon4w.acceleratedrendering."
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/interfaces/IIrisMeshInfo.java",
    "chars": 199,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.iris.interfaces;\n\npublic interface IIrisMeshInfo {\n\n\tshort getRen"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/interfaces/IIrisMeshInfoCache.java",
    "chars": 219,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.iris.interfaces;\n\npublic interface IIrisMeshInfoCache {\n\n\tshort g"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/AcceleratedBufferBuilderMixin.java",
    "chars": 4328,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.iris.mixins.acceleratedrendering;\n\nimport com.github.argon4w.acce"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/AcceleratedBufferSourceMixin.java",
    "chars": 2459,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.iris.mixins.acceleratedrendering;\n\nimport com.github.argon4w.acce"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/AcceleratedRenderingModEntryMixin.java",
    "chars": 853,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.iris.mixins.acceleratedrendering;\n\nimport com.github.argon4w.acce"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/CoreBuffersProviderMixin.java",
    "chars": 905,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.iris.mixins.acceleratedrendering;\n\nimport com.github.argon4w.acce"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/FlattenMeshInfoCacheMixin.java",
    "chars": 2852,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.iris.mixins.acceleratedrendering;\n\nimport com.github.argon4w.acce"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/IBufferEnvironmentPresetsMixin.java",
    "chars": 3153,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.iris.mixins.acceleratedrendering;\n\nimport com.github.argon4w.acce"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/MeshUploaderMixin.java",
    "chars": 2338,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.iris.mixins.acceleratedrendering;\n\nimport com.github.argon4w.acce"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/MeshUploadingProgramDispatcherMixin.java",
    "chars": 2235,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.iris.mixins.acceleratedrendering;\n\nimport com.github.argon4w.acce"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/RenderTypeUtilsMixin.java",
    "chars": 3141,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.iris.mixins.acceleratedrendering;\n\nimport com.github.argon4w.acce"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/SimpleMeshInfoCacheMixin.java",
    "chars": 1219,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.iris.mixins.acceleratedrendering;\n\nimport com.github.argon4w.acce"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/SimpleMeshInfoMixin.java",
    "chars": 1541,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.iris.mixins.acceleratedrendering;\n\nimport com.github.argon4w.acce"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/acceleratedrendering/UnsafeMemoryMeshInfoCacheMixin.java",
    "chars": 2872,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.iris.mixins.acceleratedrendering;\n\nimport com.github.argon4w.acce"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/iris/FullyBufferedMultiBufferSourceMixin.java",
    "chars": 1192,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.iris.mixins.iris;\n\nimport com.github.argon4w.acceleratedrendering"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/iris/HandRendererMixin.java",
    "chars": 6995,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.iris.mixins.iris;\n\nimport com.github.argon4w.acceleratedrendering"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/iris/IrisVertexFormatsMixin.java",
    "chars": 2602,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.iris.mixins.iris;\n\nimport com.llamalad7.mixinextras.injector.wrap"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/iris/ModelToEntityVertexSerializerMixin.java",
    "chars": 899,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.iris.mixins.iris;\n\nimport net.irisshaders.iris.vertices.sodium.Mo"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/iris/ShadowRendererMixin.java",
    "chars": 3856,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.iris.mixins.iris;\n\nimport com.github.argon4w.acceleratedrendering"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/plugin/IrisCompatMixinPlugin.java",
    "chars": 334,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.iris.mixins.plugin;\n\nimport com.github.argon4w.acceleratedrenderi"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/mixins/vanilla/LevelRendererMixin.java",
    "chars": 6244,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.iris.mixins.vanilla;\n\nimport com.github.argon4w.acceleratedrender"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/programs/IrisPrograms.java",
    "chars": 7829,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.iris.programs;\n\nimport com.github.argon4w.acceleratedrendering.co"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/programs/culling/IrisCullingProgramDispatcher.java",
    "chars": 3218,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.iris.programs.culling;\n\nimport com.github.argon4w.acceleratedrend"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/programs/culling/IrisCullingProgramSelector.java",
    "chars": 2040,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.iris.programs.culling;\n\nimport com.github.argon4w.acceleratedrend"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/compat/iris/programs/processing/IrisPolygonProcessor.java",
    "chars": 1537,
    "preview": "package com.github.argon4w.acceleratedrendering.compat.iris.programs.processing;\n\nimport com.github.argon4w.acceleratedr"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/configs/FeatureConfig.java",
    "chars": 47267,
    "preview": "package com.github.argon4w.acceleratedrendering.configs;\n\nimport com.github.argon4w.acceleratedrendering.core.backends.s"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/configs/FeatureStatus.java",
    "chars": 109,
    "preview": "package com.github.argon4w.acceleratedrendering.configs;\n\npublic enum FeatureStatus {\n\n\tDISABLED,\n\tENABLED\n}\n"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/configs/PipelineSetting.java",
    "chars": 114,
    "preview": "package com.github.argon4w.acceleratedrendering.configs;\n\npublic enum PipelineSetting {\n\n\tVANILLA,\n\tACCELERATED\n}\n"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/CoreBuffers.java",
    "chars": 2114,
    "preview": "package com.github.argon4w.acceleratedrendering.core;\n\nimport com.github.argon4w.acceleratedrendering.core.buffers.Accel"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/CoreBuffersProvider.java",
    "chars": 1293,
    "preview": "package com.github.argon4w.acceleratedrendering.core;\n\nimport com.github.argon4w.acceleratedrendering.core.buffers.Empty"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/CoreFeature.java",
    "chars": 10494,
    "preview": "package com.github.argon4w.acceleratedrendering.core;\n\nimport com.github.argon4w.acceleratedrendering.configs.FeatureCon"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/CoreStates.java",
    "chars": 858,
    "preview": "package com.github.argon4w.acceleratedrendering.core;\n\nimport com.github.argon4w.acceleratedrendering.core.backends.stat"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/backends/DebugOutput.java",
    "chars": 281,
    "preview": "package com.github.argon4w.acceleratedrendering.core.backends;\n\nimport static org.lwjgl.opengl.GL46.GL_DEBUG_OUTPUT_SYNC"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/backends/GLConstants.java",
    "chars": 570,
    "preview": "package com.github.argon4w.acceleratedrendering.core.backends;\n\nimport static org.lwjgl.opengl.GL46.*;\n\npublic class GLC"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/backends/Sync.java",
    "chars": 675,
    "preview": "package com.github.argon4w.acceleratedrendering.core.backends;\n\nimport static org.lwjgl.opengl.GL46.*;\n\npublic class Syn"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/backends/VertexArray.java",
    "chars": 408,
    "preview": "package com.github.argon4w.acceleratedrendering.core.backends;\n\nimport static org.lwjgl.opengl.GL46.*;\n\npublic class Ver"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/backends/buffers/EmptyServerBuffer.java",
    "chars": 605,
    "preview": "package com.github.argon4w.acceleratedrendering.core.backends.buffers;\n\nimport java.nio.ByteBuffer;\n\npublic class EmptyS"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/backends/buffers/IClientBuffer.java",
    "chars": 215,
    "preview": "package com.github.argon4w.acceleratedrendering.core.backends.buffers;\n\npublic interface IClientBuffer {\n\n\tlong reserve\t"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/backends/buffers/IServerBuffer.java",
    "chars": 367,
    "preview": "package com.github.argon4w.acceleratedrendering.core.backends.buffers;\n\nimport java.nio.ByteBuffer;\n\npublic interface IS"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/backends/buffers/ImmutableBuffer.java",
    "chars": 1417,
    "preview": "package com.github.argon4w.acceleratedrendering.core.backends.buffers;\n\nimport java.nio.ByteBuffer;\n\nimport static org.l"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/backends/buffers/MappedBuffer.java",
    "chars": 1422,
    "preview": "package com.github.argon4w.acceleratedrendering.core.backends.buffers;\n\nimport lombok.Getter;\n\nimport static org.lwjgl.o"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/backends/buffers/MutableBuffer.java",
    "chars": 1464,
    "preview": "package com.github.argon4w.acceleratedrendering.core.backends.buffers;\n\nimport com.github.argon4w.acceleratedrendering.c"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/backends/programs/BarrierFlags.java",
    "chars": 603,
    "preview": "package com.github.argon4w.acceleratedrendering.core.backends.programs;\n\nimport static org.lwjgl.opengl.GL46.*;\n\npublic "
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/backends/programs/ComputeProgram.java",
    "chars": 1360,
    "preview": "package com.github.argon4w.acceleratedrendering.core.backends.programs;\n\nimport lombok.Getter;\n\nimport static org.lwjgl."
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/backends/programs/ComputeShader.java",
    "chars": 693,
    "preview": "package com.github.argon4w.acceleratedrendering.core.backends.programs;\n\nimport lombok.Getter;\n\nimport static org.lwjgl."
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/backends/programs/Uniform.java",
    "chars": 861,
    "preview": "package com.github.argon4w.acceleratedrendering.core.backends.programs;\n\nimport org.joml.Matrix4f;\nimport org.lwjgl.syst"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/EmptyBindingState.java",
    "chars": 390,
    "preview": "package com.github.argon4w.acceleratedrendering.core.backends.states;\n\nimport net.minecraft.client.gui.GuiGraphics;\n\npub"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/FramebufferBindingState.java",
    "chars": 1093,
    "preview": "package com.github.argon4w.acceleratedrendering.core.backends.states;\n\nimport net.minecraft.client.gui.GuiGraphics;\n\nimp"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/IBindingState.java",
    "chars": 224,
    "preview": "package com.github.argon4w.acceleratedrendering.core.backends.states;\n\nimport net.minecraft.client.gui.GuiGraphics;\n\npub"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/buffers/BlockBufferBindingStateType.java",
    "chars": 1152,
    "preview": "package com.github.argon4w.acceleratedrendering.core.backends.states.buffers;\n\nimport com.github.argon4w.acceleratedrend"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/buffers/BufferBlockType.java",
    "chars": 676,
    "preview": "package com.github.argon4w.acceleratedrendering.core.backends.states.buffers;\n\nimport lombok.AllArgsConstructor;\nimport "
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/buffers/SimpleBlockBufferBindingState.java",
    "chars": 2143,
    "preview": "package com.github.argon4w.acceleratedrendering.core.backends.states.buffers;\n\nimport com.github.argon4w.acceleratedrend"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/buffers/cache/BlockBufferBindingCacheType.java",
    "chars": 558,
    "preview": "package com.github.argon4w.acceleratedrendering.core.backends.states.buffers.cache;\n\npublic enum BlockBufferBindingCache"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/buffers/cache/FlattenBlockBufferBindingCache.java",
    "chars": 1562,
    "preview": "package com.github.argon4w.acceleratedrendering.core.backends.states.buffers.cache;\n\nimport java.lang.invoke.MethodHandl"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/buffers/cache/IBlockBufferBindingCache.java",
    "chars": 326,
    "preview": "package com.github.argon4w.acceleratedrendering.core.backends.states.buffers.cache;\n\npublic interface IBlockBufferBindin"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/buffers/cache/SimpleBlockBufferBinding.java",
    "chars": 482,
    "preview": "package com.github.argon4w.acceleratedrendering.core.backends.states.buffers.cache;\n\nimport lombok.Getter;\n\n@Getter\npubl"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/buffers/cache/SimpleBlockBufferBindingCache.java",
    "chars": 937,
    "preview": "package com.github.argon4w.acceleratedrendering.core.backends.states.buffers.cache;\n\npublic class SimpleBlockBufferBindi"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/buffers/cache/UnsafeMemoryBlockBufferBindingCache.java",
    "chars": 1603,
    "preview": "package com.github.argon4w.acceleratedrendering.core.backends.states.buffers.cache;\n\nimport io.netty.util.internal.shade"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/scissors/MojangScissorBindingState.java",
    "chars": 1591,
    "preview": "package com.github.argon4w.acceleratedrendering.core.backends.states.scissors;\n\nimport com.github.argon4w.acceleratedren"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/scissors/OpenGLScissorBindingState.java",
    "chars": 1221,
    "preview": "package com.github.argon4w.acceleratedrendering.core.backends.states.scissors;\n\nimport com.github.argon4w.acceleratedren"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/scissors/ScissorBindingStateType.java",
    "chars": 633,
    "preview": "package com.github.argon4w.acceleratedrendering.core.backends.states.scissors;\n\nimport com.github.argon4w.acceleratedren"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/viewports/MojangViewportBindingState.java",
    "chars": 1250,
    "preview": "package com.github.argon4w.acceleratedrendering.core.backends.states.viewports;\n\nimport com.github.argon4w.acceleratedre"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/viewports/OpenGLViewportBindingState.java",
    "chars": 875,
    "preview": "package com.github.argon4w.acceleratedrendering.core.backends.states.viewports;\n\nimport com.github.argon4w.acceleratedre"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/backends/states/viewports/ViewportBindingStateType.java",
    "chars": 638,
    "preview": "package com.github.argon4w.acceleratedrendering.core.backends.states.viewports;\n\nimport com.github.argon4w.acceleratedre"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/AcceleratedBufferSources.java",
    "chars": 3327,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers;\n\nimport com.github.argon4w.acceleratedrendering.core.CoreF"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/EmptyAcceleratedBufferSources.java",
    "chars": 655,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers;\n\nimport com.github.argon4w.acceleratedrendering.core.buffe"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/AcceleratedBufferSource.java",
    "chars": 7732,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated;\n\nimport com.github.argon4w.acceleratedrenderin"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/AcceleratedRingBuffers.java",
    "chars": 8292,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated;\n\nimport com.github.argon4w.acceleratedrenderin"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/IAcceleratedBufferSource.java",
    "chars": 383,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated;\n\nimport com.github.argon4w.acceleratedrenderin"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/IAccelerationHolder.java",
    "chars": 514,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated;\n\nimport com.github.argon4w.acceleratedrenderin"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/builders/AcceleratedBufferBuilder.java",
    "chars": 16529,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.builders;\n\nimport com.github.argon4w.accelerate"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/builders/AcceleratedEntityOutlineGenerator.java",
    "chars": 2805,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.builders;\n\nimport com.github.argon4w.accelerate"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/builders/AcceleratedSheetedDecalTextureGenerator.java",
    "chars": 3947,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.builders;\n\nimport com.github.argon4w.accelerate"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/builders/AcceleratedSpriteCoordinateExpander.java",
    "chars": 1437,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.builders;\n\nimport com.mojang.blaze3d.vertex.Ver"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/builders/AcceleratedVertexConsumerWrapper.java",
    "chars": 4154,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.builders;\n\nimport com.github.argon4w.accelerate"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/builders/BufferSourceExtension.java",
    "chars": 309,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.builders;\n\nimport net.minecraft.client.renderer"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/builders/IAcceleratableBufferSource.java",
    "chars": 483,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.builders;\n\nimport com.github.argon4w.accelerate"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/builders/IAcceleratedVertexConsumer.java",
    "chars": 2399,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.builders;\n\nimport com.github.argon4w.accelerate"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/builders/IBufferGraph.java",
    "chars": 119,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.builders;\n\npublic interface IBufferGraph {\n\n}\n"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/builders/VertexConsumerExtension.java",
    "chars": 497,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.builders;\n\nimport com.github.argon4w.accelerate"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/layers/LayerDrawType.java",
    "chars": 141,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.layers;\n\npublic enum LayerDrawType {\n\n\tTRANSLUC"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/layers/LayerKey.java",
    "chars": 194,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.layers;\n\nimport net.minecraft.client.renderer.R"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/layers/functions/CustomLayerFunction.java",
    "chars": 956,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.layers.functions;\n\nimport it.unimi.dsi.fastutil"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/layers/functions/EmptyLayerFunction.java",
    "chars": 466,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.layers.functions;\n\npublic class EmptyLayerFunct"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/layers/functions/ILayerFunction.java",
    "chars": 253,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.layers.functions;\n\npublic interface ILayerFunct"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/layers/storage/ILayerContexts.java",
    "chars": 378,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.layers.storage;\n\nimport com.github.argon4w.acce"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/layers/storage/ILayerStorage.java",
    "chars": 282,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.layers.storage;\n\nimport com.github.argon4w.acce"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/layers/storage/LayerStorageType.java",
    "chars": 543,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.layers.storage;\n\nimport com.github.argon4w.acce"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/layers/storage/SeparatedLayerStorage.java",
    "chars": 1738,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.layers.storage;\n\nimport com.github.argon4w.acce"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/layers/storage/SimpleLayerContexts.java",
    "chars": 878,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.layers.storage;\n\nimport com.github.argon4w.acce"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/layers/storage/empty/EmptyLayerContexts.java",
    "chars": 853,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.layers.storage.empty;\n\nimport com.github.argon4"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/layers/storage/empty/EmptyLayerStorage.java",
    "chars": 673,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.layers.storage.empty;\n\nimport com.github.argon4"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/layers/storage/sorted/SortedLayerContexts.java",
    "chars": 444,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.layers.storage.sorted;\n\nimport com.github.argon"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/layers/storage/sorted/SortedLayerStorage.java",
    "chars": 845,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.layers.storage.sorted;\n\nimport com.github.argon"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/pools/DrawContextPool.java",
    "chars": 3033,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.pools;\n\nimport com.github.argon4w.acceleratedre"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/pools/ElementBufferPool.java",
    "chars": 2501,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.pools;\n\nimport com.github.argon4w.acceleratedre"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/pools/StagingBufferPool.java",
    "chars": 2582,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.pools;\n\nimport com.github.argon4w.acceleratedre"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/pools/meshes/FlattenMeshInfoCache.java",
    "chars": 2174,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.pools.meshes;\n\nimport java.lang.invoke.MethodHa"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/pools/meshes/IMeshInfoCache.java",
    "chars": 398,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.pools.meshes;\n\npublic interface IMeshInfoCache "
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/pools/meshes/MeshInfoCacheType.java",
    "chars": 457,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.pools.meshes;\n\npublic enum MeshInfoCacheType {\n"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/pools/meshes/MeshUploaderPool.java",
    "chars": 3877,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.pools.meshes;\n\nimport com.github.argon4w.accele"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/pools/meshes/SimpleMeshInfo.java",
    "chars": 812,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.pools.meshes;\n\nimport com.github.argon4w.accele"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/pools/meshes/SimpleMeshInfoCache.java",
    "chars": 1381,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.pools.meshes;\n\nimport com.github.argon4w.accele"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/pools/meshes/UnsafeMemoryMeshInfoCache.java",
    "chars": 2218,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.pools.meshes;\n\nimport io.netty.util.internal.sh"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/renderers/DecoratedRenderer.java",
    "chars": 748,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.renderers;\n\nimport com.mojang.blaze3d.vertex.Ve"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/renderers/IAcceleratedRenderer.java",
    "chars": 361,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.renderers;\n\nimport com.mojang.blaze3d.vertex.Ve"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/renderers/IBufferDecorator.java",
    "chars": 223,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.renderers;\n\nimport com.mojang.blaze3d.vertex.Ve"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/accelerated/renderers/SheetedDecalTextureRenderer.java",
    "chars": 1440,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.accelerated.renderers;\n\nimport com.github.argon4w.accelerat"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/environments/IBufferEnvironment.java",
    "chars": 3638,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.environments;\n\nimport com.github.argon4w.acceleratedrenderi"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/environments/VanillaBufferEnvironment.java",
    "chars": 4775,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.environments;\n\nimport com.github.argon4w.acceleratedrenderi"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/memory/IMemoryInterface.java",
    "chars": 588,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.memory;\n\nimport org.joml.Matrix3f;\nimport org.joml.Matrix4f"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/memory/IMemoryLayout.java",
    "chars": 254,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.memory;\n\npublic interface IMemoryLayout<T> {\n\n\tIMemoryInter"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/memory/NullMemoryInterface.java",
    "chars": 883,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.memory;\n\nimport org.joml.Matrix3f;\nimport org.joml.Matrix4f"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/memory/SimpleDynamicMemoryInterface.java",
    "chars": 1534,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.memory;\n\nimport com.github.argon4w.acceleratedrendering.cor"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/memory/SimpleMemoryInterface.java",
    "chars": 1457,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.memory;\n\nimport com.github.argon4w.acceleratedrendering.cor"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/buffers/memory/VertexLayout.java",
    "chars": 1317,
    "preview": "package com.github.argon4w.acceleratedrendering.core.buffers.memory;\n\nimport com.mojang.blaze3d.vertex.VertexFormat;\nimp"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/meshes/ClientMesh.java",
    "chars": 2197,
    "preview": "package com.github.argon4w.acceleratedrendering.core.meshes;\n\nimport com.github.argon4w.acceleratedrendering.core.buffer"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/meshes/EmptyMesh.java",
    "chars": 419,
    "preview": "package com.github.argon4w.acceleratedrendering.core.meshes;\n\nimport com.github.argon4w.acceleratedrendering.core.buffer"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/meshes/IMesh.java",
    "chars": 520,
    "preview": "package com.github.argon4w.acceleratedrendering.core.meshes;\n\nimport com.github.argon4w.acceleratedrendering.core.buffer"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/meshes/MeshType.java",
    "chars": 299,
    "preview": "package com.github.argon4w.acceleratedrendering.core.meshes;\n\nimport lombok.Getter;\n\n@Getter\npublic enum MeshType {\n\n\tSE"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/meshes/ServerMesh.java",
    "chars": 4711,
    "preview": "package com.github.argon4w.acceleratedrendering.core.meshes;\n\nimport com.github.argon4w.acceleratedrendering.core.CoreFe"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/meshes/collectors/CulledMeshCollector.java",
    "chars": 4021,
    "preview": "package com.github.argon4w.acceleratedrendering.core.meshes.collectors;\n\nimport com.github.argon4w.acceleratedrendering."
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/meshes/collectors/IMeshCollector.java",
    "chars": 457,
    "preview": "package com.github.argon4w.acceleratedrendering.core.meshes.collectors;\n\nimport com.github.argon4w.acceleratedrendering."
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/meshes/collectors/SimpleMeshCollector.java",
    "chars": 5292,
    "preview": "package com.github.argon4w.acceleratedrendering.core.meshes.collectors;\n\nimport com.github.argon4w.acceleratedrendering."
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/meshes/data/MeshData.java",
    "chars": 3081,
    "preview": "package com.github.argon4w.acceleratedrendering.core.meshes.data;\n\nimport com.github.argon4w.acceleratedrendering.core.u"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/meshes/data/cache/IMeshDataCache.java",
    "chars": 493,
    "preview": "package com.github.argon4w.acceleratedrendering.core.meshes.data.cache;\n\nimport com.github.argon4w.acceleratedrendering."
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/meshes/data/cache/IgnoreMeshDataCache.java",
    "chars": 629,
    "preview": "package com.github.argon4w.acceleratedrendering.core.meshes.data.cache;\n\nimport com.github.argon4w.acceleratedrendering."
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/meshes/data/cache/MeshDataCacheType.java",
    "chars": 377,
    "preview": "package com.github.argon4w.acceleratedrendering.core.meshes.data.cache;\n\npublic enum MeshDataCacheType {\n\n\tIGNORED,\n\tMER"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/meshes/data/cache/MeshDataCaches.java",
    "chars": 332,
    "preview": "package com.github.argon4w.acceleratedrendering.core.meshes.data.cache;\n\nimport com.github.argon4w.acceleratedrendering."
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/meshes/data/cache/SimpleMeshDataCache.java",
    "chars": 1590,
    "preview": "package com.github.argon4w.acceleratedrendering.core.meshes.data.cache;\n\nimport com.github.argon4w.acceleratedrendering."
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/mixins/GameRendererMixin.java",
    "chars": 2951,
    "preview": "package com.github.argon4w.acceleratedrendering.core.mixins;\n\nimport com.github.argon4w.acceleratedrendering.core.CoreBu"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/mixins/LevelRendererMixin.java",
    "chars": 4848,
    "preview": "package com.github.argon4w.acceleratedrendering.core.mixins;\n\nimport com.github.argon4w.acceleratedrendering.core.CoreBu"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/mixins/buffers/BufferBuilderMixin.java",
    "chars": 2566,
    "preview": "package com.github.argon4w.acceleratedrendering.core.mixins.buffers;\n\nimport com.github.argon4w.acceleratedrendering.cor"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/mixins/buffers/BufferSourceMixin.java",
    "chars": 1801,
    "preview": "package com.github.argon4w.acceleratedrendering.core.mixins.buffers;\n\nimport com.github.argon4w.acceleratedrendering.cor"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/mixins/buffers/EntityOutlineGeneratorMixin.java",
    "chars": 1954,
    "preview": "package com.github.argon4w.acceleratedrendering.core.mixins.buffers;\n\nimport com.github.argon4w.acceleratedrendering.cor"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/mixins/buffers/MinecraftMixin.java",
    "chars": 1325,
    "preview": "package com.github.argon4w.acceleratedrendering.core.mixins.buffers;\n\nimport com.github.argon4w.acceleratedrendering.cor"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/mixins/buffers/OutlineBufferSourceMixin.java",
    "chars": 1557,
    "preview": "package com.github.argon4w.acceleratedrendering.core.mixins.buffers;\n\nimport com.github.argon4w.acceleratedrendering.cor"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/mixins/buffers/SheetedDecalTextureGeneratorMixin.java",
    "chars": 1896,
    "preview": "package com.github.argon4w.acceleratedrendering.core.mixins.buffers;\n\nimport com.github.argon4w.acceleratedrendering.cor"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/mixins/buffers/SpriteCoordinateExpanderMixin.java",
    "chars": 2011,
    "preview": "package com.github.argon4w.acceleratedrendering.core.mixins.buffers;\n\nimport com.github.argon4w.acceleratedrendering.cor"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/mixins/buffers/VertexConsumerMixin.java",
    "chars": 494,
    "preview": "package com.github.argon4w.acceleratedrendering.core.mixins.buffers;\n\nimport com.github.argon4w.acceleratedrendering.cor"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/mixins/buffers/VertexDoubleConsumerMixin.java",
    "chars": 1697,
    "preview": "package com.github.argon4w.acceleratedrendering.core.mixins.buffers;\n\nimport com.github.argon4w.acceleratedrendering.cor"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/mixins/buffers/VertexMultipleConsumerMixin.java",
    "chars": 1958,
    "preview": "package com.github.argon4w.acceleratedrendering.core.mixins.buffers;\n\nimport com.github.argon4w.acceleratedrendering.cor"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/mixins/compatibility/MinecraftMixin.java",
    "chars": 874,
    "preview": "package com.github.argon4w.acceleratedrendering.core.mixins.compatibility;\n\nimport com.github.argon4w.acceleratedrenderi"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/mixins/compatibility/ParticleEngineMixin.java",
    "chars": 2168,
    "preview": "package com.github.argon4w.acceleratedrendering.core.mixins.compatibility;\n\nimport com.github.argon4w.acceleratedrenderi"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/mixins/compatibility/RenderTypeMixin.java",
    "chars": 1704,
    "preview": "package com.github.argon4w.acceleratedrendering.core.mixins.compatibility;\n\nimport com.github.argon4w.acceleratedrenderi"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/mixins/compatibility/WindowMixin.java",
    "chars": 674,
    "preview": "package com.github.argon4w.acceleratedrendering.core.mixins.compatibility;\n\nimport com.mojang.blaze3d.platform.Window;\ni"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/programs/ComputeShaderDefinition.java",
    "chars": 202,
    "preview": "package com.github.argon4w.acceleratedrendering.core.programs;\n\nimport net.minecraft.resources.ResourceLocation;\n\npublic"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/programs/ComputeShaderProgramLoader.java",
    "chars": 4285,
    "preview": "package com.github.argon4w.acceleratedrendering.core.programs;\n\nimport com.github.argon4w.acceleratedrendering.core.back"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/programs/ComputeShaderPrograms.java",
    "chars": 6739,
    "preview": "package com.github.argon4w.acceleratedrendering.core.programs;\n\nimport com.github.argon4w.acceleratedrendering.Accelerat"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/programs/LoadComputeShaderEvent.java",
    "chars": 948,
    "preview": "package com.github.argon4w.acceleratedrendering.core.programs;\n\nimport com.github.argon4w.acceleratedrendering.core.back"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/programs/culling/ICullingProgramDispatcher.java",
    "chars": 303,
    "preview": "package com.github.argon4w.acceleratedrendering.core.programs.culling;\n\nimport com.github.argon4w.acceleratedrendering.c"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/programs/culling/ICullingProgramSelector.java",
    "chars": 226,
    "preview": "package com.github.argon4w.acceleratedrendering.core.programs.culling;\n\nimport net.minecraft.client.renderer.RenderType;"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/programs/culling/LoadCullingProgramSelectorEvent.java",
    "chars": 821,
    "preview": "package com.github.argon4w.acceleratedrendering.core.programs.culling;\n\nimport com.mojang.blaze3d.vertex.VertexFormat;\ni"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/programs/culling/PassThroughCullingProgramDispatcher.java",
    "chars": 2312,
    "preview": "package com.github.argon4w.acceleratedrendering.core.programs.culling;\n\nimport com.github.argon4w.acceleratedrendering.c"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/programs/culling/PassThroughCullingProgramSelector.java",
    "chars": 647,
    "preview": "package com.github.argon4w.acceleratedrendering.core.programs.culling;\n\nimport net.minecraft.client.renderer.RenderType;"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/programs/dispatchers/EmptyProgramDispatcher.java",
    "chars": 431,
    "preview": "package com.github.argon4w.acceleratedrendering.core.programs.dispatchers;\n\nimport com.github.argon4w.acceleratedrenderi"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/programs/dispatchers/FixedPolygonProgramDispatcher.java",
    "chars": 1768,
    "preview": "package com.github.argon4w.acceleratedrendering.core.programs.dispatchers;\n\nimport com.github.argon4w.acceleratedrenderi"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/programs/dispatchers/IPolygonProgramDispatcher.java",
    "chars": 281,
    "preview": "package com.github.argon4w.acceleratedrendering.core.programs.dispatchers;\n\nimport com.github.argon4w.acceleratedrenderi"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/programs/dispatchers/MeshUploadingProgramDispatcher.java",
    "chars": 8798,
    "preview": "package com.github.argon4w.acceleratedrendering.core.programs.dispatchers;\n\nimport com.github.argon4w.acceleratedrenderi"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/programs/dispatchers/TransformProgramDispatcher.java",
    "chars": 4476,
    "preview": "package com.github.argon4w.acceleratedrendering.core.programs.dispatchers;\n\nimport com.github.argon4w.acceleratedrenderi"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/programs/overrides/IShaderProgramOverride.java",
    "chars": 164,
    "preview": "package com.github.argon4w.acceleratedrendering.core.programs.overrides;\n\npublic interface IShaderProgramOverride {\n\n\tvo"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/programs/overrides/IShaderProgramOverrides.java",
    "chars": 343,
    "preview": "package com.github.argon4w.acceleratedrendering.core.programs.overrides;\n\nimport net.minecraft.client.renderer.RenderTyp"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/programs/overrides/ITransformShaderProgramOverride.java",
    "chars": 321,
    "preview": "package com.github.argon4w.acceleratedrendering.core.programs.overrides;\n\npublic interface ITransformShaderProgramOverri"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/programs/overrides/IUploadingShaderProgramOverride.java",
    "chars": 377,
    "preview": "package com.github.argon4w.acceleratedrendering.core.programs.overrides;\n\npublic interface IUploadingShaderProgramOverri"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/programs/overrides/LoadShaderProgramOverridesEvent.java",
    "chars": 2700,
    "preview": "package com.github.argon4w.acceleratedrendering.core.programs.overrides;\n\nimport com.mojang.blaze3d.vertex.VertexFormat;"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/programs/overrides/OverrideProgramType.java",
    "chars": 134,
    "preview": "package com.github.argon4w.acceleratedrendering.core.programs.overrides;\n\npublic enum OverrideProgramType {\n\n\tTRANSFORM,"
  },
  {
    "path": "src/main/java/com/github/argon4w/acceleratedrendering/core/programs/processing/EmptyPolygonProcessor.java",
    "chars": 596,
    "preview": "package com.github.argon4w.acceleratedrendering.core.programs.processing;\n\nimport com.github.argon4w.acceleratedrenderin"
  }
]

// ... and 159 more files (download for full content)

About this extraction

This page contains the full source code of the Argon4W/AcceleratedRendering GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 359 files (805.2 KB), approximately 230.8k tokens, and a symbol index with 1515 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!