Skip to content

Angelica 2.x ​

Angelica 2 is what the pack renders through now: a new chunk renderer, rebuilt shader support and new video options.

Angelica 2.0 and the Celeritas renderer ​

The world is now drawn by Celeritas, a newer Sodium port, in place of Angelica 1's Sodium 0.2 port.

read before updating - Angelica #1221. The steps are on the Before you update page.

Shipped in: Angelica #1221, Angelica #1544

Watch on Discord

Connected stained glass ​

Stained glass now connects, as plain glass already did. Connected textures can also change with the neighbouring block.

Connected stained glassConnected stained glassConnected stained glass

Shipped in 19 pull requests

Watch on Discord

Complete Complementary Shaders + Euphoria Patches Support ​

This wonderful shader pack has been fully supported at last. A long way from GregTech: New Horizons version 2.8!

Complete Complementary Shaders + Euphoria Patches SupportComplete Complementary Shaders + Euphoria Patches SupportComplete Complementary Shaders + Euphoria Patches Support

Shipped in 20 pull requests

Watch on Discord

New Features and Options ​

Grass, dirt, sand and other natural blocks get randomly rotated top faces, so flat areas stop looking tiled.

There are some new settings to mess with, such as shader pack settings search, smooth zoom, a font brightness slider, and sharp or blended texture filtering.

With Block Biome Blending on Fancy, grass, leaves and water blend their color across each block face, so biome borders no longer show as steps. This also now blends the sky color so no more weird color snaps.

Texture Filtering can now be RGSS, Anisotropic, or both, with its own Anisotropic Filtering level.

We've also introduced Texel Blending where you can switch the blending of edges between texels from sharp (Nearest) or smooth (Linear)!

VSync now has a Mailbox mode, which gets rid of tearing without the extra latency of regular VSync.

The camera has a few new options! Smooth Zoom has a speed slider, and Cinematic Camera Zoom is available. Dynamic FOV can be set to Enabled, Mods Only or Disabled. View Bobbing can bob only the hand or only the camera, and Hurt Screen Shake sets how hard the camera tilts when you take damage. Horizon and Terrain Fog now have their own toggles, and the menu background can be set to Random.

Text Effects gets its own page. You can toggle RGB colors, gradients, rainbow text, wave text (with an amplitude slider), upside-down Dinnerbone text, per-segment drop shadows and & color code conversion. Font Brightness and a Unicode Shadow Offset are also in the font settings.

Shader packs get a "Save Compiled Shaders" option that keeps compiled programs on disk, so restarts and new dimensions load much faster. You can also and open the pack selection screen with new keybinds.

With those keybinds...here's what we have

  • Ctrl+F: opens search on the shader settings page. Pressing it again closes search.
  • Tab: switches between the Shader Pack List and Shader Pack Settings menu.
  • F1: hides the GUI so you can see the world behind it, so you can preview setting changes live. Press F1 again, or Esc, to bring it back.
  • Ctrl+D: asks whether to enable shader debug mode, which shows shader errors.
  • Ctrl+G: asks whether to allow unknown shaders to load.

read before updating - Angelica #1221

Shipped in 99 pull requests

Rendering and Shader Changes ​

Along with full support for Complementary + Euphoria Patches means we now have the ability to give block, items, and entities their own IDs that shader packs can use to apply materials to. Before 2.x, we couldn't even distinguish between sand and red sand! Now we have a full pipeline for assigning materials to all sorts of things. For example:

EntryMeaning
stoneVanilla block
stone:0Vanilla block with meta
minecraft:stoneBlock with namespaced ID specified
minecraft:stone:0Single meta
minecraft:stone:0,1,2Multiple metas
minecraft:furnace:lit=trueBlockstate property
minecraft:oak_log:axis=y,x:variant=oakMultiple blockstate properties
flower_pot:1[Item=minecraft:red_flower,Data=0]Used together with NBT brackets

Wait blockstates? How does that work? We also included a giant modern IDs to legacy IDs map to correctly pull and assign the legacy blocks to the shader pack's assigned material IDs!

read before updating - Angelica #1221

Shipped in 60 pull requests

Performance Improvements ​

We have done a lot, here's a good list of it all:

Startup and loading

  • Boot work deferred until mod loading finishes; first shader pack prepared on a background thread while at the main menu.
  • Parallel atlas decode, mipmap generation, and batched atlas upload.
  • Faster resource lookups: PBR pack index, direct pack queries for emissive textures, regex-free path handling, incremental CTM atlas sizing.
  • Faster class transformers (cheaper pre-filtering, map-based lookups).
  • Concurrent CTM lookups.

Shaders

  • Parallel shader transformation and pack preprocessing.
  • Disk caches for transformed source, compiled SPIR-V, cross-compiled MSL/DXBC, preprocessor output, and linked program binaries.
  • Linked programs reused in memory when toggling shaders, reloading a pack, or changing dimen
  • Cheaper pack parsing and reserved-word renaming; lazy options menu.
  • SDL GPU: async stage compiles, cached vertex variants, cheaper buffer and 3D texture clears

Allocations

  • Zero-allocation @Surround injector that replaces @WrapOperation/@WrapMethod on about 40 render-path mixins.
  • Pooled chunk sections, render lists, and world slice contexts; reused uniform and font buff
  • Primitive or identity keys in place of boxed or record keys; fewer suppliers, comparators, and strings per frame.

GL state manager

  • Copy-on-write attribute push/pop with precomputed masks.
  • Cached main-thread context; per-program uniform upload tracking.
  • More glGet queries answered from cache; cheaper buffer deletion; redundant calls removed.
  • VAO attribute caching.
  • SDL GPU: in-pass depth/stencil clears, cached vertex-input hashes, array-based uniform look

Display lists

  • Compiled to VBOs with format batching, merged draws, and collapsed transforms.
  • Item frames and block items cached as display lists.

Instancing and batching

  • Instanced rain/snow, particles, dropped items, and model cubes.
  • Batched entity model parts, items, and shadows.
  • Cheaper enchant glint (combined held-item layers, cached armor enchant state, reused instance data).
  • Batched mesh cache for chests, signs, skulls, beacon beams, jars, and provider-API renderer
  • Interleaved font vertex buffer; cheaper HUD caching; cached entity id lookups.

Culling

  • Cached tile entity bounds, tight sign bounds, and class-transform-time tile entity marking.
  • JOML frustum tests; shadow-pass tile entity culling; correct camera for cloud culling.

Terrain meshing

  • Main-thread-bound chunk tasks moved to separate workers.
  • Cached ISBRH thread-safety checks.
  • Lighting recalculated only for vanilla-AO quads; fewer material checks.
  • Tile entity copy iterates the chunk's tile entity map instead of every block.
  • SDL GPU: region-at-a-time shadow voxelization.

Clouds

  • VBO cloud renderer with distance-based detail, instanced walls, and worker-thread meshing.
  • Skipped while disabled by the shader pack.
Shipped in 53 pull requests

Fixes ​

Many....many fixes for mods that draw through Angelica.

Shipped in 244 pull requests

Dark mode text from resource packs ​

Resource packs can now recolour GUI text for a dark theme from pack.mcmeta instead of every language file. It reaches text that mods draw themselves too.

Shipped in: Angelica #2118, Angelica #2178, Angelica #2184, Angelica #2205

Contributors ​

Everyone who authored, reviewed or co-authored a change on this page, with how many of them:

@mitchej123 (417), @Eclipse-Sol (75), @sisyphussy (34), @DeathFuel (23), @DarkShadow44 (19), @Caedis (17), @Alexdoru (16), @kotmatross28729 (14), @MalTeeez (12), @danyadev (11), @tiffit (10), @Dream-Master (8), @ah-OOG-ah (6), @VortexSo4 (6), @Cleptomania (5), @embeddedt (5), @Ranzuu (5), @SpacEagle17 (5), @boubou19 (4), @Kai-Z-JP (4), @KAMKEEL (4), @koolkrafter5 (4), @kurrycat2004 (4), @wlhlm (4), @Auynonymous (3), @copilot-pull-request-reviewer (3), @jss2a98aj (3), @Kremnari (3), @mist475 (3), @Nana-Sakura (3), @Ruling-0 (3), @ABKQPO (2), @Algent (2), @ALongStringOfNumbers (2), @Apis035 (2), @brandyyn (2), @eigenraven (2), @Eldrinn-Elantey (2), @micvog (2), @Midnight145 (2), @NealDeal34 (2), @philipxjm (2), @RecursivePineapple (2), @UltraProdigy (2), @Wokafishh (2), @Yoshy2002 (2), @zerosignal0101 (2), @12411234 (1), @BallOfEnergy1 (1), @branan (1), @Chitak985 (1), @chrombread (1), @copi143 (1), @Creeper-banner (1), @CRIMSTAL (1), @czqwq (1), @GribanovIvan (1), @guusw (1), @HalfCooler (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), @Nikolay-Sitnikov (1), @PLASMAchicken (1), @qhris (1), @RainVaporeon (1), @RedNicStone (1), @Sopel97 (1), @SuperSoupr (1), @Teteros (1), @tuodekun (1), @vermz99 (1), @XLin0mu (1)