HASTE V115 BETA 23 - NETHER PORTAL, "VANILLA+"

- gbuffers_water.fsh: the Nether portal keeps the vanilla pixel look but is upgraded: flowing, curling pixel swirls
  on a world-fixed pixel grid (16 per block by default), cut into 5 flat shades; the vanilla texture's animated grain
  still shows through; two more layers behind slide with the view for depth; single hot pixels flicker in; glowing
  rim; self-lit and feeds bloom.
- Options (Material settings): Nether Portal Style (Vanilla+ / Vanilla), Portal Pixel Size (8/12/16/24), Portal Flow
  Speed, Portal Colour (violet, crimson, azure, emerald; also colours the portal's light with Coloured Lighting),
  Portal Brightness.
- Removed the single-vortex attempt and its portal-measuring image: shadow.vsh, shadow.fsh and shaders.properties
  are back to their beta 19 state (no portalMap). The portal no longer needs to know its own size, so there is no
  per-block duplicated swirl.

Not compiled or tested in-game here.

BETA 24 - VANILLA+ END PORTAL
- New gbuffers_block.vsh/.fsh: Iris draws block entities (and the End portal / End gateway) with gbuffers_block, and
  falls back to gbuffers_terrain when a pack has none. These are exact copies of the terrain programs, so chests,
  signs, beds etc. render exactly as before, plus an End portal branch in the fragment shader.
- End portal / End gateway (block.properties: block.10600, read as blockEntityId): a pixel starfield falling into
  the void: 8 depth layers that slide with the view, slow drift, twinkling single-pixel stars (faded out when smaller
  than a screen pixel so they do not flicker), a 4-step nebula far below, faint rim. Self-lit and feeds bloom.
- Options: End Portal Style (Vanilla+ / Pack default), End Portal Stars. Portal Pixel Size, Flow Speed and Brightness
  now apply to both portals.
- If END_PORTAL_STYLE is 0, or the id is not detected, the portal draws as it did in beta 23.

Not compiled or tested in-game here.

BETA 25 - COMPILE FIX FOR STRICT GLSL COMPILERS (Mesa / Intel / AMD on Linux)
- "illegal use of reserved word `active'" in terrain_translucent: `active` is a reserved word in GLSL. NVIDIA's
  compiler accepts it, Mesa does not. Renamed the variable in lib/water.glsl (rain ripples -> rippleActive) and
  lib/cloud_shadows.glsl (-> cloudActive). Behaviour is unchanged. Scanned every shader for the other reserved
  words (common, input, output, filter, half, fixed, long, short, packed, class, union, ...): none are used as names.
