Angelica
512 merged pull requests.
Needs action on an existing world:
- [read before updating] #1221 Angelica 2.0.0 alpha switches the renderer from Sodium 0.2 to Celeritas. Iris and dynamic lights work with it. Chunk meshing is multi-threaded again, some Beddium features are adapted, and FPS cap info is added.
Client-side only: nothing in your world changes. Re-test any custom Iris shader pack against the Celeritas renderer; angelica-options.json is migrated in place.- [check your build] #1412 Angelica now targets the OpenGL 3.3 core profile. It emulates most of the fixed function pipeline with generated shaders and converts quads to triangles. Mod shaders that use old compat GLSL builtins are transformed automatically.
Angelica now emulates the fixed-function pipeline on an OpenGL 3.3 core context, so mods that use it keep rendering. Check your custom shader packs and any GL-heavy addon by re-testing them; no config file has to be edited.
New Features
- #2166 New Settings.ZOOM_CINEMATIC tick box (default true) listed in the NotFine and Sodium option pages. Zoom.isCinematicCameraEnabled is checked in MixinEntityRenderer_Zoom, which only forces smooth camera while zoomed when the option is on. - @Lumarin
- Added: Cinematic Camera Zoom option
- #2156 Adds a capture API to TracyBackend (captureStart/Stop/State), a native AngelicaTracyCapture library built in build-tracy-natives.sh, TracyOptions, TracyOptionPages and TracyCaptureNotifier. The old SystemProperties.TRACY flags become optional overrides of the config values. - @mitchej123
- Added: in-game Tracy capture, Tracy page in video settings, /angelica tracy command, Angelica keybind category
- #2152 Adds the BiomeBlendMode enum (FAST/FANCY) to the Sodium options, BiomeVertexBlender with MixinWorld and MixinRenderBlocks, and SkyColorCache for sky blending. SmoothBiomeColorCache is reworked with sliced box blur buffers and some optimization. - @Eclipse-Sol
- Added: biome blending mode option (Fast/Fancy), sky color blending
- #2131 New CloudLayer record and CloudLayerProvider API, GalaxySpaceClouds compat that maps the three WorldProviders to layers, and CloudRenderer split into CloudLayerRenderer, CloudRenderResources and CloudView. MixinRenderGlobal.renderClouds now routes layered worlds to the Angelica renderer. - @Eclipse-Sol
- Added: Galaxy Space cloud rendering for Venus, Barnarda C and T Ceti E, multi-layer cloud rendering, cloud layer API
- Fixed: cloud culling issues with different cameras and FOVs
- #2118 Adds DarkModeUtils, which reads dark_mode_utils (schema 1) from pack.mcmeta on resource pack change. Adds DarkModeFontTransform with FML and RFB transformer wrappers. The transformer injects enter/exit recolor and button section markers into target methods and calls. BatchingFontRenderer.drawString applies the recolor. - @DeathFuel
- Added: dark_mode_utils resource pack config in pack.mcmeta, text recolor transformer for GUI and button fonts
- Closes #1538
- #2096 Reworked RGSS terrain filtering with a gutter/sprite padding system (SpritePadding, MixinStitcherHolder, MipmapGenerator changes) and removed TEX_CENTROID_BIAS. SDL backend now applies max anisotropy on samplers, grows mip levels on demand via ResourceManager.ensureTextureLevels, and reuses textures with at least the requested levels. AngelicaChunkBuildContext keeps the base material per face; the Sodium and NotFine option pages were changed. - @Eclipse-Sol
- Added: Linear/Nearest texel blending option, RGSS and Anisotropic Filtering together
- Fixed: Gaps between stacked CTM blocks, Anisotropic Filtering not enabled on SDL GPU, Grass quality setting, Memory blowup with SDL textures
- #2068 TileOverride reads abuttingBlocks/abuttingMetaData into a BlockStateMatcher list. getTileWorld returns null unless the block at the face's normal offset matches, via the new matchesAbuttingBlock method. - @Kremnari
- Added: abuttingBlocks and abuttingMetaData CTM properties
- #2047 Adds CONNECT_BY_LIST and a connect=list mode in TileOverride. It reads connectBlocks and connectMetadata properties and logs an error and falls back to block connection if connectBlocks is empty. - @Kremnari
- Added: connect=list CTM property, connectBlocks and connectMetadata CTM properties
- #2046 Extended
GLStateManager,GLContextState,CommandRecorder,CommandBufferExecutor, and related FFP shader classes to handle GL secondary color state tracking and recording. - @KAMKEEL- Added: GL secondary color support, secondary color state management
- Fixed: Campfire Backport GL secondary color crashes
- Closes #2006
- #2020 Added
NaturalTextureUtilswith rotation logic and configurable block list, integrated hook intoAngelicaChunkBuilderMeshingTaskto apply rotations during chunk meshing, added configuration inAngelicaConfig. - @Wokafishh- Added: Natural texture rotation, NaturalTextureUtils, Block rotation config
- #1993 Major refactor: migrated build to support SDL GPU (Vulkan, Metal, D3D) backend alongside LWJGL3, added shader transformation, and resource management classes for GPU rendering, integrated Tracy 0.13 profiling with
SectionRegistryand Tracy hooks. - @mitchej123- Added: SDL GPU backend, TESR batching and caching API, Tracy integration
- #1989 Adds a NO_DIRECTIONAL_SHADING flag and angelica$setNoDirectionalShading to StateAwareTessellator. MixinTessellator stores it in the vertex state, and AngelicaChunkBuildContext skips the diffuse term for flagged quads. Both flags reset with the vertex states. - @ah-OOG-ah
- Added: per-quad directional shading flag in StateAwareTessellator
- #1981 Introduces FallingBlockMetaAccess and FallingBlockRendering utilities, extends ItemMaterialHelper, adds shader mixins (MixinRenderBlocks_FaceNormals, MixinRenderFallingBlock, MixinRenderBlocks_ItemId) to set material IDs and adjust falling block lighting in pipeline. - @Eclipse-Sol
- Added: falling block material system, FallingBlockRendering utility
- Removed: MixinRenderBiped, MixinRenderPlayerArmor
- Fixed: falling block shader lighting, material ID for non-terrain blocks
- #1974 Adds RenderChunkEvent (a Forge EventBus RecordEvent with a static BUS and post()). MixinRenderGlobal posts it after drawChunkLayer for the TRANSLUCENT layer in sortAndRender. - @Midnight145
- Added: RenderChunkEvent
- #1972 Adds FontEffectRegistry and CustomGlyphEffect for per-glyph color, background and offset effects. Adds a conversion suppressor hook in ColorCodeUtils, and layered draw commands in BatchingFontRenderer. Also updates the font providers, MixinFontRenderer and GTNHLibCompat, and adds tests. - @KAMKEEL
- Added: font effect registry for other mods, custom glyph effect interface, ampersand conversion suppressor hook
- #1952 Adds MipmapStrategy, MipmapGenerator, and related utilities to implement RGSS sampling and modern mipmap generation. Updates AngelicaChunkRenderer and related rendering infrastructure to support new mipmap features; hooks anisotropic filtering configuration into NotFineGameOptionPages. - @Eclipse-Sol
- Added: RGSS mipmap blending, mipmap strategy framework, anisotropic filtering GUI integration
- Fixed: mipmap distance artifacts
- #1936 New ExtCeleritasRenderBlocks interface with angelica$shouldApplyCeleritasAO and angelica$setApplyingCeleritasAO, implemented by MixinRenderBlocks. The AO condition in handleCeleritasAo moved into the new method. - @tiffit
- Added: ExtCeleritasRenderBlocks API
- #1931 Added ICTMBlock with shouldConnectByBlock, which BlockOrientation calls for blocks that implement it. CTMUtils gets a public Overrides class and registration callbacks. TileOverride.create(PropertiesFile, TileLoader) is now public, TileLoader gets ignoreMissingTextures, and RenderBlockState gets getMetadata. - @SuperSoupr
- Added: ICTMBlock interface, CTM override registration callbacks
- #1927 Added FfpExtendedAttribs for POM texture coordinate handling, extended display list VBO support for additional attributes, added ImmediateExtendedAttribHandler for immediate mode rendering, and enhanced shader integration. - @Eclipse-Sol
- Added: POM (Parallax Occlusion Mapping) support, FfpExtendedAttribs for extended vertex attributes, ImmediateExtendedAttribHandler, improved labPBR support
- Fixed: entity scrambling with POM enabled
- #1904 Extended FontStrategist to scan fontfiles/ and config/angelica/fonts/ directories for .ttf/.otf files and register them with Java's GraphicsEnvironment for use in font selection. - @GribanovIvan
- Added: bundled font file loading from fontfiles/ and config/angelica/fonts/, font file registration with GraphicsEnvironment
- Fixed: font loading on headless/macOS systems
- #1897 Added ShaderSearchEngine and OptionMenuContainer for filtering shader options, updated HeaderEntry widget, and fixed static translation field loading to refresh on language changes. - @SpacEagle17
- Added: shader settings search functionality, OptionMenuContainer for option grouping, ShaderSearchEngine for filtering, shader pack selection centering
- Fixed: translation string caching on language change
- #1892 Added EndFlashCompat and EndFlashStorage classes to manage end flash state. Extended WorldRenderingPipeline, PackDirectives, ShaderProperties, ShadowMatrices, CelestialUniforms, and IrisExclusiveUniforms to support end flash uniforms. - @Eclipse-Sol
- Added: end flash uniforms, end flash compatibility layer
- #1890 Extended Zoom class with smooth zoom capabilities and added corresponding GUI options in NotFineGameOptionPages and SodiumGameOptionPages. Updated EntityRenderer mixin to support smooth zoom transitions. - @Caedis
- Added: smooth zoom option
- #1853 ModStatus now detects EndlessIDs and its extendBlockItem/extendBiome config and sets isMetadataExtended. BlockMaterialMapping adds a wildcard meta key and resolveId, used by the Iris chunk encoder, Iris, and ItemMaterialHelper. The snowy meta bit moves from 0x10 to 1 << 16. - @Eclipse-Sol
- Added: extended metadata support for NEID and EndlessIDs in shader block mapping
- #1843 Added ClientEvent with an EventBus and a ClientEventType enum (PRE_RENDER_GUI, PRE_RENDER_HUD, POST_RENDER_HUD, ON_TICK). Events are posted from HUDCaching.renderCachedHud and MixinMinecraft_IconifyGuard. - @Midnight145
- Added: ClientEvent bus
- #1840 New CTMCompactExpanded override, registered for the compact_expanded method in TileOverride.create. CTMTextureGenerator builds the 47 BufferedImages from the 5 inputs, and GeneratedCTMAtlasSprite, based on InterpolatedIcon, loads them through TileLoader. - @tiffit
- Added: compact_expanded CTM method
- #1836 MixinRenderDragon now sets the current rendered entity to the id mapped from minecraft:dragon_death_rays while the death beams render, and restores the previous id afterwards. - @Eclipse-Sol
- Added: dragon_death_rays entity id for shaders
- #1828 Enhanced Iris shader menu UI classes (IrisGuiSlot, ShaderPackOptionList, ShaderPackSelectionList, etc.) with sound effects, option value coloring, unsaved change highlighting, keyboard shortcuts (Ctrl-D/G toggle), drag-and-drop support, scrollable names, and new visual elements. - @Eclipse-Sol
- Added: button sound effects, option value coloring, keyboard shortcuts (Ctrl-D/G), drag-and-drop support, shader download button, highlight box for shader selection, scrollable long names
- Fixed: scrollbar stickiness, slider format errors, shader setting string casing issues, clickable buttons behind menu elements, missing comment display
- #1815 Extended
BlockMaterialMappingandFlatteningMapto handle double-tall plants correctly, updated chunk builder to process both plant halves. - @Eclipse-Sol- Added: double-tall plant material mapping
- Fixed: double-tall plant rendering
- #1814 Modified
SelectionBoxRendererto use Iris shader pipeline similar to cloud rendering, allowing block outlines to render correctly with advanced shader packs. - @Eclipse-Sol- Added: Iris integration for block outline shader
- Fixed: block outline rendering with Iris shaders
- #1808 Created
CubicChunksAPIcompatibility layer, updated chunk tracker to remove Y limits, modifiedAngelicaChunkTrackerandCeleritasWorldRendererto use CC chunk sections, added tile map wrapping, and added vertical view distance video option. - @RecursivePineapple- Added: CubicChunksAPI compatibility, vertical view distance setting, CC chunk section support
- Removed: old ChunkTrackerAccessor interface, Y-axis limits in chunk logic
- Fixed: Cubic Chunks compatibility
- #1806 Added a cancellable RenderHandEvent with its own event bus, posted from HandRenderer.canRender. A cancelled event stops the hand from rendering. - @Caedis
- Added: cancellable RenderHandEvent
- #1793 Rewrote
CloudRendererwith newCloudEdgesandCloudUniformsclasses, addedShaderColorChangeEventfor state synchronization, integratedIrisGLSMBridgecolor updates, and added cloud program to Iris pipeline. - @mitchej123- Added: CloudEdges class, CloudUniforms class, ShaderColorChangeEvent, cloud shader rendering support in Iris
- Fixed: cloud rendering with Iris shaders
- #1787 Extended Iris deferred rendering pipeline to support
gbuffer_lightningrender condition, added correspondingProgramIdand mixin hooks inMixinRenderDragonandMixinRenderManagerfor entity lighting rendering. - @Eclipse-Sol- Added: gbuffer_lightning program support, lightning rendering to deferred pipeline
- #1771 Added NbtConditionalIdMap, PropertiesTokenizer and a rewritten BlockEntry/IdMap parser. BlockMaterialMapping now builds a tile entity NBT map, consulted in AngelicaChunkBuilderMeshingTask, EntityIdHelper and ItemMaterialHelper. Added MixinWorldNbtCache and MixinNetHandlerPlayClient_NbtRemesh for cache invalidation and remeshing. - @Eclipse-Sol
- Added: NBT matching in shader pack block, entity and item ID entries
- #1764 Added MixinGuiMainMenuSplash, which rewrites splashText after GuiMainMenu construction. RenderSystem now stores glMajor, glMinor and coreProfile, parsed from GL_VERSION and the context profile mask. - @mitchej123
- Added: main menu splash showing the actual OpenGL version
- #1761 Added BobviewMode enum and configuration to Settings and integrated into Sodium video options, with corresponding mixin in EntityRenderer. - @Apis035
- Added: view bobbing mode selection, hand-only bobbing option, camera-only bobbing option
- #1754 Extended font rendering color codes to support &u toggle for drop shadows and &u&#RRGGBB for custom shadow colors. Modified BatchingFontRenderer, ColorCodeUtils, config, and FontRenderer mixin. - @alppp
- Added: per-segment drop shadow (&u code), custom shadow color support (&u&#RRGGBB), text effects config option
- #1710 Added EmissiveTextureAutoloader and EmissiveTextureHelper classes to detect and apply emissive overlays; integrated into rendering pipeline via mixin. - @VortexSo4
- Added: automatic emissive texture loader, emissive texture helper, emissive texture mixin
- #1708 Added ModStatus check for CosmeticArmorReworked and integrated it into DynamicLights entity light source detection. - @Caedis
- Added: cosmetic armor dynamic lights support
- #1696 Extended block targeting in RenderBlocksUtils and BlockRenderingSettings to support snow-covered block variants. Updated IdMap and DeferredWorldRenderingPipeline to handle snowy block properties. - @Eclipse-Sol
- Added: Snow-covered block CTM support
- #1680 Added FOVMode enum with three states in Settings and ClientProxy to control vanilla vs mod FOV behavior. Updated access transformers and language file. - @MellowArpeggiation
- Added: Three-state FOV mode option, FOVMode enum
- #1673 Implemented iris_alphaTestPass() supporting all GL alpha test modes. Added iris_currentAlphaFunc uniform and AlphaStateChangeEvent for reactive updates. Connected state notifiers in IrisGLSMBridge. - @Kai-Z-JP
- Added: iris_alphaTestPass() function, iris_currentAlphaFunc uniform, AlphaStateChangeEvent
- Fixed: Alpha test compatibility with all GL functions
- #1669 Implemented RGB color system in BatchingFontRenderer and ColorCodeUtils with support for gradient, rainbow, wave, and dinnerbone effects. Added config toggles for enableRGBColors, enableTextEffects, and enableAmpersandConversion. - @alppp
- Added: RGB color support, Color gradient effects, Rainbow and wave text animations, Dinnerbone text effect, Color code utilities
- #1636 Ported CompactCtmQuadProcessor from Continuity mod to handle compact CTM with TileOverride system, added CompactConnectingCtmProperties to parse compact CTM configuration. - @VortexSo4
- Added: CompactCtmQuadProcessor for 5-texture CTM method, CompactConnectingCtmProperties configuration parser, Compact CTM support in CTMUtils
- #1635 Added FlatteningMap (modern block names and state properties to legacy block and meta) and EntityFlatteningMap. BlockEntry gains a stateProperties map. BlockMaterialMapping and IdMap use the maps to resolve blocks and render types. - @Eclipse-Sol
- Added: FlatteningMap, EntityFlatteningMap, blockstate property parsing in block.properties
- #1628 Ported shadow_water pipeline stages from upstream Iris to CeleritasTerrainPipeline and related classes, enabling translucent shadow passes for photon shaders. - @DarkShadow44
- Added: Shadow translucent rendering pass, Shadow water support for photon shaders
- Fixed: Water rendering on photon shaders (HIGH quality)
- #1626 IdMap checks block.properties for a MC_VERSION 10710 section. If none is found, it reparses with MC_VERSION replaced by modernFallbackMcVersion (default 260101) and converts entries via LegacyIdMap.convertModernBlockEntries, which maps grass to tallgrass and grass_block to grass. Added AngelicaConfig.modernFallbackMcVersion. - @DarkShadow44
- Added: modernFallbackMcVersion config option, modern block.properties loading for shader packs
- #1605 Created DeferredEntityOverlay class and added mixins to RenderGlobal, RenderWither, RenderCreeper, and RendererLivingEntity to defer entity overlay rendering until after the main entity pass. This prevents z-fighting and allows rendering entities behind auras. - @Eclipse-Sol
- Added: DeferredEntityOverlay system, overlay deferral mixins
- Fixed: z-fighting in Wither/Creeper overlays, entity visibility behind auras
- #1601 Added block context holder support to StateAwareTessellator and AngelicaChunkBuilderMeshingTask, allowing Little Tiles custom blocks to work with the shader system. Modified Iris block context handling to integrate with Angelica's chunk building. - @DarkShadow44
- Added: block context support in chunk builder
- Removed: old BlockContextHolder implementation
- Fixed: Little Tiles shader support
- #1580 Added com.gtnewhorizons.angelica.api.GLRedirects exposing the redirect maps and a method redirect regex, backed by new GLSMRedirector getters, with glEnable and glDisable added to the redirect map. FragmentShaderGenerator.emitAlphaTest now rounds alpha and reference to 8 bits. AngelicaRfbPlugin excludes the glsm.redirect package from class loader transformation. - @mitchej123
- Added: GLRedirects API, GLRedirectsTest
- #1557 Added AngelicaConfig.alwaysTranslucentSprites read by a new MixinTextureAtlasSprite change. Added missing IntBuffer, DoubleBuffer and ShortBuffer overloads for bufferData, bufferSubData and getBufferSubData in GLStateManager, RenderBackend and both backends. Also changed MixinForgeHooksClient_CoreProfile to set the debug context. - @mitchej123
- Added: alwaysTranslucentSprites config option, buffer overloads in GLSM and render backends
- #1555 ShaderProperties parses 'profile2.' directives, OptionMenuContainer builds a second ProfileSet, and OptionMenuElement handles a '<profile2>' element. ProfileElementTracker marks those elements so ProfileElementWidget uses the profile2 label and comment keys. - @SpacEagle17
- Added: second profiles button for shader packs
- #1553 Extended Iris DH compatibility layer with DHCompatInternal, IrisGenericRenderProgram, IrisLodRenderProgram, and LodRendererEvents. Added frame buffer wrapping and shader macro support for distant terrain rendering. - @DarkShadow44
- Added: Distant Horizons shader compat layer, DHCompatInternal implementation, IrisLodRenderProgram, DhFrameBufferWrapper
- #1552 Adds a BlockLightProvider API with RGB light packing, section light snapshots, tint registration (TintRegistry, TintComputer) and Ext* mixin interfaces for light data, AO face data and quad light data. Bumps celeritas-common to 2.5.4-GTNH and extends DynamicLights, Mixins and AngelicaChunkBuildContext. - @mitchej123
- Added: Supernova support, RGB block light and sky light rendering, BlockLightProvider API
- #1544 Adds a render backend abstraction (RenderBackend, BackendManager) with Lwjgl2GLRenderBackend and a new lwjgl3-backend module. GLStateManager, CompatUniformManager and CompatShaderTransformer call through the backend instead of GL20 directly. Build moves glsm and the backend into the shadowed jar. Commented-out Vulkan flags are included. - @mitchej123
- Added: LWJGL 3 render backend
- #1539 Added Biomes o' Plenty dependency and created MixinFogHandler to patch BoP's fog rendering system to respect Angelica fog toggles. - @Caedis
- Added: Biomes o' Plenty fog compatibility, BoP fog handler mixin
- #1468 GLStateManager.preInit probes the driver's real max line width with glLineWidth and a binary search, and sets wideLineEmulationEnabled when it is 1.0 or less. A new GeometryShaderGenerator expands line primitives into triangle strips using u_ViewportSize and u_LineWidth. Program, ShaderCache, VertexKey, VertexShaderGenerator and Uniforms are extended to compile and link the optional geometry shader. - @mitchej123
- Added: Wide line emulation via geometry shaders on core profile
- #1466 Added PanoramaRenderer with shader-based rendering (panorama_cube, panorama_blur, panorama_blit shaders), created MixinGuiMainMenu to integrate, added config option, and registered new mixin. - @mitchej123
- Added: PanoramaRenderer, panorama shaders, panorama config option
- #1412 Adds FFP emulation through generated GLSL, display list emulation, software matrix stacks via GLSM, GL_QUADS to GL_TRIANGLES conversion, CompatShaderTransformer and CompatUniformManager for mod shaders, and streaming buffers. BatchingFontRenderer moves to VAO and VBO drawing. Design is based on Mesa. - @mitchej123
- Added: OpenGL 3.3 core profile support, Fixed function pipeline emulation, Display list emulation, Automatic transformation of mod shaders using compat GLSL builtins
- Migration: Angelica now emulates the fixed-function pipeline on an OpenGL 3.3 core context, so mods that use it keep rendering. Check your custom shader packs and any GL-heavy addon by re-testing them; no config file has to be edited.
- #1401 Added hurt screen shake intensity setting to Settings and SodiumGameOptionPages with GUI slider and language entry. - @Caedis
- Added: hurt screen shake intensity slider, settings entry
- Closes #1400
- #1384 Modified chunk iteration to process blocks towards camera and added distance-based sorting for TESR rendering passes when translucency sorting is enabled in CeleritasWorldRenderer. - @Ruling-0
- Added: TESR translucency sorting
- #1368 Added IndividualDrawEmitter class and new emitter mode options to rendering pipeline, extended SodiumGameOptions with new MultiDrawMode enum for user configuration. - @mitchej123
- Added: Indirect emitter mode, Individual emitter mode, IndividualDrawEmitter class
- #1335 ProgramSet reads setup compute programs (up to 100) and begin programs with their compute sources. DeferredWorldRenderingPipeline adds a setup ComputeProgram array and a beginRenderer CompositeRenderer. CompositeRenderer and TransformPatcher.patchComposite take a TextureStage. - @mitchej123
- Added: setup program stage support, begin program stage support
- #1333 Touches the Iris pipeline and transformers: DeferredWorldRenderingPipeline, ShadowRenderer, AttributeTransformer, CommonTransformer and CeleritasTransformer. Adds FogMode, AlphaTest.toExpression and WorldRenderingPipeline methods hasFeature and getTextureMap. ImageBinding now passes layered=true to bindImageTexture. 30 files are not shown, and the body is empty. - @mitchej123
- Added: shadow compute shader support
- #1327 Adds EntityIdHelper and ItemIdManager, a MixinRenderDragon, MixinDroppedItemGlintEdges (uses real icon size in renderItemIn2D glint passes) and ET_FUTURUM_ELYTRA_CAPE (MixinLayerBetterElytra, requires etfuturum). Reworks MixinRenderManager, MixinRenderBiped, MixinRenderPlayerArmor, MixinItemRenderer and MixinRenderItem to use the helpers. - @Eclipse-Sol
- Added: zombie_villager_converting entity ID, current_player entity ID, end_crystal_beam entity ID, player_cape entity ID, Et Futurum elytra cape item ID
- Fixed: enchantment glint missing on dropped item edges
- #1324 BiomeUniforms.determineBiomeCategory adds a BiomeDictionary tier, only for biomes in the biome array. ModdedBiomeDetector adds LOTRBiome class detection, gated on ModStatus.isLotrLoaded. getBiomeId gets a doc comment that IDs are not unique in 1.7.10. - @mist475
- Added: BiomeDictionary biome categories, Lord of the Rings biome categories
- #1318 New client mixin MixinRenderNameTag on Render injects at HEAD and RETURN of func_147906_a. It sets the captured entity ID to the name_tag ID from BlockRenderingSettings entity IDs, then restores the previous ID. - @Eclipse-Sol
- Added: name_tag entity ID for shader packs
- #1308 Added configuration option to AngelicaConfig to toggle F3 additions; updated debug screen handlers to respect the setting. - @MalTeeez
- Added: F3 additions toggle option
- #1284 Extended RenderSystem with SSBO bindings and DSA (Direct State Access) support, added custom image/texture handling in render context, implemented QuadLightingHelper and VanillaDiffuseProvider for lighting calculations, added VertexArrayQuadView for vertex access, improved chunk build context with new lighting infrastructure. - @mitchej123
- Added: SSBO support, Custom image/texture handling, SmoothLightPipeline, Separate AO rendering, Direct State Access (DSA) support, Lighting calculation helpers
- #1283 Iris dimension handling now keys pipelines and ProgramSets by dimension name string instead of the DimensionId enum. ShaderPack parses dimension.properties and falls back to world{ID} folders. ProgramSets are held in an LRU cache sized by -Diris.dimensionCacheSize (default 12, 0 keeps only vanilla dimensions, minimum 3 otherwise). - @Eclipse-Sol
- Added: dimension.properties support, iris.dimensionCacheSize JVM property
- #1277 Added currentRenderedItemId uniform support to iris shader rendering, extended block/item/entity property parsing to support quoted identifiers and escape sequences, added metadata value support (e.g. stone:1, double_plant:0,1,2,3). - @mitchej123
- Added: Item/armor/horse shader materials, Block metadata specification, Quoted identifier support in properties
- Fixed: Block/entity name parsing with special characters
- #1255 Added AdaptiveTickCalculator and AdaptiveTickMode for intelligent light tick scaling, EntityLightConfig for per-type customization, ChunkRebuildManager for efficient updates, and enhanced DynamicLights core with new mixin interfaces. - @mitchej123
- Added: Adaptive tick calculation, Entity light configuration UI, Chunk rebuild manager, Entity light source interface
- #1254 Refactored SearchTextFieldComponent and option filtering logic in ReeseSodiumVideoOptionsScreen to support improved search, added StringUtils utilities for fuzzy matching, and updated language strings. - @mitchej123
- Added: Video settings search improvements, Fuzzy text matching
- Removed: OptionExtended class, Sodium control element utilities
- #1225 Extended BackgroundSelect menu class to support additional background variants. - @wlhlm
- Added: Menu background options
- #1221 Adds GLStateManagerService and RenderSystemService, wires in Celeritas in place of Sodium 0.2, updates the Iris and DynamicLights integration, and adds an Angelica command and a chunk debug minimap. The diff exceeded the file limit, so this comes from the body and file list. - @mitchej123
- Added: Celeritas renderer, Multi-threaded chunk meshing, FPS cap info, Angelica command, Chunk debug minimap
- Removed: Sodium 0.2
- Migration: Client-side only: nothing in your world changes. Re-test any custom Iris shader pack against the Celeritas renderer; angelica-options.json is migrated in place.
- #1217 Extended BackgroundSelect GUI option to support random selection; added background texture options in SettingsManager. - @wlhlm
- Added: random menu background option, additional background textures
- #1202 Adds MixinRenderEntityFlame on Render.renderEntityOnFire. It sets the current entity ID in CapturedRenderingState from the minecraft:entity_flame mapping at HEAD and resets it to 0 at RETURN. - @Eclipse-Sol
- Added: entity_flame ID for shader packs
- #1197 MixinRenderGlobal's renderEntity wrap now resolves entity IDs from EntityList names in the 1.7.10 naming convention and maps EntityLightningBolt to a lightning_bolt type, looked up in BlockRenderingSettings' entity ID map. - @Eclipse-Sol
- Added: 1.7.10 naming support for entity.properties in shaderpacks
- #1156 Added TessellatorPrimitiveBuffer, CompiledPrimitiveBuffers and AccumulatedPrimitiveDraw so DisplayListManager/CommandBufferBuilder compile tessellator line and triangle primitives into separate VBOs; new recorder/executor commands for the three GL calls. GTNHLib dependency bumped from 0.8.19 to 0.8.21. - @mitchej123
- Added: glFrontFace, glHint and glBlendColor recording in display lists, tessellator line and triangle primitive compilation in display lists
- #1128 Expanded FontConfigScreen with SliderClone and new FontConfig options for bold and shadow text rendering, improved BatchingFontRenderer text rendering logic. - @DeathFuel
- Added: Bold text copies option, Shadow text copies option, Font config preview area, Font config option pages
- #1102 Adds BiomeUniforms, ModdedBiomeDetector and a mixin-backed BiomeCategoryCache. Camera becomes a singleton, and PropertiesPreprocessor now parses custom uniforms. UniformType gains BOOL and MAT3, StandardMacros gets biome defines, ExternallyManagedUniforms covers the ignored ones, and GameModeUtil provides a spectator check for HandRenderer. - @mitchej123
- Added: biome uniform, biome_category uniform, darknessLightFactor uniform, relativeEyePosition uniform, lightningBoltPosition uniform, isRightHanded uniform, Biomes O' Plenty and Realistic World Gen biome detection
- Removed: unsupported uniform log spam
- Fixed: isSpectator uniform, firstPersonCamera uniform, hand rendering in spectator mode
- #1101 CommonUniforms registers darknessFactor (ONCE, constant 0) and per-tick biome_precipitation, rainfall and temperature uniforms read from BiomeGenBase. angelica_at.cfg makes BiomeGenBase enableRain and enableSnow public. - @Cleptomania
- Added: darknessFactor uniform, biome_precipitation uniform, rainfall uniform, temperature uniform
- #1096 Ported and enhanced compatibility fixes from ShaderFixer. Added TargetedMod class detection support, CompatConfig GUI modifiability, disable horizon option, and NTMSpace skybox rendering fixes through mixins. - @kotmatross28729
- Added: NTM:Space shader compatibility, disable horizon graphics option, CompatConfig GUI support
- Fixed: NTM:Space skybox rendering with shaders
- #1023 Ported FIX_BLOCK_CRACK from FalseTweaks 2 with a render pass whitelist and ModifyExpressionValue instead of Redirect to avoid destructive transformations. Added MixinRenderBlocks_CrackFix mixin. - @kotmatross28729
- Added: render pass whitelist for block crack fix, FIX_BLOCK_CRACK feature
- Fixed: block crack rendering on ores
New Content
- #1873 Modified glass CTM properties to use compact mapping and added stained glass CTM resources. - @Auynonymous
- Added: stained glass compact CTM
- #1830 Added Japanese language localization files for Angelica and NotFine. - @Kokekabe-Madoha
- Added: Japanese translations for Angelica and NotFine
- #1623 Updated zh_CN.lang resource file with additional translation strings. - @NealDeal34
- Added: Chinese translation strings
- #1036 Added 48 lines of Chinese translations to zh_CN.lang for font settings. - @NealDeal34
- Added: Chinese localization for font options
Changes
- #2178 Adds RecolorTarget.includeMethodCall entries to DarkModeFontTransform for ModularUI 2 callers of TextRenderer and TextFieldRenderer, one caller at a time. - @Ranzuu
- Added: dark mode font targets for ModularUI 2
- #2165 FontProvider.getTexture now returns a GL texture id instead of a ResourceLocation, and FontProviderCustom uploads atlases directly through GLStateManager instead of registering textures with the TextureManager. Adds fontBrightness uniform in fontFilter.fsh and FontConfig.fontBrightness, and removes MixinMCResourceAccessor and the bindTexture accessor. - @DeathFuel
- Added: font brightness slider, fallback font tooltip
- Fixed: custom font construction lag with CJK characters, italic slant scaling
- Closes #1735
- #2151 Bumps celeritas to 2.5.12-GTNH. Adds the verboseF3 config option and a DebugKeyHandler for F3+V. Mixins for terrain are swapped (MixinDefaultChunkShaderInterface removed; MixinSharedQuadIndexBuffer, MixinRenderRegionManager and MixinShaderLoader added), AngelicaChunkTracker is removed in favour of upstream's outside Cubic Chunks, and SDL-GPU now materializes pending FBO clears before ending a frame. - @mitchej123
- Added: Verbose F3 option toggled with F3+V, translucency sorting v3, bilinear AO correction in terrain shader
- #2094 Edited the default string list for the top-face rotation blocks in AngelicaConfig. - @Wokafishh
- #2086 Reworked RenderBackend frame pacing: refresh period is queried in nanoseconds, a vsyncHonored flag and display generation counter were added, and the backend now relies on hardware pacing when present. Added MainThreadPump for pumping display messages on the main thread, and first-clear gate timing in GLStateManager. The changes span the glsm, lwjgl3-backend and sdl-gpu backends, with new tests. - @mitchej123
- Added: FPS reducer functionality
- Fixed: pacer switching between hardware and software pacing
- #2009 Refactored
VSyncModewith adaptive queue modes, enhancedGlslTransformUtilsparsing optimizations, improved shader loading performance by caching transforms, fixed Windows display sync issues inLwjgl2GLRenderBackend. - @mitchej123- Added: GLSL parsing optimizations, Mailbox vsync mode
- Fixed: Windows input lag, GLSL parsing overhead
- #2002 Added
VSyncModeenum and enhancedRenderBackendwith new vsync/FPS policies, improvedTextureInfoCachefor model rendering, fixed player model rendering withTextureInfoupdates, and enhanced frame pacing in LWJGL3 and SDL GPU backends. - @mitchej123- Added: VSyncMode enum, Texture info caching, Frame pacer improvements
- Fixed: Water Shader Realism player model rendering
- #1962 Replaced MixinWorldType, which overwrote WorldType.getCloudHeight, with MixinWorldProvider, which adds SettingsManager.cloudHeightOffset to WorldProvider.getCloudHeight. Removed the cloudElevation >= 96 hack in CloudRenderer and added currentCloudHeight and cloudRenderOrderHeight to SettingsManager. Also bumped celeritas-common to 2.5.8-GTNH and made PersistentStreamingBuffer log a warning when a fence wait does not signal. - @mitchej123
- Added: cloud height offset setting behaviour
- Removed: WorldType cloud height overwrite
- Fixed: streaming buffer fence wait failing silently
- #1910 Updated default zoom speed constant in Settings class. - @Caedis
- #1907 processFace in CompactCtmQuadProcessor takes the rendered face from the MixinRenderBlocks renderFaceXXX injectors. BlockOrientation replaces flipBottom with a flipped flag and flipFace(), and getOffset uses ForgeDirection.OPPOSITES when flipped. - @tiffit
- Fixed: compact CTM ignoring which renderFace method was called
- #1893 Bumped required-after:gtnhlib in AngelicaMod from 0.8.21 to 0.11.19 and README to >= 0.11.19. Added a DependencyVerifier check in AngelicaClientTweaker for fastutil's ObjectBooleanBiConsumer class, with an outdated-GTNHLib message. - @mitchej123
- Added: startup check for GTNHLib 0.11.19 or newer
- #1886 Refactored MixinRendererLivingEntity_OverlayTint to remove armor tinting and added damage overlay as a separate config option in AngelicaConfig. - @Eclipse-Sol
- Added: damage overlay config option
- Removed: armor overlay tinting
- #1799 Rewrote MixinTextureMap (NotFine interpolated texture map) to use two @ModifyVariable injections on registerIcon instead of an @Inject that cancelled the method, and made the completeResourceLocation shadow public. - @tiffit
- #1748 Modified ReeseSodiumVideoOptionsScreen to clamp the options screen aspect ratio to 5:4 instead of 16:9. - @Apis035
- #1734 IDynamicLightProducer.getLuminance now takes an ItemStack parameter. DynamicLights.getLuminanceFromItemStack checks IDynamicLightProducer before ItemBlock. - @ABKQPO
- Migration: Addon developers implementing IDynamicLightProducer must change getLuminance() to getLuminance(ItemStack stack).
- #1726 Unified neighbor checking and texture mapping logic between compact and normal CTM by making neighbor checks metadata-sensitive in BlockOrientation and consolidating TileOverride handling. - @Ruling-0
- Added: BlockOrientation metadata-sensitive neighbor methods
- Removed: redundant TileOverrideImpl metadata handling
- Fixed: compact CTM metadata connection, compact CTM shading
- Closes #1677
- #1723 Removes shouldUseDSA and the RenderSystem.textureImage2D calls in GLStateManager, and drops the framebufferSupported and fboEnabled fields from GLSMInitConfig. MixinInitGLStateManager sets fboEnable to true, and a new noErrorChecks flag is driven by AngelicaConfig.disableErrorChecks (default true, requires MC restart). - @sisyphussy
- Added: config option to disable GL error checks
- Removed: DSA texture upload path in GLSM, framebuffer enabled checks
- #1704 IrisLimits.MAX_COLOR_BUFFERS changes from 16 to 32. - @SpacEagle17
- #1675 Refactored NTM Space mixins to change compatibility strategy. Removed separate ShaderCompat mixin and consolidated into primary MixinSkyProviderCelestial. Updated WorkaroundUtils. - @kotmatross28729
- Added: Sky rendering compatibility
- Removed: ShaderCompat and Tweaks mixin variants
- Fixed: NTM Space shader compatibility issues
- #1672 Updated version check in AngelicaClientTweaker to enforce 0.9.0+ GTNHLib and improved dependency validation in Umbra. - @danyadev
- #1649 Modified MixinEntityRenderer to always render clouds late for shader compatibility. - @DarkShadow44
- Added: Late-stage cloud rendering for shaders
- #1648 Added mixin to MixinEntityRenderer that disables vanilla clouds when shaders are enabled. - @DarkShadow44
- Added: Cloud disabling for shader compatibility
- #1631 LegacyIdMap.addLegacyValues now builds the block ID map from GameData/Block registry instead of the hardcoded table. It replicates the signed-byte wrap of IDs 128-255. IdMap parseBlockMap and parseRenderTypeMap take a key prefix and file name, and the modern-to-legacy conversion call there is removed. - @Eclipse-Sol
- Added: legacy block IDs built from the block registry
- Removed: hardcoded vanilla legacy ID list
- #1609 Added AngelicaConfig.transformerCompat.narrowEars (default true, RequiresMcRestart). AngelicaLateTweaker replaces the com.unascribed.ears exclusion with com.unascribed.ears.asm and com.unascribed.ears.common.agent. AngelicaClientTweaker registers the narrowTransformerConfig call for Ears. - @mitchej123
- Added: narrowEars config option
- #1599 Refactored horse rendering mixins to create a separate ModelHorseArmor class and updated MixinRenderHorse to render armor as a distinct layer. Removed the overly broad item material ID flag from ItemMaterialHelper. - @Eclipse-Sol
- Added: ModelHorseArmor class, armor layer separation
- Removed: global horse item material flag
- Fixed: horse armor rendering compatibility
- #1516 Added SelectionBoxRenderer (vertex, fragment and optional geometry shader for wide-line emulation) hooked in by MixinRenderGlobal_SelectionBox, and initialised from GLStateManager.init. BatchingFontRenderer and CenterDepthSampler now load shaders through ShaderLoader, centerDepth shaders moved to assets/angelica/shaders, and StreamingUploader dropped the unsynchronized map flag. - @mitchej123
- Added: shader-based selection box renderer
- #1489 BatchingFontRenderer, FontProviderUnicode, and FontStrategist calculations refined; FontConfig and FontConfigScreen updated with book mode option. - @DeathFuel
- Added: book mode text rendering option
- #1475 New MixinGuiOptions injects at the RETURN of initGui and removes the button with id 8675309 from buttonList. Registered in Mixins.java, where the client mixin list was also re-sorted. - @mitchej123
- Removed: Super Secret Settings button in Options
- #1454 Toggled boolean values for Horizon and Terrain Fog settings across Settings.java, NotFineGameOptionPages, SodiumGameOptionPages, language files, and related render mixins. Enhanced slider description for near fog distance. - @Caedis
- #1452 Re-added MixinWavefrontObject, which overwrites WavefrontObject.renderAll to call IModelCustomExt.renderAllVBO. It is registered under the REPLACE_FFP mixin group, gated by AngelicaConfig.replaceFFPUploads. - @sisyphussy
- Added: MixinWavefrontObject
- #1445 AngelicaConfig gains pinnedGLVersion (0-46, default 0) and disableGLVersionPinning. AngelicaLateTweaker removes Reika.DragonAPI.ASM from LaunchClassLoader transformerExceptions by reflection and re-adds the individual sub-packages. GLStateManager alpha test enable and disable now bump fragmentGeneration. Removed SodiumGameOptionPages.debug, URLUtils and their lang keys. Reworked MixinForgeHooksClient_CoreProfile. - @mitchej123
- Added: pinnedGLVersion config option, disableGLVersionPinning config option
- Removed: Debug video options page, GL state cache toggle
- #1409 Removes the BlendModeOverride arguments from the ArmorGlint and SpiderEyes entries in ProgramId, along with the TODO and unused imports. The PR body says commit 0325a96b fixed the underlying issue. - @Eclipse-Sol
- Removed: blend override on armor glint and spider eyes programs
- #1402 Modified Settings screen shake intensity constant. - @Caedis
- #1391 MixinTessellator adds a per-vertex state int array via StateAwareTessellator, and MixinRenderBlocks flags vertices rendered with the AO flag set. AngelicaChunkBuildContext.copyRawBuffer takes the vertex states and uses them in place of the light-value heuristic. QuadLightingHelper and the render ID checks for cross and double plant blocks are removed. - @embeddedt
- Added: per-vertex state tagging in the tessellator
- Removed: emissive lightmap heuristic, diffuse inversion logic
- #1374 Added HUD caching toggle to AngelicaConfig and SodiumGameOptionPages, changed default HUDCaching behavior to disabled. - @mitchej123
- Added: HUD caching runtime toggle
- #1354 Refactored video option pages, improved camera invalidation handling, and removed SodiumClientMod class to consolidate sodium options integration. - @mitchej123
- Added: camera interpolation fixes, third-person view camera invalidation
- Removed: SodiumClientMod class
- Fixed: camera interpolation behavior
- #1340 AngelicaRedirector copies every GLxx method redirect to a GLxxC entry, adds the names to the constant pool parser, and lets the glEnable/glDisable check match GL11C. - @sisyphussy
- #1329 GLDebug routes messages through the logger with a stack trace. DeferredWorldRenderingPipeline adds IrisSamplers/IrisImages custom image and texture binding. ShaderTransformer.init builds a hoist pattern from VERSION_REQUIREMENTS and RenderSystem support checks. GTNHLib goes to 0.9.6. PixelType.UNSIGNED_INT now uses GL_UNSIGNED_INT instead of GL_UNSIGNED_BYTE. The body also mentions environmental defines, which are in files not shown. - @mitchej123
- Fixed: wrong GL type constant for UNSIGNED_INT pixel type, custom images and textures not bound in some passes
- #1200 Large rewrite of DisplayListManager, GLStateManager and CommandBufferBuilder: no glsm push/pop during compile, relative transform tracking for all matrix modes, matrix/draw barriers that force a flush. DrawRange gains restoreData and DrawRangeWithBuffer carries vertex flags and a draw source. - @mitchej123
- Fixed: display list compilation bugs
- #1106 Increased scroll offset value in ScrollBarComponent.java for video settings and related GUIs. - @ALongStringOfNumbers
- #1100 CommonUniforms.addNonDynamicUniforms only calls HardcodedCustomUniforms.addHardcodedCustomUniforms when the new AngelicaConfig.enableHardcodedCustomUniforms is true (default false). - @Cleptomania
- Added: config option to enable hardcoded custom uniforms
- Fixed: shader pack custom uniforms colliding with built-in hardcoded uniforms
Bug Fixes
- #2205 Adds an excludeMethod entry for GuiLevelTerminal.drawReadableAmount to the DarkModeFontTransform recolor targets. - @Ranzuu
- Fixed: Level Terminal amount text outlines in dark mode
- Closes Shadow-UI#12
- #2204 FontProviderCustom no longer touches GL for glyph metrics and creates atlas textures on first draw. GLStateManager.requireContext now throws IllegalStateException for gen/create calls on a thread with no GL context, instead of aborting the JVM; RenderBackend gets hasContextOnThread. - @mitchej123
- Fixed: crash when mods measure text off-thread with a custom font, atlas textures not freed when custom font set to (none)
- #2202 Wide-line geometry shader clips endpoints against the near plane and interpolates varyings. The FONT and FONT_PIPELINE StateSets now also restore color mask, cull, polygon and polygon offset state. Adds TextDrawState and ItemBlockLight, changes DynamicLights and SelectionBoxRenderer, and adds keyboard handling in the NotFine slider and options list GUI classes. - @Eclipse-Sol
- Added: arrow key support in video settings
- Fixed: GregTech show block outline forced to have depth tests on (#2147), outline geometry clipping at different camera angles (#2101), Nuclear Control info panel text z-fighting with deferred font batches (#2146), certain items missing dynamic lights (#1774), shaders not rendering terrain when enabled from the main menu (#1540), arrow keys unusable in video settings (#2102)
- #2201 Adds a retained state slot (RETAINED_SLOT, STATE_SLOTS) to the GLSM state stacks so the HUD's exit state is kept on refresh and reapplied on cached frames, plus slotChanged on each stack. Cached HUD is composited with a dedicated shader, and the requested blend func stays in the GLSM cache under the HUD alpha override. - @mitchej123
- Added: dedicated shader for compositing cached HUD color and depth
- Fixed: HUD caching flicker, cached HUD GL state differing from the non-cached HUD
- Closes #2141
- #2200 FontStrategist gets an int-to-ResourceLocation mapping, where negative ints stand for resource locations. FontProviderMC and FontProviderUnicode use it, and BatchingFontRenderer drops its textureFor splash workaround. - @DeathFuel
- Fixed: splash texture corruption
- #2198 ShaderPack.readRawTexture now initialises blur and clamp to true; an explicit .mcmeta still overrides them. - @zerosignal0101
- Fixed: banded output from shader packs relying on the default raw texture filtering
- #2197 PacerCore gets a gateAbandoned latch set alongside probeExhausted when the inconsistent-pair limit is hit, checked in updateLock, and cleared in armProbe(). Tests added in PacerCoreTest. - @mvanhorn
- Fixed: frame pacer oscillating between hardware and wall-clock pacing and flooding logs (#2155)
- Closes #2155
- #2195 ShaderTransformer.extractRwImageStores now removes the split stage's artifact from artifactsOut. GlslVulkanPreprocess renames identifiers in a TARGET_RESERVED set of C++ keywords to angelica_renamed_<name>. - @mitchej123
- Fixed: shaders disabled when a stage is split into a compute pre-pass, C++ keywords used as shader identifiers rejected by Metal
- #2192 DSAUnsupported now restores the previous binding via TextureBindingStack (previousBinding) instead of the cached server-state binding. Unused textureStorage1D/2D/3D DSA and backend methods are removed. IrisGLSMBridge notifies all uniforms on a shared notifier, ColorizeBlock is changed for the redstone color race, and TargetedMod gets a Lumi entry used to skip the light-lag mixin. - @mitchej123
- Added: Lumi targeted mod entry
- Removed: unused textureStorage DSA methods
- Fixed: wrong 2D binding after emulated DSA edits, liquid bottom faces, redstone color race, Iris uniforms sharing a notifier not all updated
- #2191 Adds FenceProbe to detect the inverted fence query (libsdl-org/SDL#16128), FenceReleaser to avoid releasing unsignaled fences (SDL#16213), and Submits to serialise command buffer submission. MainThreadPump gets a present-pump path run from Presenter, and per-upload and per-sampler-parameter allocations are removed. - @mitchej123
- Added: fence probe and releaser, DebugCounters
- Fixed: SDL Metal inverted fence query, unsignaled fence release
- #2187 EntityRenderScope.begin now calls PassRebindGate.rebindIfDirty() after GbufferPrograms.beginNestedEntityPhase(). - @Eclipse-Sol
- Fixed: entities not instanced under shaders
- #2186 EntityMaterials.fromCurrentState now reads the effective color mask via a new GLStateManager.getEffectiveColorMask (ColorMaskStack.readEffective) and maps color-masked-off draws to new DEPTH_ONLY / DEPTH_ONLY_CUTOUT materials; unrepresentable states fall back to live rendering. - @Eclipse-Sol
- Added: depth-only entity materials, effective color mask query
- Fixed: EFR boats rendering wrong under batching (#2030)
- Closes #2030
- #2185 Adds TileEntityLight.packedLight, which reads sky and block light for blocks that use neighbor brightness and have zero opacity. MixinTileEntityRendererDispatcher uses it via ModifyExpressionValue when a shader pack is active, and ShadowRenderer.renderTileEntity uses it too. The dynamic light logic from MixinWorld moves into DynamicLights.addDynamicLight. - @Eclipse-Sol
- Fixed: signs being too bright with shaders
- Closes #2183
- #2184 Adds an excludeMethod entry for thaumcraft.client.lib.UtilsFX.drawTag to DarkModeFontTransform. - @Ranzuu
- Fixed: font outlines on aspect counts in the Research Table
- Closes Shadow-UI#11
- #2180 BiomeVertexBlender gets deferBlockTint and per-face corner tables. The blockColor path in the grass, leaves and liquid mixins is removed. biome_blending MixinRenderBlocks now wraps colorMultiplier calls in renderStandardBlock and renderBlockLiquid. The mcpatcherforge cc and ctm_cc RenderBlocks mixins and MixinTessellator are adjusted. - @Eclipse-Sol
- Fixed: grayscale foliage with Better Foliage
- #2179 FontProviderCustom passes GL_RGBA instead of GL_BGRA as the internalformat argument of glTexImage2D. - @DeathFuel
- Fixed: wrong internal format for custom font texture upload
- #2176 Moves the entity attribute logic from FallingBlockRendering into a new BlockMaterialAttribute class. Adds wantsFaceNormals/writeFaceNormals to ImmediateExtendedAttribHandler, used by TessellatorStreamingDrawer for quads without normals during world render. MixinRenderBlocks.angelica$shouldApplyCeleritasAO now returns false outside Celeritas meshing. - @Eclipse-Sol
- Added: face normals for tessellator quads without normals under shaders, block.properties id on mc_Entity for custom-rendered blocks
- Fixed: shader issues with custom block rendering (Malisis Doors)
- #2175 SimpleReloadableResourceManager.domainResourceManagers is now read as Map<String, ?> and entries are checked with instanceof FallbackResourceManager in AtlasPackPolicy, EmissiveTextureAutoloader and TexturePackAPI. Added a test with a foreign IResourceManager entry. - @mitchej123
- Fixed: crash with KaizPatchX in 2.2.24, async atlas failing on non-FallbackResourceManager domains
- Closes #2174
- #2170 DeferredWorldRenderingPipeline uses SHADOW_INPUTS for SHADOW and SHADOW_TRANSLUCENT program matching via inputsFor. MixinRenderGlobal sets TERRAIN_SOLID, then TERRAIN_CUTOUT_MIPPED, for the pass 0 layers through a new iris$setTerrainPhase helper. - @zerosignal0101
- Fixed: shadow pass lightmap folded to a constant, opaque terrain reporting MC_RENDER_STAGE_TERRAIN_CUTOUT
- #2169 BatchingFontRenderer.textureFor falls back to binding the font texture through a new FontRendererAccessor.angelica$bindTexture, implemented in MixinFontRenderer, and reads back the bound id when the TextureManager is null and the provider is not custom. - @KAMKEEL
- Fixed: splash screen crash from font texture lookup race
- #2168 BatchingFontRenderer records the depth mask per TextSegment in sealBatchSegment, as it already did for depth test. flushDeferredThroughPipeline applies each segment's mask instead of calling glDepthMask(false). - @KAMKEEL
- Fixed: nametag text not writing depth, tile entities and translucent terrain drawing over nametags
- #2164 BakedTransformCapture now overrides addVertex and setNormal to apply the matrix delta to directly written vertices and normals. While a direct capture is active, Tessellator.instance is the capture, so RenderBlocks.renderBlockAsItem never went through interceptDraw and the rotation and translation were not baked into the cached mesh. - @micvog
- Fixed: snow golem pumpkin rendered off-center, dropped and held blocks rotating around a corner
- Closes GTNH#27011
- #2162 GLStateManager now calls beforeUncapturedStateChange for more capabilities (color logic op, color sum, rasterizer discard, sample coverage options, draw buffer, secondary color) and per texture unit via beforeUncapturedTextureUnitChange. StateSet batch now saves texture unit 1, lights, materials, light model, color material and normalize state. TextureUtilHooks saves and restores min/mag filter and anisotropy, and a new LightingSnapshot class holds lighting state. - @Eclipse-Sol
- Added: LightingSnapshot
- Fixed: lightmap disabled after TESR batching, leaked GL state after batched tile entity rendering
- #2159 Adds TesrProviderDispatch.blockMetadata(te), which reads the blockMetadata field when the tile entity has no world, and uses it in MixinTileEntityRendererDispatcher and tryRender. EFR's getBlockMetadata override threw an NPE after the TESR scope was pushed and before the RETURN hook popped it. - @micvog
- Fixed: attrib stack overflow crash from world-less TESR item renderers, crash opening Building Better Bases quest line
- #2158 Adds BatchStateGuard and a batchStateGeneration counter in GLContextState so deferred batched draws are flushed before uncaptured state changes. DisplayListManager gets per-matrix-slot transform tracking, and Draconic-Evolution is added as a compileOnly dependency. - @Eclipse-Sol
- Fixed: Iris program binding with instanced and batched mobs and TESRs, Draconic Evolution placed items rendering, Thaumcraft Thaumometer rendering
- #2157 SDL-GPU emulates color logic ops. Adds readPixels(long offset) to RenderBackend and GLStateManager.glReadPixels, a PackState class, and DepthStencilReadback. Reworks SDLGPURenderBackend readback and adds GL tests (ReadbackGLTest, LogicOpGLTest). - @mitchej123
- Added: color logic op emulation on SDL-GPU, pixel pack buffer readback
- Fixed: text selection highlight drawn as solid blue box, pixel readback ignoring format, type and pack settings, depth and stencil reads returning color, GL_RGB10_A2 textures losing precision
- #2153 Removes the per-frame clearedTexturesThisFrame and clearedStencilTexturesThisFrame tracking from ContextState. PipelineApplier now decides on a depth/stencil clear from pending clears or whether texture content is defined. - @mitchej123
- Fixed: NEI items vanishing with ModularUI2 screens open on SDL-GPU
- #2142 Each GL drawable now gets its own GLContextState in GLStateManager instead of shared static state. Managers (DisplayListManager, VAOManager, ShaderManager, CompatUniformManager, FeedbackManager) take a context argument, the display list ID allocator is synchronized, and shared program maps use a draw lock. - @mitchej123
- Fixed: black loading splash on SDL-GPU, crashes during loading from splash and main threads sharing GL state
- #2139 CloudView.updateCamera derives the camera offset from the inverse affine model-view matrix. CloudLayerRenderer, CloudRenderer's draw sort and far plane, and the MixinEntityRenderer cloud height check add this offset. - @Eclipse-Sol
- Fixed: clouds not building properly, cloud draw order issues
- #2138 Adds ScissorState and ScissorStateStack to GLSM and handles GL_SCISSOR_BIT in the attrib stack, so push and pop restore the scissor box. SDLGPURenderBackend and AttachmentClear now apply the scissor to attachment clears. Also tracks GL_RASTERIZER_DISCARD. - @mitchej123
- Added: scissor box state tracking in attrib stack
- Fixed: SDL-GPU scissor clears clearing the full screen, NEI multiblock preview flickering and covering the screen
- #2137 ShaderPack stores mappedByDimensionProperties and legacyDefaultFolder, and resolveDimensionFolder falls back to world0 for unmapped dimensions in legacy packs. IrisLogging.warn overloads are corrected, and DimensionFolderResolveTest is added. - @mitchej123
- Fixed: shaders not compiling in modded dimensions, Iris shader pack warnings
- Closes #2128
- #2133 GLStateManager.reset() now aborts display list compilation, invalidates generation counters, framebuffer bindings and the backend state mirror (new RenderBackend.invalidateStateMirror, ContextState.invalidateMirror), and replays state. Adds RenderRecovery, BatchingFontRenderer.resetAfterCrash, GLDebug.resetGroupStack and TesrBlendScope, and reworks BetterCrashesCompat and the TileEntityRendererDispatcher mixin. - @mitchej123
- Fixed: stale render state after intercepted crashes
- #2130 StandardMacros.createStandardEnvironmentDefines now checks DHCompat.hasRenderingEnabled() instead of DHCompat.isPresent() before defining DISTANT_HORIZONS. - @DarkShadow44
- Fixed: Distant Horizons shader compat glitches with DH rendering disabled
- #2126 DisplayListManager now records state pushes and pops (recordPushState, recordPopStateIfPending, virtualStateDepth) using StateSet.pushCommand. GLStateManager.pushState splits into a recording path and pushStateLive, and MAX_ATTRIB_STACK_DEPTH goes from 18 to 32. Adds GLSM_DisplayList_StateSet_GLTest. - @mitchej123
- Fixed: exception when push/pop attrib is used inside a compiling display list
- #2123 ClassDump.dumpRFBClass now calls classNode.markDirty() before computeBytes(), following RFB API changes. - @Alexdoru
- Fixed: ASM class dumper broken after RFB changes
- #2122 Replaced the SCROLL_SPEED constant with texture scale values passed via u_Scroll.zw in CloudUniforms.setScroll and used in cloud_faces.vert. Added CloudDisc.cellCoordinate, textureOffset, withinMargin and withinDisc, and dropped the manual 2048 wrap in CloudRenderer. - @Eclipse-Sol
- Fixed: cloud flashes at texture wrap edges
- #2112 Terrain fragment shader now limits the sample footprint to the sprite gutter (USE_ANISOTROPIC and TERRAIN_GUTTER defines) and fades out RGSS as the footprint nears the gutter. Anisotropy is now set on the sampler as a float via a new RenderSystem.samplerParameterf. SpritePadding.padFrame was rewritten to copy rows into the padded array before clamping borders. - @Eclipse-Sol
- Fixed: mipmap bleeding on terrain with anisotropic filtering
- #2110 Added GLStateManager.checkGLError() built on Angelica's glGetError(). GLSMRedirector now redirects org/lwjgl/opengl/Util.checkGLError to it, so disableErrorChecks is honoured. Test added in GLSMRedirectorTest. - @JamesOBrien2
- Fixed: Xaero's World Map OpenGLException 1282 crash on MacOS when loading a world
- #2108 EntityMaterials gained ADDITIVE_CUTOUT and ADDITIVE_ALPHA_CUTOUT materials, with no-depth-write variants, so fromState keeps a captured GREATER 0.1 alpha test for additive blends. Other alpha test settings on additive draws return null and stay live. - @Eclipse-Sol
- Fixed: White boxes on modded mobs with additive eye layers
- #2107 MixinFontRenderer's drawString injection moved from HEAD to just after the enableAlpha() call, with remap = false. - @Algent
- Fixed: Cover transparency in the hotbar
- #2106 GLStateManager.updateDisplay on a non-main thread now calls the new RenderBackend.updateDisplayFromWorkerThread. Lwjgl2GLRenderBackend overrides it to pump messages and call Display.update(false), so width and height sync. The default still swaps buffers and pumps messages. - @danyadev
- Fixed: Betterloadingscreens rendering issue on resize with LWJGL2
- Closes #2060
- #2099 Added indexed enable/disable and blendFuncSeparatei tracking in GLStateManager, sampler binding tracking (SamplerUnitArray) with GL_SAMPLER_BINDING support, and GLSMRedirector entries for ARBSamplerObjects, ARBMultiBind and glBindSamplers. The streaming buffers got a binding cache, and the bindVoxelizationRegion signature lost its vertexBufferGlId parameter. - @mitchej123
- Added: Sampler binding tracking, Redirects for ARBSamplerObjects and ARBMultiBind
- Fixed: GLSM bypasses in indexed enable/disable, blend and sampler calls
- #2095 SDLGPURenderBackend now calls a new flushAndSubmitMidFrame() (drain deferred regions, flush attrib ring, await transfers, submit mid-frame) before each texture readback path. TextureOps.readbackTexture no longer submits itself; tests updated and ReadbackSubmitOrderGpuTest replaced by GlsmSdlReadbackTest. - @kurrycat2004
- Fixed: Clouds missing with sdl-gpu enabled
- #2093 Removed remap = false from the getCloudHeight @ModifyReturnValue in the notfine clouds MixinWorldProvider, so the mixin target is remapped correctly. - @kurrycat2004
- #2091 CameraUniforms.getRenderDistanceInBlocks() now subtracts one chunk (minimum 1) when DH is present and vanilla chunk tracking is off. The reported far value then matches the boundary that is actually rendered. - @DarkShadow44
- Fixed: shaderpack fade to Distant Horizons not working
- #2090 Removed the glVertexAttribPointer call from the IrisGenericRenderProgram constructor. - @DarkShadow44
- Removed: redundant glVertexAttribPointer call in DH generic render program
- Fixed: Distant Horizons integration crash on LWJGL2
- #2088 MixinFrustrum now re-snapshots the frustum intersection in setPosition as well as in the constructor. MixinEntityRenderer resets blend and alpha test state (blend off, alpha func GREATER 0.1, alpha test on) after the hand render. - @Eclipse-Sol
- Fixed: Schematica preview/ghost mode disappearing, transparent blocks hiding ghost blocks behind them
- Closes #1948
- #2085 AutoClosableAbstractTexture.close() now calls deleteGlTexture(). PBRAtlasTexture.close() also calls clear() and super.close(). PBRTextureManager.closeTexture() closes AutoCloseable textures, and Iris.destroyEverything() now calls PBRTextureManager.INSTANCE.clear(). - @danyadev
- Fixed: PBR atlas texture still animating after shaders are turned off
- #2075 TileEntityMarkerTransform takes an asmApi argument instead of hardcoding ASM5, because the ASM5 visitor throws on the NestMember attribute. CeleritasBlockTransformer passes ASM5 and RFBCeleritasBlockTransformer passes the newest ASM version from RetroFuturaBootstrap. - @Eldrinn-Elantey
- Fixed: missing pass 1 rendering for tile entities with NestMember attribute, OpenBlocks Enhanced Building Guide ghost blocks not showing
- #2073 NaturalTextureUtils.getTopRotation replaces the old position hash with a multiply-and-splitmix64 finalizer and returns the top two bits. - @Caedis
- Fixed: checkerboard pattern in natural texture rotation
- Closes #1570, GTNH#26662
- #2072 Adds a cap field to TextureUnitStateEvent, set in TextureUnitBooleanStateStack. The IrisGLSMBridge listener now ignores events whose cap is not GL_TEXTURE_2D. - @philipxjm
- Fixed: white tile entities, hand and held items near ender tank or linked essentia mirror with shaders
- Closes #2032
- #2071 BatchingFontRenderer records the depth test state in each TextSegment at seal time. flushDeferredThroughPipeline switches depth test per segment and restores it afterwards. - @philipxjm
- Fixed: travel anchor text visible behind solid blocks
- Closes #2042
- #2066 FontStrategist no longer skips GraphicsEnvironment.getAllFonts() when isHeadless() is true. It uses a new checkIsSafeToUseAwtEnvironmentData() check, which reads the version through DefaultArtifactVersion, based on the RetroFuturaBootstrap change that made parts of Swing usable again. Also adds Java import rules to .editorconfig. - @danyadev
- Added: custom font support on macOS
- Fixed: only bundled fonts available on macOS
- #2064 ShaderManager.enable() now calls activate() immediately when GLStateManager.getActiveProgram() is 0, because no later glUseProgram(0) call may occur. - @danyadev
- Fixed: FFP emulation enabled but inactive when program 0 already bound
- #2063 FontStrategist now also calls SimpleReloadableResourceManager.reloadResourcePack on the added font DefaultResourcePack, since BetterLoadingScreen no longer refreshes resources. - @danyadev
- Fixed: custom font rendered as white bricks on BetterLoadingScreen splash
- #2056 Added null cleanup in
BopFogColorSource,FogBiomeCache, andCeleritasWorldRenderer, plus mixin override inMixinFogHandlerBiomeCacheto prevent world client reference retention. - @Alexdoru- Fixed: World client leaks in BiomesOPlenty fog handlers
- #2054 Modified
MixinTextureMap.updateAnimations()to read and apply theanimateOnlyVisibleTexturesconfig setting. - @Chitak985- Fixed: Animate only visible textures setting not being used
- #2052 Modified
MixinRenderBlocksto enable CTM mining/breaking overlays by adjusting the quad processing pipeline during block breaking animation. - @Kremnari- Fixed: CTM connected textures disappearing during block mining
- #2045 Modified
BatchingFontRendererto gate glyph color multiplication by world lighting, restricting world-space tinting to only world-rendered text and never GUI text. - @Ranzuu- Fixed: GUI color leakage from world lighting (ColorUtils regression)
- Closes #2040
- #2037 Modified TESR cache mixins for chest and ender chest renderers to use the currently bound texture instead of hardcoding vanilla textures. Added new mixin
MixinTileEntityChestRenderer_BindTextureto track texture binding state. - @kurrycat2004- Added: MixinTileEntityChestRenderer_BindTexture
- Fixed: Modded chest TESR caching texture rendering
- #2031 Added mixin to
MixinCubicChunksCubethat synchronizes tile entity mutations to use the column map's write lock, preventing ConcurrentModificationException when CubicChunks modifies tile entities while Angelica's ColumnTileEntityMap is being read for render snapshots. - @Jakfut- Added: CubicChunks tile entity write lock synchronization
- Fixed: ConcurrentModificationException with CubicChunks
- #2025 Enhanced
Presenterin SDL GPU backend, improvedFrameManagerframe delivery logic, optimizedFramePacerwith improved sleep strategies viaPacerSleeper, adjusted Tracy profiler integration for better timing. - @mitchej123- Added: PacerSleeper optimization, Frame delivery improvements
- Fixed: SDL GPU frame presentation, Frame pacing latency
- #2024 Adds TileEntityMarkerTransform, which tags TileEntity subclasses declaring getDescriptionPacket, shouldRenderInPass or getDistanceFrom with marker interfaces at class-transform time. Runtime code uses instanceof. Removes TileEntityRenderBoundsRegistry and the reflection path. - @mitchej123
- Added: tile entity marker interfaces applied at transform time
- Removed: reflection-based tile entity registry
- Fixed: crash with DragonAPI
- #2018 Created
AwaitingDescriptorutility andAwaitingDescriptorTEinterface, modifiedMixinTileEntity_AwaitingDescriptorto defer ticks until descriptor received, addedMixinNetHandlerPlayClient_DescriptorRepairandMixinWorld_AwaitingDescriptorfor descriptor packet handling. - @mitchej123- Added: AwaitingDescriptor utility, AwaitingDescriptorTE interface
- Fixed: TE initialization with batch packet sending
- #2017 Enhanced state tracking in
GLStateManager, added uniform isolation inDeferredBlendHandlerandDeferredDepthColorHandler, fixed gbuffer assignments for particles and entities, clamped light level at 15 for hand items, added layer state isolation for TEs to prevent leaks, added shader pack capability detection. - @Eclipse-Sol- Added: Uniform leak prevention, Particle/entity gbuffer fixes, Light level clamping, Shader pack capability checks
- Fixed: Iris/Backhand uniform leaks, Backhand lightmap uniforms, Particle gbuffer assignments, Sign text rendering, End portal rendering, Light overflow in hand items
- #2016 Refactored sign rendering layer management in
RenderLayerandTesrBatchRenderer, adjusted text rendering state and layer logic in TESR batch renderer. - @mitchej123- Fixed: Sign GUI rendering
- #2014 Added
WorkerWorldAccessguard for off-thread world/TE reads, createdMixinWorld_WorkerMutationGuardandMixinNetHandlerPlayClient_DescriptorRepairto guard and log unsafe access, trigger remesh on initial TE descriptor packet inAngelicaChunkBuilderMeshingTask, improvedConcurrentTileEntityMapthread safety. - @mitchej123 - #2005 Created
RendererLivingEntityHelperwith optimized gravity-aware rotation, refactoredMixinRendererLivingEntityto use helper, addedMixinTransformClientHelperfor Starminer client-side transform updates. - @brandyyn- Added: RendererLivingEntityHelper, Starminer transform mixin
- Fixed: Player rotation with Starminer gravity
- Closes #487
- #2001 Narrowed ecosystem transformer exclusions in
EcosystemNarrowRules, addedLTWWorkaroundfor shader swizzle issues, improved SDL GPU render backend initialization and display mode handling, added mixin priority adjustments for CustomNPC compatibility. - @mitchej123- Added: LTWWorkaround, Ecosystem transformer narrowing rules
- Fixed: Journeymap 6 rendering, Legends mods compatibility, OpenLTW swizzle issues
- #1995 Fixed font rendering compatibility, improved
DisplayListManagertransform handling, added SDL GPU display creation fallback chain (Wayland→X11→OpenGL), addedglGetDoubleredirection inGLStateManager, and improved rotation baking for batched display lists. - @mitchej123- Added: Display creation fallback chain, glGetDouble redirection
- Fixed: Font rendering with DuraDisplay, Display list rotation transforms, SDL GPU initialization failures
- #1994 TessellatorStreamingDrawer.uploadAndDraw unbinds the VAO after drawing. buildSrc Lwjgl3AwareInjection uses ASM to add @Lwjgl3Aware to compiled classes in sdl-gpu and lwjgl3-backend, with an ArchUnit boundary test. FRUSTUM_UBO_BINDING and the chunk_cull.csh Frustum block change from binding 0 to 1. Lwjgl3GLRenderBackend.bindImageTexture now reads caps directly. - @mitchej123
- Added: Lwjgl3Aware boundary test
- Fixed: vertex array left bound after streaming draw
- #1992 Added version detection in
ModStatusto identify when the original Battlegear 2 is loaded (version string1.7.10) and disabled incompatible Dynamic Lights compatibility mode inDynamicLights. - @ah-OOG-ah- Fixed: Battlegear 2 incompatibility causing player movement and rendering issues
- Closes #1508
- #1982 Changes ConcurrentTileEntityMap from
implements Map<ChunkPosition, TileEntity>toextends HashMap<ChunkPosition, TileEntity>to satisfy Mekanism's explicit HashMap cast. - @XLin0mu- Fixed: Mekanism ClassCastException crash
- #1976 Adds FFPVertexLighting shader support, updates BatchingFontRenderer to apply lightmap sampling and item lighting, modifies fontFilter.vsh to receive lighting uniforms. Adds FFPVertexLightingGLTest, FontFilterLightmapGLTest, and UniformsRescaleTest. - @KAMKEEL
- Added: FFPVertexLighting system, text lighting tests
- Fixed: text fullbright issue
- #1973 Refactors GLStateManager splash thread handling to reduce race conditions. - @mitchej123
- Fixed: splash thread race condition
- #1970 GLStateManager.glGetInteger now handles GL_ACTIVE_TEXTURE, GL11 GL_BLEND_SRC/GL_BLEND_DST aliases, GL_CULL_FACE_MODE, GL_FRONT_FACE and GL_POLYGON_MODE (IntBuffer variant) from cached state. Unit tests added in GLSM_PushPop_UnitTest. - @mitchej123
- Added: cached readback for active texture, cull face mode, front face, polygon mode and GL11 blend src/dst
- #1969 Adds null checks in SubVBO.render(): skips draw if VAO is null (stale display list) or count <= 0 (no vertices), preventing invalid buffer references passed to NVIDIA driver. - @CRIMSTAL
- #1967 Refactors thread safety in MipmapStrategies attribution hook and MixinTextureMap to prevent race conditions during mipmap assignment. - @Eclipse-Sol
- Fixed: mipmap attribution race condition
- #1966 Corrects coordinate conversion in ClientProxy to properly map chunk space to world space. - @mitchej123
- Fixed: biome jumble (#1963)
- Closes #1963
- #1965 Enhances GLStateManager flag handling, adds emulation of GL_LINE_STRIPPLE in fragment/geometry/vertex shader generators, guards against LWJGL2 buffer checks in Core context, improves Core/Compat detection in build configuration. - @mitchej123
- Added: GL_LINE_STRIPPLE emulation, better Core/Compat context testing
- Fixed: Xaero's World Map crash, BetterQuesting GL_LINE_STRIPPLE crash
- Closes #1755
- #1961 Fixes mouse tracking in IrisGuiSlot scrollbar element. - @Eclipse-Sol
- Fixed: scrollbar mouse following
- #1959 Makes immediate mode recording thread-safe, pre-warms classes on main thread in DisplayListManager and ImmediateModeRecorder, and removes unsafe mixin from MixinSplashProgressCaching. Adds ImmediateModeThreadIsolationTest to verify thread safety. - @mitchej123
- #1957 Adds mixin guards in MixinItemRenderer and MixinRenderBlocks to properly handle plascrete/cleanroom trophy rendering state. - @mitchej123
- Fixed: plascrete/cleanroom trophy rendering
- #1954 Adds conditional gating in EndFlashCompat and IrisExclusiveUniforms to properly control when the end flash effect is applied. - @mitchej123
- Fixed: end flash shader incompatibility
- #1953 Added glGenBuffers, glCreateBuffers and glDeleteBuffers overloads and other buffer methods to GLStateManager, and GLSMRedirector redirects them. RenderSystem and DSAARB now call GLStateManager instead of RENDER_BACKEND. New backend methods: getTexImage with a buffer offset, flushMappedBufferRange and namedBufferData with a size. copyBufferSubData now calls GL31 instead of throwing. - @mitchej123
- Added: missing buffer redirects in GLStateManager, flushMappedBufferRange backend method
- Fixed: buffer calls bypassing GL state tracking, copyBufferSubData throwing UnsupportedOperationException in the LWJGL2 backend
- #1951 Added OpenGL version detection and fallback logic in RenderSystem and MixinForgeHooksClient_CoreProfile to detect non-core contexts and request lower GL versions when necessary. - @mitchej123
- Added: Intel driver compatibility detection, GL version fallback logic, GLVersionParseTest
- Fixed: blank window on older Intel GPUs
- Closes #1460
- #1949 Backported fix from Iris PR #3246 to ExtendedDataHelper to correctly handle midBlock calculation at high coordinates. - @SpacEagle17
- Fixed: midBlock calculation at high coordinates
- #1944 Updated FontProviderUnicode to register as an IResourceManagerReloadListener and re-read glyph_sizes.bin on every resource pack reload. - @Eldrinn-Elantey
- Fixed: unicode glyph widths not updating on resource pack change
- #1932 Added BlockLiquid mixin and BlockLiquidFlowInvoker to properly handle liquid flow rendering, and added Farseek compatibility mixin for correct value access. - @Eclipse-Sol
- Added: BlockLiquid mixin for flow handling, BlockLiquidFlowInvoker interface, Farseek compatibility mixin
- Fixed: streams rendering incorrectly
- #1918 Updated FeatureFlags to re-enable compute shader execution. - @mitchej123
- Fixed: colored lighting broken since 2.1.45
- Closes #1914
- #1917 Updated frustum culling logic to correctly compute far plane with infinite values, and added HugeFarPlaneFrustumTest unit test. - @mitchej123
- Added: HugeFarPlaneFrustumTest
- Fixed: incorrect subchunk culling in pdims without clouds
- Closes #1916
- #1913 Modified BlockOrientation.setFace() to explicitly set flipped to false when switching faces. - @tiffit
- Fixed: CTM flipped state not resetting
- #1905 Updated overlay tint mixin for damage glint, added PlayerReflectionCapture, fixed shadow culling interactions with frustum culling, and improved CloudRenderer and CloudUniforms logic. - @Eclipse-Sol
- Added: PlayerReflectionCapture for shader player reflection, ClippingHelperExt interface for culling state, shader updates for clouds
- Fixed: damage glint appearance, water shader player reflection, shadow culling breaking chunk frustum culling, cloud rendering issues
- #1902 Added LOTRCompat class to handle LOTR-specific biome color adjustments, updated ClientProxy initialization, and fixed ClonedChunkSection color handling. - @mist475
- Added: LOTRCompat compatibility class
- Fixed: Lord of the Rings biome colors
- #1896 Added VAO vertex binding state tracking to GLStateManager and fixed VAOManager to properly handle cable geometry rendering. - @mitchej123
- Added: VAO vertex binding state management
- Fixed: space elevator cable rendering
- Closes #1573
- #1895 Extended DisplayListManager, GLStateManager, and IndexedDrawCapture to handle more glDrawElements variants and added unit tests for display list compilation and indexed draw batching. - @mitchej123
- Added: support for additional glDrawElements overloads, unit tests for IndexedDrawBatchBuilder
- Fixed: entity rendering crash (glDrawElements not implemented)
- Closes #1328
- #1894 Adapted Mesa's assign_attribute_or_color_locations algorithm in CompatShaderTransformer to correctly allocate vertex attribute and color locations during shader compilation for Betweenlands. - @mitchej123
- Added: Mesa-based attribute location assignment, FFP fragment key refinement
- Fixed: Betweenlands dimension black screen
- Closes #1885
- #1891 Corrected alpha blending parameters in FragmentShaderGenerator and VertexShaderGenerator for end portal geometry. - @mitchej123
- Fixed: end portal rendering
- Closes #1482
- #1888 Updated dependencies to handle both old and new gtnhlib versions. Modified PackRenderTargetDirectives to work with fastutil's change from Integer to int in forEach callbacks. - @sisyphussy
- Fixed: build errors with newer fastutil versions
- #1880 Fixed streaming VAO vertex flag initialization so VertexShaderGenerator uses correct attributes instead of uniform fallback. Extended glMultiTexCoord2d support to texture units 2 and 3 for proper lighting. - @RedNicStone
- Added: texture unit 2/3 multi-texcoord support
- Fixed: Xaero's map rendering display
- Closes #1784
- #1877 Added array uniform upload support to GLStateManager and render backends. Corrected uniform state management for shaders requiring array-based uniforms. - @mitchej123
- Added: array uniform upload support
- Fixed: Universium shader rendering
- Closes #1746
- #1874 Extended GLStateManager and render backends to handle glDrawArraysInstanced and variants. Added TileEntityRenderBoundsRegistry for dynamic TE bounding box caching and InstancedQuadDrawGLTest for validation. - @mitchej123
- Added: instanced draw call support, dynamic TE bounds caching, instanced quad draw tests
- Fixed: OpenBlocks Building Guide rendering
- Closes #1653
- #1872 Extracted RendererLivingEntity overlay mixins into separate mixin modules and added conditional targeting that disables them if customplayermodels transformer is present. - @MalTeeez
- Added: conditional mixin targeting for Custom Player Models
- Fixed: launch crash with Custom Player Models mod
- Closes #1869
- #1871 Adjusted particle batching logic in DeferredDrawBatcher to correctly handle particle state during deferred rendering. - @mitchej123
- Fixed: ME emitter redstone particle rendering
- Closes #1436
- #1868 Updated GLStateManager, GlintColorHandler, StandardMacros, InternalTextureFormat, and shader transformation pipelines to match Iris uniforms and GLSL transformations. Added EtFuturumCompat for enchant color compatibility. Disabled compute and tessellation shader features in FeatureFlags. - @Eclipse-Sol
- Added: enchant glint color compatibility layer, shader feature detection improvements, Et Futurum compatibility module
- Fixed: shader compilation errors, enchant glint white color issue, Et Futurum shader compatibility
- #1862 Added forced invalidation of DH depth textures in DHCompatInternal to ensure texture state is refreshed when DH reconnects. - @mitchej123
- Fixed: DH texture depth corruption on reconnect
- #1859 GLSMRedirector adds redirects for glGetFloatv, nglShaderSource, glUniformMatrix4fv and glIsVertexArray. GLStateManager adds glGetFloat(int, float[]), RenderBackend adds isVertexArray, and the LWJGL3 backend accepts GL_KHR_debug for debug output and guards setup and disable calls. - @mitchej123
- Added: redirects for glGetFloatv, nglShaderSource, glUniformMatrix4fv and glIsVertexArray
- Fixed: LWJGL debug output failing on contexts without GL 4.3 or GL_KHR_debug
- #1856 Adjusted MixinItemRenderer_EdgeDepth stencil logic to properly render enchantment glints. - @Eclipse-Sol
- Fixed: enchantment glint appearance
- #1854 Adds PixelUnpackState tracked in GLStateManager and a PixelDataSnapshot used by TexImage2DCmd and TexSubImage2DCmd to record pixel store state in display lists. Removes the unused pixelStoref backend method, frees complex command objects in CommandRecorder, and adds DisplayListManager.unsupportedInList for error messages. - @mitchej123
- Added: glPixelStorei support in display lists
- Removed: pixelStoref backend method
- Fixed: crash with Xaero's World Map (glPixelStorei not implemented)
- Closes #1851
- #1852 Corrected null handling in MixinRenderBlocks CTM rendering code. - @Eclipse-Sol
- Fixed: CTM null pointer crash
- #1845 GLStateManager calls maybeGenerateMipmap after each glTexImage2D overload, and TextureInfo gains baseLevel and generateMipmap fields to track the emulated glTexParameter state. - @mitchej123
- Added: GL_GENERATE_MIPMAP emulation on core profile
- #1844 Added DimensionFlatteningMap to properly map dimensions for shader pack loading, correcting ShaderPack and VanillaBiomeList dimension handling. - @Eclipse-Sol
- Added: DimensionFlatteningMap
- Fixed: shader loading for wrong dimensions
- #1838 Added BooleanParser and improved shader pack initialization in AngelicaChunkBuildContext and ShaderPack to properly handle Steadfast shaderpack loading. - @Eclipse-Sol
- Added: BooleanParser for shader options
- Fixed: Steadfast shaderpack loading
- #1834 Adjusted GLStateManager lightmap state management to prevent stale lightmap values from persisting in VBO rendering for vertex buffer objects lacking per-vertex brightness data. - @kotmatross28729
- Fixed: lightmap leak in NTM VBO
- #1832 Removed automatic .png appending in TileOverride that was preventing CTM resource location paths from matching actual texture paths. - @tiffit
- Removed: PNG extension appending in CTM path handling
- Fixed: CTM texture path matching
- #1831 Corrected vertex encoding, flattening map logic, and shader pipeline configuration in AngelicaChunkBuilderMeshingTask, AngelicaRenderPassConfiguration, IrisExtendedChunkVertexEncoder, and DeferredWorldRenderingPipeline to fix reflection and underwater rendering. - @Eclipse-Sol
- Fixed: water reflections rendering black on load, water reflections not displaying, underwater effects, custom lava noise effects
- #1827 Added more specific exclusion rules in EcosystemNarrowRules and AngelicaConfig to prevent transformer conflicts affecting FoamFix ear repacking and Fisk's Superheroes player model rendering. - @mitchej123
- #1822 Adjusted CeleritasBlockTransform logic to resolve a regression in TerraFirmaCraft compatibility; removed unused code from CeleritasBlockTransformer. - @mitchej123
- Fixed: TerraFirmaCraft world loading crash
- Closes #1810
- #1821 Added mixins for TileEntityBeaconRenderer and RenderCarvableBeacon to fix shader-related beacon beam rendering, properly setting render conditions for Chisel beacons which use a separate renderer. - @Eclipse-Sol
- Added: shader compatibility for beacon rendering
- Fixed: beacon beam rendering with shaders, Chisel beacon render condition
- #1820 Updated compact CTM
BlockOrientationto apply bottom-face flip fix since Hodgepodge's fix is bypassed by compact CTM. Regular CTM still only applies fix if Hodgepodge's is absent. - @tiffit- Fixed: compact CTM bottom-face flipping
- #1804 Modified
AngelicaClientTweakerto forcibly load GTNHLibCore to bootstrap the dependency loader before Angelica initialization, bypassing RetroFuturaGradle when necessary. - @mitchej123- Added: explicit GTNHLibCore bootstrap
- Fixed: Java 8 class loading dependency order
- #1789 Corrected edge depth rendering in
MixinItemRenderer_EdgeDepthto prevent shadow map memory clobbering on Windows. - @Eclipse-Sol- Fixed: shadow map corruption on Windows
- #1783 Corrected
FeedbackManagerbuffer VBO selection to use correct attribute 0 buffer for vertex data readback. - @MassAnarchyy- Fixed: GL_FEEDBACK readback vertex data, mob-info scaling and positioning
- #1782 Corrected attribute handling in
CompatUniformManager, vertex encoding inIrisExtendedChunkVertexEncoder, and shader uniform matrix calculations in multiple Iris pipeline classes. Changed int to long for memory safety in shader storage. - @Eclipse-Sol- Added: Iris memory protection, shader normal vector fixes
- Fixed: Nether portal outline offset, Ender crystal vortex animation looping, normal vector reading
- #1781 Added TextureInfo and TextureInfoCache with format resolution logic to handle generic compressed image formats like GL_COMPRESSED_RGBA, ensuring proper texture binding. - @mitchej123
- Added: TextureInfo class, TextureInfoCache, compressed format resolution
- Fixed: Xaero's World Map compressed texture crash
- Closes #1758
- #1780 Added key tracking to FragmentKey and improved ShaderManager to handle edge cases in combined shader generation and caching. - @mitchej123
- Fixed: FFP shader linking crash
- #1778 Modified FFP shader generators (FragmentShaderGenerator, GeometryShaderGenerator, VertexShaderGenerator) and shader manager to handle macOS platform-specific OpenGL differences. - @mitchej123
- Fixed: macOS shader linking crash
- #1777 Ported modern Iris/Vanilla damage overlay rendering by adding new fragment shader attributes, uniforms, and mixins for ItemRenderer, Mooshroom, and RendererLivingEntity to properly apply tint overlays. - @Eclipse-Sol
- Added: edge depth rendering support, damage overlay tint mixins, fragment shader tint handling
- Fixed: damage overlay Z-fighting, spider/enderman overlay rendering
- #1773 Added resource reload listeners to BlockRenderListManager and ItemRenderListManager to clear cached render lists when texture atlas changes. - @tiffit
- Added: resource reload cache invalidation
- Fixed: texture pack switching breaking blocks/items
- Closes GTNH#24832
- #1770 Split out IsbrhTessellatorAbuseTransform as shared logic with an FML wrapper (IsbrhTessellatorAbuseTransformer) added in AngelicaClientTweaker.getASMTransformerClass when RFB is absent. Removed the AngelicaLateTweaker registration and updated the RFB wrapper. - @Alexdoru
- Fixed: ISBRH tessellator transformer registered from the wrong class loader
- #1769 Added ChunkBiomeDataChangedEvent and integrated it into chunk section caching logic. Modified ClonedChunkSectionCache to refresh biome data on cache hits and added biome change listener to CeleritasWorldRenderer. - @Caedis
- Added: ChunkBiomeDataChangedEvent, biome cache invalidation
- Fixed: grass/foliage color caching bug
- Closes #1424
- #1767 Added MissingDependencySdl exception class and modified AngelicaClientTweaker to detect and report missing dependencies with clearer error messages. - @mitchej123
- Added: MissingDependencySdl exception class, better dependency error handling
- Fixed: buried SDL dependency errors
- #1766 Added null checks and size validation in framebuffer and render target code (GlFramebuffer, RenderTargets, ShadowRenderTargets) and a mixin guard in Minecraft. - @mitchej123
- Added: window size guard mixin, framebuffer size validation
- Fixed: window resize crash with shaders
- Closes #1532
- #1759 Added IsbrhTessellatorAbuseClassTransformer and RFBIsbrhTessellatorAbuseTransformer to detect and prevent problematic draw/startDrawing sequences from ISBRH implementations. - @mitchej123
- Added: IsbrhTessellatorAbuseClassTransformer, RFBIsbrhTessellatorAbuseTransformer, ISBRH draw call guard
- Fixed: Netherlicious rendering issue
- Closes #1728
- #1756 Modified GLStateManager and RenderSystem to clamp color values like Mesa does, and suspend/restore Pixel Unpack Buffer state around operations that conflict with it. - @mitchej123
- #1751 In MixinEntityRenderer, replaced endStartSection with startSection before updateAll and added endSection after it. - @mitchej123
- Fixed: dynamic lighting profiler section left open
- #1747 Added mixin to fix Z-fighting in skeleton leg rendering by adjusting model transforms in MixinModelSkeleton_LegPelvisZFight. - @Eclipse-Sol
- Fixed: skeleton leg clipping into pelvis
- #1741 Removed stencil attachment requirement from DH framebuffers in GlFramebuffer to match upstream configuration and prevent UNSUPPORTED framebuffer errors on resize. - @DarkShadow44
- Removed: stencil attachment for DH buffers
- Fixed: DH framebuffer UNSUPPORTED on window resize, LOD rendering with shaders
- Closes DistantHorizonsStandalone#83
- #1738 Updated NTM Space mixins (MixinSkyProviderCelestial, MixinSkyProviderLaytheSunset, MixinSkyProviderOrbit) to use obfuscated method names or mapping corrections for proper application. - @kotmatross28729
- Fixed: NTM Space mixins in obfuscated environment
- #1733 Moved vanilla AO flag detection hook higher in MixinRenderBlocks call stack to catch custom block renderers that pass through vanilla AO methods without directly calling renderFace methods. - @branan
- Fixed: smooth lighting with Chisel blocks
- Closes #1399
- #1729 Added compatibility handling in BetterCrashesCompat to handle tessellator state conflicts. - @czqwq
- Added: BetterCrashes compatibility
- Fixed: Already tesselating crash
- #1724 Added null check or reference clearing in CTMUtils to prevent world client retention. - @Alexdoru
- Fixed: world client leak in CTMUtils
- #1722 In GLStateManager, the GL_VENDOR lookup, Vendor.getVendor call and the windows flag moved from init() to the end of preInit(). - @sisyphussy
- Fixed: Intel GPU detection
- #1721 Modified MixinRenderBlocks to properly clear CTM processor state and prevent CURRENT_COMPACT context from leaking between items during recursive rendering calls. - @Ruling-0
- Removed: redundant compactCtmRendering assignment
- Fixed: CTM texture bleeding in inventory
- #1715 Modified program switching logic to restore uniforms when returning to a previous shader program instead of leaving them cleared; added ProgramChangeEvent tracking. - @kotmatross28729
- Added: uniform restoration on program restore
- Removed: ImmediateState uniform tracking
- Fixed: stale uniforms after shader program switch
- #1705 Modified MixinRenderBlocks block render path to catch exceptions from block renderers, log them, skip the failing block, and reset the Tessellator to prevent state corruption. - @Kai-Z-JP
- Added: recoverable block render failure handling
- Fixed: client crashes on modded block rendering exceptions, Tessellator broken state propagation
- #1701 Removed lambda capture in IrisExclusiveUniforms.WorldInfoUniforms that held references to world client state. - @Alexdoru
- Fixed: world client leak in shader uniforms
- #1700 Added world unload hook in ClientProxy to clear dynamic lights collection; restricted dynamic light mixin to client entities only and ensured client-side world load hook runs only for client worlds. - @Alexdoru
- Added: dynamic lights cleanup on world unload
- Fixed: dynamic lights memory leak on world unload
- #1697 Modified CompactCtmQuadProcessor to recalculate lighting per quadrant instead of using stale shading from the original full face. - @Yoshy2002
- Fixed: AO lighting discontinuities in compact CTM
- #1695 Modified CTMUtils and added mixin to MixinRenderBlocks and MixinTileEntityRendererDispatcher to prevent CTM spread to unrelated tile entities. - @Yoshy2002
- Fixed: CTM spreading to adjacent tile entities
- #1689 Added default VAO binding on SharedDrawable and created mixin to swap glGetProgramInfoLog when appropriate. Added test case for SharedDrawable VAO. - @mitchej123
- Added: SharedDrawableVaoTest, MixinShaderRegistry_ParseError
- Fixed: DragonAPI on macOS
- #1687 Added AttribLayoutKey to properly handle VAO attribute layout, fixed buffer sizing in IndexedDrawCapture, and ensured correct AABB initialization in TileEntityRenderBoundsRegistry. - @mitchej123
- Added: AttribLayoutKey class, unit tests
- Fixed: INFINITE_EXTENT_AABB null crash, VAO/VBO snapshot sizing
- Closes #1681
- #1684 Implemented AttribSnapshot to capture VAO/VBO data into display lists, avoiding stale references. Refactored QuadConverter and CommandRecorder to route deletes through GLStateManager for proper lifecycle management. - @mitchej123
- Added: AttribSnapshot for data capture, command recording system
- Removed: CommandBuffer execution system
- Fixed: AE2 crash on NVIDIA GPUs
- #1670 Moved early redirector logic to a new EarlyRedirectorCore class in GLSM to resolve class loading order issues. - @mitchej123
- Added: EarlyRedirectorCore class
- Fixed: Class circularity error
- #1668 Fixed MaterialState to not advance buffer positions for GL_SHININESS, matching vanilla behavior and preventing BufferUnderflowException. - @Cleptomania
- Fixed: Buffer underflow in material shininess handling
- Closes #1638
- #1659 Modified MixinRenderItemFrame to properly clear cached item references, preventing both world client and server leaks. - @Alexdoru
- Fixed: RenderItemFrame world client memory leak
- #1652 Fixed DragonAPI stencil shader registration in GlslTransformUtils, tesselator compatibility in dev/prod builds, and cloud rendering conflicts with shader pipelines. - @mitchej123
- Added: Compatibility tests for shader transformation
- Removed: Conflicting cloud mixin
- Fixed: DragonAPI shader registration crash, Tesselator issues, Cloud rendering conflicts
- Closes #1646
- #1650 Fixed memory leaks in Camera, CeleritasWorldRenderer, and HandRenderer by properly clearing cached references. - @Alexdoru
- Fixed: World client memory leaks in Camera and CeleritasWorldRenderer
- #1647 Updated MixinForgeHooksClient_CoreProfile and MixinTessellator_CoreProfile to resolve NixOS-specific issues. - @mitchej123
- Fixed: NixOS compatibility issues
- #1645 In IrisGenericRenderProgram and IrisLodRenderProgram, the second boolean argument to addGbufferOrShadowSamplers changes from true to false. - @DarkShadow44
- Fixed: Solas shaders mismatch with Distant Horizons
- #1640 Fixed tile override logic in TileOverrideImpl and corrected quad processor calculations in CompactCtmQuadProcessor. - @mitchej123
- Fixed: Compact CTM rendering artifacts
- #1637 Modified GLStateManager.glGet* methods to correctly handle buffer state, ensuring compatibility with mods that query data using the same buffer for both source and destination. - @mitchej123
- Fixed: Buffer incompatibility with mods querying GL state (#1634)
- Closes #1634
- #1632 Added MixinHeldItemGlintEdges to limit shader processing for held items with glint effects, mirroring the fix from MixinDroppedItemGlintEdges. - @mitchej123
- Added: MixinHeldItemGlintEdges to limit held item glint passes
- Fixed: GPU overloading when holding radium dust (#1588)
- Closes #1588
- #1630 Added thread safety checks in GLStateManager.glGetString() and crash report handling in Lwjgl2GLRenderBackend and Lwjgl3GLRenderBackend to prevent race conditions. - @mitchej123
- Added: Thread safety for GL state queries, Off-thread crash report handling
- Fixed: Crash on off-client-thread GL queries
- #1629 Added GL_QUAD_STRIP handling in FeedbackManager and DisplayListVBOBuilder to convert legacy quad strip primitives during display list conversion. - @DarkShadow44
- Added: GL_QUAD_STRIP support in legacy conversion, FeedbackManagerTest with GL_QUAD_STRIP test case
- Fixed: Block loading in Electrical Age (#1600)
- Closes #1600
- #1627 Updated IrisExtendedChunkVertexEncoder and ShaderTransformer to pass mc_Entity variable to shaders, matching upstream Iris behavior for photon shader compatibility. - @DarkShadow44
- Added: mc_Entity variable passing to shaders
- Fixed: Water rendering on photon shaders (LOW quality)
- #1621 Added automatic item ID reset in CapturedRenderingState.setCurrentEntity() and removed broken mixin overrides in RenderItem, RenderManager, and RendererLivingEntity. - @Eclipse-Sol
- Removed: MixinRenderItem item tracking overrides, MixinRenderManager item ID tracking, MixinRendererLivingEntity item ID tracking
- Fixed: Item ID not being reset between entity renders, Damage overlay rendering
- #1620 Added ModStatus check to apply grass rendering logic only when Biomes O' Plenty is present, narrowing the scope of MixinRenderBlocks changes. - @JohnButlerThird
- Added: Mod compatibility check for BOP grass
- Fixed: BOP grass visual artifacts without affecting other mods
- #1619 Updated glsl-transformation-lib dependency and fixed PatchedShaderPrinter logic to correctly dump patched shaders, removing unnecessary double-gating. - @mitchej123
- Fixed: Shaders with functions defined before inputs (#1615)
- Closes #1615
- #1618 Moved client attribute handling logic in GLStateManager to defer uploads, fixing a crash path specific to Java 8 + LWJGL 2 environment. - @mitchej123
- Fixed: Crash on Java 8 with LWJGL 2
- #1613 Added Double parameter overloads to GLStateManager methods to handle type conversions that Modular Powersuits requires. - @mitchej123
- Added: Double overload methods in GLStateManager
- Fixed: GUI crash with Modular Powersuits (#1410)
- Closes #1410
- #1610 Modified TextureTracker, IrisGLSMBridge, StateUpdateNotifiers, CommonUniforms, and FogUniforms to properly notify shaders of changes to atlas size, texture size, blend function, and fog parameters. Re-enabled uniform update callbacks that were broken in 2.0. - @kotmatross28729
- Fixed: atlasSize/textureSize/blendFunc/fog uniforms not updating
- #1607 Modified AngelicaChunkBuilderMeshingTask to correctly handle tile entity render bounds that cross chunk boundaries, preventing premature frustum culling. - @Kai-Z-JP
- Fixed: tile entity render bounds culling
- #1603 Added GL_POLYGON handling in FeedbackManager.emitAllPrimitives (emits GL_POLYGON_TOKEN), GLStateManager.glDrawArrays (maps to GL_TRIANGLE_FAN) and DisplayListVBOBuilder.build. Added FeedbackManagerTest.testPolygonFeedback_GL2D. - @DarkShadow44
- Added: GL_POLYGON support in legacy conversion
- Fixed: polygon primitives unsupported in core profile rendering
- #1602 Expanded VertexAttribState to track and handle more client-side vertex attribute operations. Modified GLStateManager to provide better coverage of vertex attribute pointer calls in core profile contexts, optimizing PR #1594. - @mitchej123
- Fixed: core profile vertex attrib pointer crash
- #1598 Enhanced GLSMRedirector to handle method handles in invokedynamic bytecode, allowing proper redirection of GL calls made through dynamic invocation. Added test coverage for the fix. - @mitchej123
- Added: invokedynamic method handle support, redirector test suite
- Fixed: invokedynamic BufferChecks crash with Immersive Railroading
- Closes #1586
- #1597 In FragmentShaderGenerator.emitAlphaTest the GL_LESS, GL_LEQUAL, GL_GREATER and GL_GEQUAL cases compare the rounded alpha against u_AlphaRef * 255.0 directly. The rounded reference is computed only for GL_EQUAL and GL_NOTEQUAL. - @mitchej123
- Fixed: alpha test rendering with RTM and AE2
- #1596 Re-added phaseChangeNotifier to StateUpdateNotifiers and GbufferPrograms to properly notify shaders when render phases change. This ensures the renderStage uniform updates correctly for all sky phases (SUNSET, SUN, MOON). - @kotmatross28729
- Added: phase change notifier callbacks
- Fixed: renderStage uniform not updating between phases
- #1593 Modified GlslTransformUtils to handle GLSL transform cases that the Blur mod uses, preventing shader compilation failures. - @mitchej123
- Fixed: Blur mod compatibility crash
- Closes #1581
- #1592 Added missing glGetTexImage method stub to GLStateManager to prevent NoSuchMethodError when XaerosWorldMap attempts to call it. - @12411234
- Fixed: missing glGetTexImage crash with XaerosWorldMap
- #1591 Modified DeferredBatchTessellator and DeferredDrawBatcher to properly handle fancy block particle rendering without crashing. - @mitchej123
- Fixed: fancy block particles crash
- Closes #1477
- #1590 Added WitherArmorState tracking and created mixins for ModelWither and RenderWither to adjust armor positioning during rendering. - @Eclipse-Sol
- Added: WitherArmorState tracking class
- Fixed: Wither armor centering
- #1589 Modified DeferredWorldRenderingPipeline and related shader transform classes to pass texture map information to composite shaders and apply texture replacements in the shader transformation pipeline. - @DarkShadow44
- Added: TextureTransformer shader pass
- Fixed: black shaders with photon sky
- #1576 Added a mixin to MixinRenderBlocks_CrossedSquaresNormal to correct the sky lighting calculation for cross-square rendered blocks. - @Eclipse-Sol
- Fixed: sky lighting on drawCrossSquare blocks
- #1575 BatchingFontRenderer now checks and restores the previous blend state instead of unconditionally enabling blending. This prevents state leakage to subsequent tile entity renders. - @kotmatross28729
- Fixed: blend state leak in text rendering
- Closes #1504
- #1571 Modified DeferredDrawBatcher to prevent merging strips/fans/loops/polygons which can cause state corruption. Added state reset logic to avoid state leaks. Updated HUDCaching and DeferredWorldRenderingPipeline for Botania compatibility. - @mitchej123
- #1569 Added depth offset mixin (MixinItemRenderer_EdgeDepth) and modified Enchantment.java to apply depth adjustment when rendering enchant glints in third-person view. - @Eclipse-Sol
- Added: ItemRenderer edge depth mixin
- Fixed: Third-person enchant glint z-fighting
- #1567 Modified DeferredWorldRenderingPipeline alpha test state management and refined ProgramId handling. Updated eye depth mixin for proper alpha test behavior. - @mitchej123
- Fixed: Alpha test in deferred rendering
- #1566 Updated CompatUniformManager to correctly pass animation state to enchant glint shaders, and modified CoreTransformHelper and ExternallyManagedUniforms to track enchant animation uniforms. - @Eclipse-Sol
- Fixed: Modded enchant glints animation
- #1562 Added configuration flag to disable problematic ASM hooks and narrowed mod version requirements for Advanced LightSabers and Alfheim (unreleased versions have native compat). - @mitchej123
- #1559 Added FullScreenQuadRenderer.clearLocCache(), which clears compositeLocCache, and call it from DeferredWorldRenderingPipeline.destroy(). - @mitchej123
- Fixed: stale composite uniform location cache after shader reload
- #1558 Modified RenderCondition, DeferredWorldRenderingPipeline, and ProgramSet to improve handling of specific render conditions for Botania compatibility. - @mitchej123
- Fixed: Botania mana pool rendering with shaders
- #1550 GLStateManager records the pixel unpack and pack buffer bindings, answers glGetInteger for them, and calls suspendPixelUnpackBuffer and restorePixelUnpackBuffer around glTexImage2D. RenderBackend gets mapBuffer(target, access, length, old_buffer) with LWJGL2 and LWJGL3 implementations. - @mitchej123
- Added: glMapBuffer overload with length and old buffer, pixel buffer binding tracking
- Fixed: texture uploads with a pixel unpack buffer bound
- #1547 Modified BatchingFontRenderer alpha test handling and added alpha test state management in the font shader (fontFilter.fsh). Updated MixinRenderBlocks to handle grass block subclass rendering with AO. - @mitchej123
- Fixed: Font alpha transparency with Celeritas AO, BlockGrass subclass rendering
- #1537 Replaced event cancellation in ClientProxy with a Mixin injection into MixinGuiIngameForge_ModernF3 to modify the F3 text background directly during GUI rendering. - @Alexdoru
- Removed: F3 event cancellation in ClientProxy
- Fixed: Event handler skipping when F3 overlay was active
- #1526 FragmentShaderGenerator em dash removed from shader string to comply with ASCII requirement in GLSL 4.20 spec section 1.2.1. - @DeathFuel
- Fixed: shader compatibility with older OpenGL versions
- #1521 CeleritasBlockTransform now uses ClassNode name for transform matching instead of incorrect source. - @Alexdoru
- Fixed: Alfheim mod compatibility crash
- Closes #1483
- #1519 MixinRendererLivingEntity_EyeDepth added to address depth fighting for eye rendering. - @Eclipse-Sol
- Added: MixinRendererLivingEntity_EyeDepth
- Fixed: mob eye z-fighting
- #1518 GLStateManager texture format handling updated to use OpenGL 3.3 Compatibility Spec table 3.17 replacements for deprecated formats. - @DeathFuel
- Fixed: CustomNPC+ dialog text rendering
- Closes #1497
- #1505 CompatShaderTransformer VERSION_PATTERN now uses [ \t]+ instead of \s+, so the optional profile group no longer matches across a newline. Two tests were added. - @mitchej123
- Fixed: shader #version handling eating the first word of the next line
- #1503 Adds glGetTexEnvf, glGetTexEnvi and glGetTexEnv(IntBuffer) to GLStateManager, reading from the tracked TexEnv state, plus glGetTexGen variants. Registers glGetTexEnv* and glGetTexGen* in AngelicaRedirector. - @mitchej123
- Added: glGetTexEnv and glGetTexGen redirects
- #1501 Adds glVertex2i and glVertex3i to the method list in AngelicaRedirector so those calls are redirected to GLStateManager. - @mitchej123
- Fixed: Botania rendering issue with integer vertex calls
- #1499 MixinGuiMainMenu visibility conflict resolved; mixin configuration updated across all Java version variants. - @mitchej123
- Fixed: MixinGuiMainMenu visibility crash with enablePanoramaBlurShader
- Closes #1498
- #1494 AngelicaLateTweaker updated with Java 8 compatibility handling for Xaero. - @mitchej123
- Fixed: Xaero's Minimap crash
- Closes #1493
- #1492 FontConfigScreen UI layout corrected. - @DeathFuel
- Fixed: font config screen UI issue
- #1480 MixinRenderManager split into two mixins for DAPI compatibility. Mixin configuration updated to handle ASM load ordering correctly. - @MalTeeez
- Added: MixinRenderManagerDAPI
- Fixed: shader mixin not applying with DAPI loaded, crash with mixin debug active
- #1473 Refactored FeedbackManager, ImmediateModeRecorder, and GLStateManager to snapshot vertex array and buffer state during display list recording; renamed ClientArrayState to VertexAttribState; updated AngelicaRedirector with additional redirects; enhanced unit tests. - @mitchej123
- Added: VAO/VBO snapshotting during display list recording
- Removed: ClientArrayState class
- Fixed: armor stand item rendering (#1459)
- Closes #1459
- #1467 PanoramaRenderer.renderSkybox now sets colour mask, disables cull, scissor and depth test before drawing, then re-enables depth test and cull at the end. Also moves completeLatch.countDown() inside the synchronized block in GLSM_ServerSideState_UnitTest. - @mitchej123
- Fixed: Broken main menu panorama after leaving a world
- #1464 Added AngelicaCylinder, AngelicaDisk, AngelicaPartialDisk, and AngelicaSphere to provide LWJGL2-compatible geometry functions; added EarlyRedirectorTransformer to handle GL calls in coremod-loaded classes; updated tweaker and AngelicaRedirector with new redirects. - @mitchej123
- Added: LWJGL2 Quadric-compatible classes, EarlyRedirectorTransformer, GL redirect entries
- Fixed: BetweenLands compatibility, GL coremod workaround
- #1442 GLStateManager.preInit calls glStencilFunc with mask 0xFF and glStencilMask(0xFF) before computing the stencil bit mask. - @sisyphussy
- Fixed: stencil mask starting at 0 on some drivers
- #1440 Removed com.gtnewhorizon.gtnhlib.asm. from the getTransformerExclusions arrays in AngelicaRedirector and CeleritasBlockTransform. Added com.gtnewhorizon.gtnhlib.asm to transformerExclusions in angelica.properties for the RFB plugin. - @Alexdoru
- Fixed: RFB transformer exclusions for GTNHLib ASM
- #1437 Simplified ModStatus Backhand check, removed unnecessary InteractionHand shim, adjusted dynamic lights, fixed HandRenderer logic, and removed pointless iris$skipTranslucentHandsBackhand callback in ItemRenderer mixin. - @Alexdoru
- Removed: InteractionHand compat shim, redundant mixin callback
- Fixed: Backhand mod compatibility
- #1434 Modified AngelicaChunkBuildContext and MixinTextureAtlasSprite for mipmap compatibility. - @mitchej123
- Fixed: chunk build context issues, mipmap sprite handling
- #1418 Added CeleritasLateTweaker, which registers CeleritasBlockTransformer on the launch class loader. AngelicaTweaker adds it when the RFB plugin is not loaded and enableCeleritas is true. Renamed the Sodium* block transform classes to Celeritas*. - @Alexdoru
- Added: CeleritasLateTweaker
- Fixed: Block transformer not running without RFB
- #1414 Added missing resource cleanup in CeleritasWorldRenderer. - @mitchej123
- Fixed: memory leak
- #1413 Updated MixinGuiIngameForge_HUDCaching with additional rendering logic. - @mitchej123
- Fixed: holographic inventory rendering
- #1408 Added unknown blend state tracking and BufferBlendOverride handling from modern Iris in GLStateManager, RenderSystem, and blend state storage. - @mitchej123
- Added: unknown blend state support, BufferBlendOverride handling, blend state unit tests
- Fixed: texture rendering with Thaumcraft
- Closes #1397
- #1392 Changed ShadowRenderer to use renderViewEntity instead of thePlayer for shadow calculation. - @Caedis
- Fixed: shader shadows with freecam
- Closes Freecam#1
- #1390 Fixed FontProviderUnicode and BatchingFontRenderer to properly manage font renderer state instead of maintaining corrupted global state. - @DeathFuel
- Fixed: unicode font visibility in Asian languages
- Closes #1150
- #1386 Updated sign culling logic in TileEntityRenderBoundsRegistry and MixinTileEntity to properly account for rendering bounds. - @mitchej123
- Fixed: sign visibility culling
- #1379 Reduced logging in FontProviderCustom and refactored the implementation for clarity. - @DeathFuel
- Removed: unnecessary logging
- Fixed: Log spam with custom fonts
- Closes #1375
- #1377 Fixed MixinTextureAtlasSprite to handle null cases in texture animation when speedupAnimations is disabled. - @mitchej123
- #1370 Added PFAA Geologica block IDs to AngelicaConfig BlockCrackFix whitelist to prevent texture coordinate issues similar to fix #1161. - @Teteros
- Fixed: PFAA Geologica blocks rendering bugs
- Closes #524
- #1367 AngelicaMainThreadMeshingTask now creates the ChunkCache before updating the smooth biome color cache, and WorldSlice and ThreadedAngelicaChunkBuilderMeshingTask are adjusted. GLStateManager, the GL state manager service and CommandBufferExecutor use UniversalVAO, and AngelicaRedirector redirects UniversalVAO, VaoFunctions and LWJGLService VAO calls. GTNHLib is bumped to 0.9.10. - @mitchej123
- Added: VAO call redirection through UniversalVAO
- Fixed: thread safety of the biome color cache
- #1356 Updated method descriptors in MixinSkyProviderCelestial_ShaderCompat to match new NTM:Space method signatures. - @kotmatross28729
- Fixed: NTM:Space compatibility with updated version
- #1355 Added bounds check in RenderSystem.clearBufferSubData to prevent invalid buffer operations. - @mitchej123
- Fixed: clearBufferSubData crash
- #1349 Modified DisplayListManager to prevent double-rendering of nested display lists. - @sisyphussy
- Fixed: nested display lists rendering twice
- #1348 ShaderTransformer gains version negotiation and downgrade logic (130 -> 120) alongside the existing 120 -> 130 hoisting, plus texture and unsigned-suffix rewriting. InternalTextureFormat adds getColorRenderableFallback() driven by new RenderSystem capability checks (max GLSL version, GL_EXT_gpu_shader4, snorm and packed float support). GLDebug gets framebuffer status and internal format name helpers. - @mitchej123
- Added: GLSL 130 to 120 shader downgrade on macOS, fallback formats for non-renderable framebuffer textures
- Fixed: shader packs failing to compile on OSX due to #version 130
- #1347 Modified MixinRenderManager to reset item material IDs for arrow rendering to prevent them from inheriting the parent item's visual properties. - @Eclipse-Sol
- Fixed: arrows inheriting incorrect material IDs
- #1346 Added end portal feature flag, updated shader program builder and multiple pipeline classes to handle end portal rendering with shader compatibility layers. - @mitchej123
- Added: end portal feature flag, end portal shader support
- Fixed: End portal rendering with shaders
- #1343 Added support for GLSL #version 120, moved config loading earlier to avoid race conditions, and updated shader transformers to handle additional shader variants. - @mitchej123
- Added: GLSL 1.2 version support, EntityPatcher transformer
- Fixed: Shader pack loading compatibility
- #1342 Removed redundant resource refresh in FontStrategist that caused a race condition with BLS initialization. - @DeathFuel
- Removed: redundant resource refresh call
- Fixed: Crash with BLS on startup
- Closes #1271
- #1334 Modified BlockOrientation to correct East-West ordering in CTM bottom face UV mapping when unflipped option is used. - @leagris
- Fixed: Bottom face CTM texture UV connection
- #1332 Added null check in ModdedBiomeDetector. - @mitchej123
- Fixed: NullPointerException in ModdedBiomeDetector
- #1330 Changed shadow rendering in ShadowRenderer and Camera compatibility layer to use entity position instead of camera position for shadow calculations. - @mitchej123
- Fixed: Tile entity shadows detached in third-person view
- Closes #1233
- #1325 Fixed rendering order or state management in AngelicaRedirector for HUD caching. - @sisyphussy
- Fixed: HUD flickering
- #1320 Added IChunkTileEntityMapHolder and ConcurrentTileEntityMap with ReentrantReadWriteLock; deferred tile entity invalidations to main thread; gated map operations with thread safety guards. - @mitchej123
- Added: ConcurrentTileEntityMap, chunk thread safety
- Fixed: chunk tile entity thread safety
- #1317 Modified AngelicaChunkBuildContext to use proper blockAccess reference on main thread. - @mitchej123
- Fixed: main thread block access
- #1315 Fixed CurrentRenderedItemID tracking; added arbitrary entity class targeting in shaders; fixed shader compilation without world0 target; corrected buffer binding for entity pickup effects in MixinEntityPickupFX and related mixins. - @Eclipse-Sol
- Added: entity class targeting in shaders
- Fixed: item ID rendering, worldless shaders, entity pickup buffer binding
- #1307 Corrected ItemMaterialHelper to properly track the rendered item ID for ItemBlocks. - @mitchej123
- Fixed: ItemBlock ID rendering
- #1306 Updated emissive check in AngelicaChunkBuildContext to only include getMixedBrightnessForBlock; removed redundant LightDataCache logic. - @mitchej123
- Removed: redundant light cache logic
- Fixed: lighting on blocks near emissives
- #1304 Corrected buffer management in CeleritasTerrainPipeline, DeferredWorldRenderingPipeline, and ShaderPackScreen. - @mitchej123
- Fixed: buffer handling
- #1303 ShaderPack builds finalEnvironmentDefines with an IRIS_FEATURE_<name> define for each usable FeatureFlags entry before reading shaders.properties. It drops the later step that added defines from the optional feature flags. Also bumps gtnhsettingsconvention to 2.0.18. - @mitchej123
- Added: IRIS_FEATURE defines in shaders.properties preprocessing
- Fixed: feature flag defines missing when shaders.properties is preprocessed
- #1298 Added mixin to MixinRendererLivingEntity to properly handle entity material state in shader pipeline. - @Eclipse-Sol
- Added: entity material handling
- Fixed: entity material handling
- #1296 Corrected quad cull face computation in AngelicaChunkBuildContext to not reuse light face; use FlatLightPipeline for blocks without smooth lighting; cache quad flags in VertexArrayQuadView instead of recomputing on each getFlags() call. - @embeddedt
- Fixed: grass plant shadow rendering, quad lighting for non-axis-aligned blocks
- #1294 Added proper framebuffer cleanup in GlFramebuffer, improved DeferredWorldRenderingPipeline disposal logic, ensured FinalPassRenderer resources are released; fixed method name mapping (func_153184_g -> func_153174_h). - @mitchej123
- Fixed: Shader compilation VRAM leak
- Closes #827
- #1293 BlockRenderLayer gains CUTOUT and CUTOUT_MIPPED, and fromVanillaPass maps pass 0 to CUTOUT_MIPPED. AngelicaRenderPassConfiguration maps each layer to its own material. The meshing task passes a material override and an isShaderPackOverride flag, which skips the transparency-based material selection in AngelicaChunkBuildContext. - @mitchej123
- Fixed: shader pack render layer overrides ignored by the Celeritas chunk builder
- #1286 Added DriverCompatabilityCheck class with NVIDIA-specific workarounds, integrated into GLStateManager initialization. - @mitchej123
- Added: NVIDIA driver workarounds
- Fixed: NVIDIA driver compatibility
- #1278 Updated MixinRenderGlobal to properly allocate display lists during chunk rendering, preventing hand renderer from being clobbered during shader reload. - @mitchej123
- Fixed: Shader reload rendering corruption
- #1275 Added GL_TEXTURE_2D workaround in MixinSkyProviderCelestial_ShaderCompat and created fallback mixin for MixinSkyProviderLaytheSunset to fix shader compatibility regression. - @kotmatross28729
- Added: Shader compatibility for Laythe sunset
- Fixed: NTM:Space sunset rendering with shaders
- #1273 Added synchronization in ClientProxy and CeleritasSetup to ensure proper initialization ordering, updated MixinRenderGlobal to serialize critical operations. - @mitchej123
- Fixed: Race condition in setup
- #1265 Extended GLStateManager to implement glCallLists method stub that was previously missing, preventing NoSuchMethodError. - @mitchej123
- Added: glCallLists GL API support
- Fixed: glCallLists crash
- Closes #1263
- #1264 Updated dependencies in dependencies.gradle to fix macOS F3 key press handling. - @mitchej123
- Fixed: macOS F3 debug menu crash
- Closes #1256
- #1251 Fixed DisplayListManager matrix generation on pop, improved AngelicaChunkBuilderMeshingTask matrix stack handling, and updated gtnhgradle to 2.0.13 for better dependency resolution. - @mitchej123
- Fixed: Invisible block rendering, Dependency resolution
- #1248 Updated dependency versions in dependencies.gradle to fix macOS J8 compatibility. - @mitchej123
- Fixed: macOS startup crash
- Closes #1245
- #1247 Enhanced BatchingFontRenderer glyph replacement logic and FontConfig to correctly identify which glyphs can be substituted, preventing invalid BMP variant fallbacks. - @DeathFuel
- Fixed: Large character text rendering, Glyph replacement bug
- Closes #1239
- #1243 Improved ShaderTransformer to properly handle GLSL 120 in/out/varying declarations, fixing shader compilation for legacy shader syntax. - @mitchej123
- Fixed: GLSL 120 shader rendering, Sildurs/BSL shaderpack compatibility
- Closes #1242
- #1220 GLStateManager now stores a DrawableGL reference, set in MixinInitGLStateManager after initializeTextures and lazily captured in makeCurrent. The SharedDrawable tracking is removed, drawableGLHolder gets a getter, and MixinSplashProgressCaching only marks splash complete on finish(). Unit tests are updated. - @mitchej123
- Added: support for BLS splash
- #1218 Added GraphicsEnvironment.isHeadless() check in FontStrategist and FontProviderCustom; FontConfigScreen now displays warning when no fonts are available. - @DeathFuel
- Added: headless mode font handling, font availability notification
- Fixed: font initialization crash on headless systems
- #1216 Adjusted BatchingFontRenderer to properly handle text bounds when custom fonts are enabled. - @DeathFuel
- Fixed: text cutoff with custom fonts
- Closes #1214
- #1207 RenderSystem.copyTexImage2D, setupProjectionMatrix and restoreProjectionMatrix now call GLStateManager instead of GL11, so the state cache stays in sync. - @mitchej123
- Fixed: GL calls bypassing GLStateManager in RenderSystem
- #1198 Refactored TextureInfoCache state management in GLStateManager, fixed DSA implementations, added extensive server-side state unit tests, and improved uniform handling in CommonUniforms. - @mitchej123
- Added: server-side state unit tests
- Fixed: texture cache synchronization issues
- #1196 Modified BlockEntry parsing to split on comma without requiring preceding space, allowing entries like 'farmland:1, 2, 3, 4, 5, 6' to parse as intended. - @Eclipse-Sol
- Fixed: block metadata parsing with commas
- #1193 Removed isCachingEnabled() check in TextureInfoCache to ensure consistent cache deletion behavior across all threads, matching TextureTracker and PBRTextureManager. - @sisyphussy
- Fixed: white rectangle inventory items on world join
- Closes #538
- #1192 Removed remap=false annotation from MixinGuiIngameForge to allow proper mixin remapping in non-dev environments. - @mist475
- Fixed: mixin debug mode crash
- #1189 Restructured CTMUtils locking strategy to use a single lock for the entire class rather than distributed locks across inner objects; made TileOverrideIterator synchronization private. - @guusw
- Fixed: deadlock in CTM utilities
- #1184 Fixed RenderSystem shader boot sequence and enhanced DSA implementations in DSAARB and related classes; refactored TextureInfo caching logic. - @mitchej123
- Fixed: shader rendering pipeline creation failure
- Closes #1181
- #1178 Fixed improper byte-to-int casts in FontProviderUnicode using AND calculations to match Mojang's MC 1.9 approach. - @Creeper-banner
- Fixed: text rendering after certain characters
- #1174 Replaced the UnsupportedOperationException in GLStateManager.glDrawBuffer/glDrawBuffers with recording. Added DRAW_BUFFER and DRAW_BUFFERS opcodes (up to 8 buffers) to GLCommand, CommandBuffer, CommandRecorder and CommandBufferExecutor, plus a single-int glDrawBuffers overload. - @mitchej123
- Added: glDrawBuffer and glDrawBuffers support in display lists
- Fixed: crash on glDrawBuffer and glDrawBuffers while compiling a display list
- #1161 Updated AngelicaConfig and MixinRenderBlocks_CrackFix to reference both BlockOres and GTBlockOre class names to handle both pre- and post-refactor GT versions. - @kotmatross28729
- Fixed: Z-fighting on GT ores across GT versions
- Closes #1158
- #1159 Corrected AttributeTransformer to properly detect OpenGL compatibility profiles. - @mitchej123
- Fixed: OpenGL profile detection
- #1152 Added glClear(GL_DEPTH_BUFFER_BIT) command recording in DisplayListManager and related rendering classes to properly clear depth during display list execution. - @mitchej123
- Added: Depth clear command support
- Fixed: AE2 Network Visualizer crash
- Closes #1151
- #1148 Modified BatchingFontRenderer and FontProvider classes to handle GT5 custom glyphs through GTNHLib, fixed text scaling issues and added corrective offsets for custom font rendering. - @DeathFuel
- Added: Custom glyph handling configuration
- Removed: FontStrategist class
- Fixed: Custom font text rendering, Subscript character rendering
- Closes #1062
- #1147 Bumps GTNHLib to 0.8.19 in dependencies.gradle and the required-after version in AngelicaMod. Enables the Jabel annotation processor for tests, replaces the custom isIdentity with DisplayListManager.isIdentity via joml properties, and switches CompiledDisplayList command counts to fastutil primitive collections. - @mitchej123
- Fixed: crash with Iris disabled
- #1144 SodiumWorldRenderer.renderTE sets glVertexAttrib defaults using new ProgramCreator attribute location constants (11-14). Deletes the entity_xhfp writers and vertex types, IrisVertexFormats entries, and the VertexFormat buffer state overrides in ClientProxy. - @mitchej123
- Added: default tile entity shader attributes
- Removed: entity_xhfp vertex writers, VertexFormat buffer state overrides for Iris terrain
- Fixed: tile entity shader rendering issues
- #1132 Modified PBRType to properly handle file paths containing colons that are used in texture metadata, fixing path parsing in AtlasPBRLoader. - @qhris
- Fixed: PBR texture loading with metadata
- #1131 Modified MixinRenderBlockFluid to prevent world reference retention in the mixin. - @Alexdoru
- Removed: World reference retention in RenderBlockFluid
- Fixed: Memory leak in fluid rendering
- #1125 Reverted MixinRenderGlobal_ItemRenderDist to restore item rendering behavior for nearby items. - @Alexdoru
- Removed: Item render distance limitation
- Fixed: Item visibility when close to player
- #1119 Added DragonAPI exclusions to NOTFINE_NO_CUSTOM_ITEM_TEXTURES and MCPATCHER_FORGE_CUSTOM_ITEM_TEXTURES mixin lists in TargetedMod configuration. - @MalTeeez
- Added: DragonAPI mixin exclusions
- Fixed: Mixin compatibility with DragonAPI
- #1113 Updated AngelicaConfig to reference GTBlockOre instead of BlockOres and changed config key to blockCrackFixRenderPassWhitelist_ to overwrite existing configs. - @kotmatross28729
- Fixed: GT ore class reference after GT5U refactor
- #1110 Modified GLStateManager to capture texture and color state in display lists, ensuring GL state changes are properly recorded. Added OpenGL debugging tools. - @sisyphussy
- Added: OpenGL debugging utilities
- Fixed: Display list rendering state capture, BuildCraft pipe transparency issue
- Closes #864
- #1109 Modified RenderStars.java to fall back to display lists when VBOs are unavailable, providing an alternative rendering path for incompatible hardware. - @mitchej123
- Fixed: Star rendering on non-VBO systems
- #1105 Sets injectors.maxShiftBy to 2 in mixins.angelica.early.json. - @ALongStringOfNumbers
- Fixed: mixin maxShiftBy log warnings
- #1091 Fixed OpenGL state leakage in BatchingFontRenderer by properly managing texture units, shader programs, and client-side vertex arrays during font rendering. - @klorman
- Fixed: entity/item texture and lighting corruption with shaders and name tags
Performance
- #2206 Adds ProgramBinaryCache, which saves linked programs via glGetProgramBinary and reloads them with glProgramBinary, plus ShaderDiskCache changes, a program binary support check in the render backends, and an IrisConfig option. - @Eclipse-Sol
- Added: on-disk Iris shader program cache
- #2194 Adds ShaderDiskCache and ShaderCacheIO, with disk caching in CompatShaderTransformer, SpirvCompiler, ShaderManager (stage reflection and binding maps via ShaderStageSerializer) and CrossCompileCache. Each SDL shader is parsed once instead of four times, and spirv-cross no longer throws on non-array uniforms. - @mitchej123
- Added: on-disk shader transform cache, on-disk SDL-GPU stage reflection and binding map cache
- Fixed: spirv-cross throwing on non-array uniforms
- #2193 Pools ExtendedBlockStorage clones and chunk render lists (ChunkRenderListReuse, VisibleChunkCollectorPool). Fixes the inverted shift in TessellatorStreamingDrawer's rawBuffer shrink check (<< 3 became >> 3). Replaces fastutil FIFO queues with FenceQueue and skips unused emissive, CTM and brightness lookups. - @mitchej123
- Added: FenceQueue, chunk section and render list pooling
- Fixed: Tessellator raw buffer reallocating on every large draw, cloned sections sharing blocklight with live chunk under ChunkAPI
- #2190 Adds PBRResourceIndex to index PBR textures per resource pack instead of probing each sprite, defers MCPatcher resource handlers until mod loading finishes (TexturePackChangeHandler), warms up shader pack transforms off the main thread, and speeds up reserved-word renaming with lookbehind regexes. Fixes the operator precedence in the MCPATCHER_FORGE_CTM_OR_CC applyIf. - @mitchej123
- Added: PBR resource index, off-thread shader transform warm-up
- Fixed: CTM/custom colors mixin applied with MCPatcher features off
- #2189 CowStateStack.beforeModify only captures state that an active pushState saves (GLContextState.savesState), unchanged setters skip saves, and ctx() fast-paths the main thread. AngelicaConfig.skipEndOfFrameFlush and its Mixins applyIf are removed, so MixinMinecraft_SkipEndFrameFlush always applies. - @mitchej123
- Removed: skipEndOfFrameFlush config option
- #2188 Voxelization now dispatches once per region instead of once per vertex range. Each pass's ranges are uploaded as a VoxelRangeTable that the shader binary-searches, and dispatches over 65535 groups are split. RenderBackend replaces bindVoxelizationRegion/voxelizeRange with voxelizeRegion. - @mitchej123
- Added: VoxelRangeTable
- Removed: per-range voxelization dispatch
- #2182 Adds an experimental-surround module (annotation processor plus runtime) with an allocation-free @Surround injector. It replaces hot @WrapOperation/@WrapMethod and HEAD/RETURN pairs in rendering mixins and restores pushed GL state on exceptions. - @mitchej123
- Added: Surround injector
- Fixed: render state leaking when a wrapped call throws
- #2167 Adds AngelicaWorkers worker pool, a TextureStaging API (beginTextureStaging, commitTextureStaging, abandonTextureStaging, trimTextureStaging) in GLStateManager and RenderBackend, and GLSMConfig.workerThreadCount. Removes ShaderWorkSubmitter. SDLGPURenderBackend, FrameManager and LogicOpEmulator are extended for mip-level targets and blits. Much of the diff is not shown, so details are partial. - @mitchej123
- Added: parallel atlas loading, resource pack trust screen, SDL-GPU mip-level FBO attachments, texture staging API
- Removed: ShaderWorkSubmitter
- #2140 Adds a combined glint fragment shader (CombinedGlint, combined_glint.frag.glsl, FragmentKey bits) that blends both glint layers in one pass. Adds GlintCapture, HeldItemGlint, an armor enchant cache mixin and DroppedItemInstancer changes to batch glint draws. - @Eclipse-Sol
- Added: batched enchant glint rendering
- #2136 Meshing tasks now record DeferredBlock entries and return, and DeferredMeshScheduler finishes them on the main thread against the worker's WorldSlice with pooled buffers (ObjectPool, DeferredSectionMesh). AngelicaBlockSafetyRegistry is keyed by render type in an Int2IntOpenHashMap, and canBlockRenderOffThread no longer takes the checkISBRH and shouldPopulate flags. - @mitchej123
- Added: deferred section mesh scheduler
- Fixed: chunk workers blocking on main thread for deferred ISBRH blocks
- Closes #2082
- #2127 Adds an Instancing.WEATHER mode with a weather instanced vertex shader path, WeatherQuadMesh, WeatherInstancedAttribs and WeatherParams. It also adds three weather uniforms to the FFP uniform block and mixins for the weather renderer. Adds a DragonAPI seasonal snow compat flag and flyby weather properties for benchmarking. - @Eclipse-Sol
- Added: instanced rain and snow rendering, flyby weather benchmark options
- #2124 Adds StateSet, CowStateStack and related classes so push/pop copies state lazily (copy on write). Also adds in-pass clears for SDL-GPU (angelica.sdlgpu.disableInPassClear), ClipPlaneBooleanState, and profiling system properties. Reworks Feature, GLContextState, GLStateManager and the FFP keys and uniforms. - @mitchej123
- Added: lazy copy-on-write attribute stack, system properties for profiling and in-pass clear
- Fixed: Skystone Chest rendering broken when placed down
- Closes #2117
- #2115 Adds SodiumGameOptions.usesTerrainTexelSnap(). The USE_TEXEL_SNAP define is only set when it is true, and bindTerrainSampler returns early otherwise. Adds a TERRAIN_NO_MIPS define when mipmap levels are 0, and OptionImpl now takes a flags supplier. Adds GLErrorReporter. - @Eclipse-Sol
- Fixed: slow terrain rendering with filter None and Nearest sampling on older GPUs
- #2114 Adds CloudFaceMesh, an instanced per-face mesher with new cloud_faces shaders, along with CloudDisc, CloudShape and CloudPlateCover. It also adds CloudVertexMesh, replaces CloudEdges, and moves fog into a shared cloud_fog.glsl include. Trims per-frame CPU work in CloudRenderer and CloudUniforms. - @Eclipse-Sol
- Added: instanced per-face cloud mesher
- Fixed: odd fog on top and bottom cloud plates, cloud Z offset differing from vanilla
- #2104 Added Instancing modes (TEMPLATE, CUBE, PARTICLE) replacing instancedFfpDrawActive, plus CubeInstancedAttribs, CubeParams, ParticleInstancedAttribs, ParticleQuadMesh, UnitCubeMesh and InstancedGlslHelpers. FFP vertex and fragment shader generators gained the new variants, and GLStateManager gained setTextureMatrix. Flyby tooling also changed (angelica.flyby.origin). - @mitchej123
- Added: Instanced particle rendering, Instanced dropped item rendering, Instanced entity cube rendering, Entity shadow batching
- Fixed: Some SDL GPU issues
- #2070 ResourceLocationWithSource and TexturePackAPI.parsePath replace regex and substring work with indexOf and substring calls. lwjgl3 is bumped from a snapshot build to 3.4.2 because the snapshot is no longer on maven. - @danyadev
- #2051 Restructured dynamic lights config GUI by adding dedicated filter and option page classes, simplifying
DynamicLightsOptionPagesand reorganizing entity filter logic. - @mitchej123- Added: DynamicLightsEntityFilter, DynamicLightsEntityScreen, SubScreenOption
- Removed: EntityLightConfigStorage
- #2044 CTMUtils.clearCurrentCompact calls CURRENT_COMPACT.set(null) instead of remove(), so the ThreadLocal entry is reused. - @boubou19
- Fixed: repeated ThreadLocal recreation in CTM
- #2029 In TileLoader.registerIcons, the atlas size is computed once via getTextureSize and passed to registerOneIcon. That method now returns the updated size as a long, with a negative value meaning stop. The total is updated as sprites are added or replaced. - @boubou19
- Fixed: atlas rescan for every CTM tile
- #1988 Wrapped string concatenation in
glCallListdebug output behind a debug flag check inGLStateManagerto avoid allocation overhead when debugging is disabled. - @boubou19- Fixed: Memory allocation overhead from debug strings
- #1971 VAOManager now keeps an eboOwners index (Int2ObjectOpenHashMap with linked VAOData.nextEboOwner) updated on bind and delete. GLStateManager.invalidateDeletedBuffer calls VAOManager.onDeleteBuffer instead of sweeping vaoMap. onDeleteVertexArray also clears current if it was deleted. Adds VAOManagerEboIndexTest. - @mitchej123
- Fixed: O(N^2) sweep of all VAOs on buffer deletion
- #1964 Adds BlockRenderListManager to cache item frame geometry, reducing redundant mesh generation. Implements MixinRenderItemFrame to integrate caching into render pipeline. - @Algent
- Added: item frame geometry caching system
- Fixed: item frame rendering performance
- #1900 CloudRenderer.render now returns early when the Iris pipeline's CloudSetting is OFF. It adds a geomBuilt flag, cleared in invalidateGeometry, which replaces the vao != null check in the anchorInRange test. - @mitchej123
- Fixed: clouds geometry being rebuilt while shader pack has clouds off
- #1811 Dirty tracking moved from global last-uploaded counters to per-program state (Program.UploadState, CompatUniformManager.ProgramUniforms). Added a modelview linear generation counter, redundant useProgram calls are skipped, and light, light model and material state track changes. Added disableColorMaterial and unit tests. Bumped gtnhsettingsconvention to 2.0.25. - @mitchej123
- Added: per-program uniform dirty tracking, GLSM dirty tracking unit tests
- #1805 Changed
EmissiveTextureAutoloader.resourceExiststo checkITexturePackdirectly instead of traversing resource manager internals, with fallback to original implementation for compatibility. - @tiffit- Added: direct ITexturePack resource checking
- Fixed: startup performance for emissive texture loading
- #1795 Removed redundant
registerIconscall inMixinTextureMapMCPF mixin class that was not needed for CTM functionality. - @tiffit- Removed: registerIcons call in MixinTextureMap
- Fixed: startup performance
- #1794 flushDeferredVertexAttribs now takes vertexFlags and skips attributes supplied by the VBO. refreshCompatUniforms returns whether the program needs emulation, and ShaderManager.preDraw returns early for other core shaders. Added CompatShaderTransformer.isCoreShader and removed the eager updateVariant call in activate. - @mitchej123
- #1750 Prebakes transforms in DisplayListManager and CommandRecorder, and removes CommandBufferBuilder, CommandBuffer, CommandBufferProcessor, TransformOptimizer and ITessellatorData. Adapts to the new GlyphReplacements map for FontRenderer, and bumps GTNHLib to 0.10.0 in dependencies.gradle and glsm/gradle.properties. - @sisyphussy
- Removed: ITessellatorData, TransformOptimizer, CommandBuffer
- Fixed: draw merging edge cases, tessellator merging edge cases
- #1730 Created BlockRenderListManager and ItemRenderListManager to cache block item renders in display lists; integrated into MixinItemRenderer and MixinRenderBlocks. - @sisyphussy
- Added: cached block item renderer, BlockRenderListManager, ItemRenderListManager
- #1718 Added disableDSA configuration flag in GLStateManager and RenderSystem; added Intel GPU detection in GLSMInitConfig to automatically disable DSA on Intel hardware. - @sisyphussy
- Added: Intel GPU detection, DSA disable configuration option
- Fixed: Intel GPU performance regression
- #1612 Uniform supplier signatures in the Iris uniform holders (UniformHolder, LocationalUniformHolder, DynamicUniformHolder and related classes) changed from mutable JOML Vector2i/Vector4f/Vector4i to the read-only Vector2ic/Vector4fc/Vector4ic interfaces. Uniform classes and CommonUniforms were adjusted to match. - @mitchej123
- #1515 Added StreamingUploader with selectable UploadStrategy, used by BatchingFontRenderer and the orphan path. OrphanStreamingBuffer was cut down to a simple orphan upload, and TessellatorStreamingDrawer no longer picks a strategy. The useMapBufferRange boolean in SodiumGameOptions became streamingUploadStrategy, and the streaming buffer tests were commented out. - @sisyphussy
- Added: streaming upload strategy option
- Removed: use map buffer range option
- #1476 MixinEntity in dynamiclights now initialises angelica$trackedLitChunkPos and angelica$prevTrackedLitChunkPos to null, creates them on first use in the luminance update, and null-checks in angelica$scheduleTrackedChunksRebuild. - @mitchej123
- #1471 Replaced spin-wait FPS limiter with sleep-based limiter derived from MangoHUD, achieving stable frame pacing on Java 8 and Java 25. Removed the now-unnecessary FPS limiter toggle option and its translations. - @ah-OOG-ah
- Added: sleep-based FPS limiting
- Removed: FPS limiter toggle option, related translations
- Fixed: CPU usage with FPS limiting
- #1447 Refactored BatchingFontRenderer to improve performance, updated shader uniforms in fontFilter.vsh, and added new dependency. - @sisyphussy
- Added: font renderer optimizations
- Fixed: font renderer performance (#1446)
- Closes #1446
- #1438 RenderPassHelper replaces ThreadLocal<Integer> with a ThreadLocal holding a mutable int holder, so get and set no longer allocate or unbox. - @Alexdoru
- #1433 CeleritasBlockTransformer now scans for 6 strings instead of 1881; AngelicaRedirector switched from prefix matching to exact matching, removed expensive
classNode.isOriginal()check, and added missing GL constant entries. Both changes reduce class inspection overhead during bytecode transformation. - @danyadev- Added: shouldTransform optimization, missing GL constant entries
- Removed: expensive classNode.isOriginal() check
- Fixed: startup performance
- #1432 Added MixinFramebuffer to use vertex buffer objects instead of streamed vertices for framebuffer rendering, reducing GPU synchronization stalls. Updated AngelicaConfig and registered new mixin. - @sisyphussy
- Added: VBO-based framebuffer rendering, configuration option
- Fixed: frame rendering stalls
- #1421 Modified RFBAngelicaRedirector, RFBCeleritasBlockTransformer, RFBIsbrhTessellatorAbuseTransformer, and RFBUmbraRedirector to use the updated RFB transform method signature; bumped RetroFuturaBootstrap dependency. - @danyadev
- #1420 Removed ClassConstantPoolParser and shouldTransform from CeleritasBlockTransform and the FML and RFB transformers. RFB shouldTransformClass now returns classNode.isPresent(). AngelicaRedirector initialises its parser in a static block. - @Alexdoru
- Removed: constant pool pre-check in block transformer
- #1416 AngelicaRedirector hoists the OpenGlHelper and UniversalVAO class checks out of the method loop and reorders conditions to test the cheaper ones first. SodiumBlockTransform is made final and builds its block field name lists and redirect map once in the constructor. - @Alexdoru
- #1393 Converted CTMUtils.getBlockIcon dependencies to thread-local storage to eliminate lock contention among worker threads, reducing CPU time by approximately 90%. - @copi143
- Added: thread-local caching in CTMUtils
- #1385 Adds MixinClippingHelper, which overwrites isBoxInFrustum with a JOML FrustumIntersection.testAab, and MixinClippingHelperImpl, which refreshes the intersection after init. MixinFrustrum passes the JOML test to the Celeritas Viewport. A ClippingHelperExt interface is added. - @mitchej123
- Added: JOML frustum intersection test
- #1360 CapturingTessellator is replaced by DirectTessellator, and GL_QUADS are converted to GL_TRIANGLES drawn through an EBO. DisplayListManager and CommandBufferBuilder are rewritten, the Compiled*Buffer, DrawRange and FormatBuffer classes are removed, VBO draw commands are added to display lists, and GTNHLib is bumped to 0.9.9. - @sisyphussy
- Added: VBO draw commands in display lists, automatic GL_QUADS to GL_TRIANGLES conversion in display lists
- Removed: CapturingTessellator usage, FormatBuffer and LineBuffer classes
- Fixed: display list transform issues
- #1321 In CeleritasWorldRenderer.renderTE, the isInfiniteExtentsBox call is replaced by a null check on the cached AABB, since infinite extent is already handled by the outer condition. - @mitchej123
- #1319 Added early exit conditions in DynamicLights to avoid getBlock calls when no dynamic lights exist or light level is 0; optimized mixin call sites. - @mitchej123
- #1314 Modified ClonedChunkSection to eagerly create client tile entities in fillChunk; replaced HashMap with Object2ObjectOpenHashMap; iterate tile entities directly instead of scanning all blocks. - @mitchej123
- Added: eager tile entity creation
- #1309 Added ITileEntityBoundingBoxCache interface and TileEntityRenderBoundsRegistry to cache AABB computations; modified MixinTileEntity to use cached bounds. - @mitchej123
- Added: AABB caching system, TileEntityRenderBoundsRegistry
- #1213 Optimized SodiumWorldRenderer and GbufferPrograms to set defaults once per TE (tile entity) rendering pass instead of once per entity. - @mitchej123
- Fixed: FPS drop with Iris enabled
- Closes #1212
- #1208 Moves the EntityID WrapOperation logic from sodium.MixinRenderGlobal to shaders.MixinRenderGlobal and adds a per-name Object2IntOpenHashMap cache, invalidated when the entity ID map changes, for entity ID lookups. - @mitchej123
- #1191 Parallelized shader loading in Iris pipeline; updated glsl-transformation-lib dependency and refactored shader transformers (AttributeTransformer, CompatibilityTransformer, etc.) to use newer Transformer API. - @mitchej123
- Added: parallel shader transformation
- #1170 Removed glNormal recording from CommandBuffer, CommandRecorder, and DisplayListManager since normals are already baked into VBOs. - @mitchej123
- Removed: Normal vector command recording
- Fixed: FPS performance regression
- Closes #1165
- #1141 Added DisplayListManager with display list compilation, replaced VBO optimizations with display list optimization, optimized GLAllocation with fastutil primitives, fixed DSA usage and mixin conflicts, optimized push/pop attribute state tracking. - @mitchej123
- Added: Display list compilation system, DisplayListManager, CommandBufferBuilder, CompiledFormatBuffer, CompiledLineBuffer, FormatBuffer, GLDebug utilities
- Removed: Previous VBO optimization approach
- Fixed: DSA proxy texture handling, CIT mixin conflict
- #1126 Adds AngelicaConfig.enableVAO, which calls VAOManager.disableVao() in ClientProxy when false. CloudRenderer, HUDCaching, HorizonRenderer and ItemRenderListManager switch to stopCapturingToVAO and VAOManager.createVAO, and existing buffers are passed back in for reuse. Uses GTNHLib's TessellatorManager.startCapturingAndGet. - @sisyphussy
- Added: enableVAO config option
- #1123 Removed redundant display list creation in CloudRenderer and added conditional logic to only update cloud texture when color changes. - @sisyphussy
- Removed: Unnecessary display list creation
- #1103 Fixed framebuffer leak on WorldEvent.Load, replaced glBlitFramebuffer with shared depth attachment, replaced Tessellator with VAO/VBO in HUDCaching.java. Reported ~10% FPS improvement on integrated GPUs. - @sisyphussy
- Fixed: VRAM leak on world load, HUD rendering performance
- #1084 Offloaded chunk rendering jobs requiring main thread blocking into separate worker threads. Increased main thread render task queue limit from 1 to 16. Modified ChunkBuilder and related render task classes. - @Sopel97
- Added: separate worker threads for blocking render tasks
- Fixed: render worker thread blocking on main thread tasks
Removals
- #1388 Removes the NotEnoughIds-Legacy dev dependency, the isOldNEIDLoaded flag in ModStatus and the Hooks branch in ExtendedBlockStorageExt. BetterCrashes is bumped from 1.4.0-GTNH to 1.4.1-GTNH. - @copi143
- Removed: NotEnoughIds-Legacy support
Internal / Refactor
- #1983 Deletes the unreachable @ModifyConstant on getCharWidth in MixinFontRenderer, which was bypassed by the @Inject at HEAD returning getCharWidthFine. Unused imports removed. - @Eldrinn-Elantey
- Removed: dead getCharWidth ModifyConstant
- #1861 CompatUniformManager adds iris_ModelViewMatrixInverse and iris_ProjectionMatrixInverse locations. GLStateManager gains setModelViewMatrix and setProjectionMatrix, LodRendererEvents sets them, and IrisLodRenderProgram and IrisGenericRenderProgram drop their own matrix uniform uploads. - @mitchej123
- #1858 Merged VertexAttribState into VAOManager to centralize VAO management; implemented lazy attribute allocation; consolidated per-VAO state into a single Map; disabled blockCrackFix by default. Improved FFP (fixed-function pipeline) shader management and recording. - @sisyphussy
- Added: unified VAOManager design
- Removed: VertexAttribState (merged into VAOManager), blockCrackFix enabled by default
- Fixed: ArchitectureCraft visual seams
- Closes GTNH#25137
- #1763 Moved IsbrhTessellatorAbuseClassTransformer registration from CompatHandlers to AngelicaLateTweaker. shouldTransform now uses GTNHLib ClassConstantPoolParser, and the RFB wrapper checks ClassHeaderMetadata interface names. - @mitchej123
- #1642 Added an umbra module. Moved TessellatorStreamingDrawer into glsm.streaming behind a new ITessellatorData interface. Added glsm.loading.TransformerNarrower, EcosystemNarrowRules and DependencyVerifier. AngelicaClientTweaker and AngelicaLateTweaker now use the shared narrowing code. - @mitchej123
- Added: Umbra standalone GLSM mod, ITessellatorData, TransformerNarrower, DependencyVerifier
- #1574 Added AngelicaClientTweaker holding the client mixin and transformer setup, reduced AngelicaTweaker to a stub, and removed client-only state from AngelicaMod. Updated ClientProxy, CommonProxy and the transformers and celeritas classes to use AngelicaMod.LOGGER and the new tweaker. - @Alexdoru
- Added: AngelicaClientTweaker
- #1563 AngelicaTweaker.injectData publishes each narrow* toggle to Launch.blackboard under angelica.narrow.<mod>, and AngelicaLateTweaker reads them through narrowEnabled() instead of reading AngelicaConfig directly. - @mitchej123
- #1561 Added GLStateManager.glGenerateMipmap and glBlitFramebuffer delegating to RENDER_BACKEND, and reworded the NoDirectGLCallsTest rule message. - @mitchej123
- Added: glGenerateMipmap and glBlitFramebuffer pass-throughs
- #1560 Added an ArchUnit test, NoDirectGLCallsTest, that fails on direct LWJGL GL calls. Switched AngelicaRenderSystemService, FancyDial, MipmapHelper, GLAPI and ProgramUniforms to GLStateManager, and deleted OpenGLDebugging along with the ClientProxy key binding. - @mitchej123
- Added: architecture test banning direct GL calls
- Removed: Print GLSM Debug keybind, OpenGLDebugging class
- #1527 GLSM extracted into a glsm subproject embedded into the main jar, with Minecraft dependencies removed and Iris/HUDCaching decoupled. EventBus 7.0-beta.15 is added for allocation-free state change events, and the build gets jar-stripping and test classpath changes. - @mitchej123
- Added: glsm subproject, EventBus dependency
- Fixed: some GLSM display list recording bugs
- #1455 CeleritasBlockTransform is restructured with instance fields instead of statics. The FML and RFB transformers call trackBlockSubclasses first, then shouldTransform. This partly reverts the direct-transform approach from #1420. - @danyadev
- #1297 Removes MixinOpenGlHelper. Adds glBindFramebuffer, glDeleteFramebuffers, glGenFramebuffers, glCheckFramebufferStatus, glFramebufferTexture2D, setActiveTexture, setLightmapTextureCoords and isFramebufferEnabled to GLStateManager, with bound framebuffer tracking. AngelicaRedirector redirects the matching OpenGlHelper methods, and callers are updated. - @mitchej123
- Removed: MixinOpenGlHelper
- #1018 Block bounds field removal moves from AngelicaRedirector into a new shared SodiumBlockTransform, with FML (SodiumBlockTransformer) and RFB (RFBSodiumBlockTransformer) wrappers. AngelicaRedirector no longer takes isObf. AngelicaTweaker now adds SodiumLateTweaker only when the RFB plugin is not loaded. - @Alexdoru
- Added: RFBSodiumBlockTransformer, SodiumBlockTransform
- #842 Companion to GTNHLib#100. Bumps GTNHLib to 0.8.0, NEI, Baubles-Expanded, TinkersConstruct, ThaumicHorizons and Hodgepodge. Deletes the compat/nd BufferWriter and quad writers and the ModeledBlock interface. BlockTest now uses the JSON ISBRH model path. - @ah-OOG-ah
- Removed: compat/nd quad writers, ModeledBlock interface
Documentation
- #1937 Changed 'Description or your PR' to 'Description of your PR' in .github/PULL_REQUEST_TEMPLATE.md. - @tiffit
- Fixed: typo in PR template
- #1864 Adds AI_POLICY.md and .github/PULL_REQUEST_TEMPLATE.md. - @MalTeeez
- Added: AI contribution policy, PR template
- #1802 Expanded the Javadoc on GLStateManager.deferDeleteTexture to explain the compat-profile behaviour when a deleted texture is bound. - @mitchej123
- #1786 Added a ClientFixer entry to the incompatible mods list in README.MD. - @DeathFuel
- #1706 Deletes CTM.MD and the img/CTM pattern images. - @VortexSo4
- Removed: CTM guide
- #1667 Adds CTM.MD and img/CTM images, plus a commented-out worldedit-gtnh devOnlyNonPublishable line in dependencies.gradle. - @VortexSo4
- Added: CTM guide
Chores
- #2196 MslCrossCompileTest now types the result of MslCrossCompile.compile as CrossCompileCache.Output. - @mitchej123
- #2100 Added FlybyScene, FlybyCommandSender and FlybyFallGuard, new system properties (angelica.flyby.commands, pacing, angelica.debug.tooling), flyby-bench.sh and flyby-compare.py scripts, and scene files. The run gradle script now forwards angelica.* properties without duplicating them. - @mitchej123
- Added: Flyby scene command files, Flyby pacing option, Flyby bench and compare scripts
- #2087 Bumped Celeritas, Hodgepodge (2.7.187 to 2.7.197) and the DH API, and dropped the celeritas lwjgl2 service embed. Moved the run configuration into a shared gradle script, added an Umbra build workflow, and added FrameHooks, TextureUtilHooks, ClassDump and new debug system properties. - @mitchej123
- Added: Umbra build workflow, FFP trace debug property, flyby time of day property
- Removed: celeritas lwjgl2 service embed
- #2065 Extracted acquireAffinityViolated in FrameManager and intervalElapsed in SplashDispatcher as static helpers, and updated AcquireAffinityTest to the new two-argument signature. The test that used a acquire counter was removed. - @mitchej123
- Fixed: SDL GPU unit tests
- #2061 Adds -Dapple.awt.UIElement=true to test JVM args on macOS and sets SDL_HINT_MAC_BACKGROUND_APP in SdlTestRig.initSdlVideo. Adds the SystemProperties.FLYBY_WAIT_FOR_FOCUS flag (angelica.flyby.waitForFocus) used by FlybyRunner. Adds AcquireAffinityTest and SplashDispatcherTest. - @mitchej123
- Added: angelica.flyby.waitForFocus option
- Fixed: tests stealing focus on macOS, flyby pausing on focus loss
- #2019 Bumps Tracy to 0.14.0 in the version catalog, the native build script and the workflow. Natives now live under a versioned resource path. Adds SectionRegistry and Tracy section categories (World, Shaders, Benchmark, UI), a TracyBackend message severity argument, and Hodgepodge 2.7.187. - @mitchej123
- Added: Tracy section categories for World, Shaders, Benchmark and UI
- #1986 Bumps gtnhsettingsconvention 2.0.26 to 2.0.27, lwjgl3ify compileOnly dep 3.0.15 to 3.0.31 in lwjgl3-backend, and regenerates the toolchain URLs in gradle-daemon-jvm.properties. - @ah-OOG-ah
- Fixed: linter failing in the build
- #1867 Adds announce-release.sh and a notify-discord job in release-tags.yml. The job skips snapshot and pre tags and posts the release body to a webhook. - @mitchej123
- Added: Discord release announcement workflow
- #1865 Bumps org.taumc:glsl-transformation-lib from 0.2.0-32.g7dd88a4-GTNH to 0.2.0-33.g3ec381e and gtnhsettingsconvention from 2.0.25 to 2.0.26. - @mitchej123
- #1791 Set the JVMDG DowngradeJar/DowngradeFiles log level to FATAL. Fixed the downgradeTestClasses outputs, added a verifyTestsRan check, made the glsm tests call GLStateManager, and made SharedDrawableVaoTest destroy only a Display it created. - @mitchej123
- Fixed: broken glsm tests
- #1606 Downgraded compileOnly asm-tree from 9.7 to 5.0.3 in glsm/build.gradle.kts. GLSMRedirector casts cn.methods to List<MethodNode> and uses the 4-argument Handle constructor. - @mitchej123
- #1520 GLStateManager.glBindTexture replaces the per-call LOGGER.info with logUncachedTextureTarget, which tracks logged targets in a bitmask and logs at debug level once per target. - @mitchej123
- Fixed: log spam from glBindTexture on non-2D targets
- #1506 GLStateManager gains glTexImage3D(..., IntBuffer) that passes through to GL12.glTexImage3D and throws UnsupportedOperationException while a display list is recording. - @DarkShadow44
- Added: glTexImage3D overload with IntBuffer
- #1500 Adds GLStateManager.glVertex2i and glVertex3i, which forward to ImmediateModeRecorder.vertex when recording a display list or drawing in immediate mode. - @mitchej123
- Added: glVertex2i and glVertex3i overloads
- #1495 Adds GLStateManager.glVertexAttribPointer(int, int, boolean, int, FloatBuffer), which delegates to the typed overload with GL_FLOAT. - @mitchej123
- Added: glVertexAttribPointer FloatBuffer overload
- #1201 GLSM_PushPop_UnitTest now accepts texture binding 0 (Nvidia) or the deleted texture id (Mesa) after glPopAttrib with a deleted texture. - @mitchej123
- Fixed: Nvidia failure in GLSM_PushPop_UnitTest
- #1194 New GLSM_TextureInfoCache_UnitTest checks that glDeleteTextures removes the TextureInfoCache entry even when GLStateManager caching is disabled. - @mitchej123
- #1186 Changed catch (Throwable) to catch (Exception) across mcpatcher and iris classes; in the Backhand and HoloInventory reflection compat the MethodHandle calls rethrow Error before catching Throwable. Some log messages in those compat classes were copied wrongly and say HoloInventory renderEvent. - @glowredman
- Fixed: Error types caught and hidden by catch-all handlers
- #1169 Added com.gtnewhorizon.gtnhlib.asm. to getTransformerExclusions in AngelicaRedirector and SodiumBlockTransform. - @mitchej123
- #1093 Extends GLSM_VAO_UnitTest to check that the client active texture state and the normal array enable state behave correctly around VAO binds, and loosens the VAO-created assertion to check for a positive id. - @sisyphussy
- Added: VAO unit test cases
Contributors
Everyone who authored, reviewed or co-authored a change on this page, with how many of them:
@mitchej123 (457), @Eclipse-Sol (76), @sisyphussy (40), @Alexdoru (27), @DeathFuel (27), @DarkShadow44 (19), @Caedis (18), @danyadev (14), @kotmatross28729 (14), @MalTeeez (14), @Dream-Master (11), @tiffit (11), @ah-OOG-ah (10), @VortexSo4 (9), @embeddedt (6), @Ranzuu (6), @Cleptomania (5), @KAMKEEL (5), @SpacEagle17 (5), @wlhlm (5), @boubou19 (4), @Kai-Z-JP (4), @koolkrafter5 (4), @kurrycat2004 (4), @Auynonymous (3), @copilot-pull-request-reviewer (3), @Eldrinn-Elantey (3), @jss2a98aj (3), @Kremnari (3), @mist475 (3), @Nana-Sakura (3), @RecursivePineapple (3), @Ruling-0 (3), @UltraProdigy (3), @ABKQPO (2), @Algent (2), @ALongStringOfNumbers (2), @alppp (2), @Apis035 (2), @brandyyn (2), @copi143 (2), @eigenraven (2), @micvog (2), @Midnight145 (2), @NealDeal34 (2), @philipxjm (2), @Wokafishh (2), @Yoshy2002 (2), @zerosignal0101 (2), @12411234 (1), @BallOfEnergy1 (1), @branan (1), @Chitak985 (1), @chrombread (1), @Creeper-banner (1), @CRIMSTAL (1), @czqwq (1), @glowredman (1), @GribanovIvan (1), @guusw (1), @Jakfut (1), @JamesOBrien2 (1), @JohnButlerThird (1), @klorman (1), @Kogepan229 (1), @Kokekabe-Madoha (1), @Kynake (1), @lc-1337 (1), @leagris (1), @Lumarin (1), @MassAnarchyy (1), @MellowArpeggiation (1), @mvanhorn (1), @PLASMAchicken (1), @qhris (1), @RainVaporeon (1), @RedNicStone (1), @Sopel97 (1), @SuperSoupr (1), @Teteros (1), @tuodekun (1), @vermz99 (1), @XLin0mu (1), @YannickMG (1)