### Modern UI 3.12.0.4 (3.12.0.3, 3.12.0.2, 3.12.0.1)
Changes from
* 3.11.1.11 → 3.12.0.4 for Minecraft 1.21.6-1.21.8
* 3.11.1.11 → 3.12.0.3 for Minecraft 1.21.4
* 3.11.1.9 → 3.12.0.2 for Minecraft 1.21-1.21.1
* 3.11.1.6 → 3.12.0.1 for Minecraft 1.20-1.20.1
#### NeoForge Extension 1.21.8 (1.21.4, 1.21.1)
* (1.21.8 only) Fully port to 1.21.8 and adapt to the technical changes in vanilla
* (1.21.8, NeoForge only) On Windows/Linux, you have to manually set `config/fml.toml > earlyWindowControl` to false;
otherwise, your game will crash on the first launch — though you can simply restart it to resolve the issue;
this will finally be resolved in MC 1.21.9+
* (1.21.8 only) Enable blur effect by default even when OptiFine is installed
* (1.21.8 only) Delay applying the configuration until just before the game finishes loading
* (1.21.8 only) Deprecate method for drawing rounded rectangles in `ExtendedGuiGraphics`, replaced by gradient rectangles
* (1.21.8 only) `MinecraftSurfaceView.Renderer` no longer clips to the bounds of draw by default
* (1.21.8 only) Modern rounded tooltip is applied at most once per frame; subsequent tooltips in the same frame are non-rounded
* (1.21.1 only) Disable blur effect by default when OptiFine is installed
* (1.21.1 only) Fix coordinates in layer blitting
* Add complete version of Still Alive, the Portal ending song
* Add bootstrap option `modernui_mc_skipGLPromotion` to skip GL promotion
* Always skip GL promotion on macOS
* Add modified version of Inter font "Inter Frozen Medium" and its native italic font as default
* Add in-game changelogs to Home UI
* Add bootstrap options:
- `arc3d_context_useStagingBuffers` to enable staging buffers in OpenGL, default is false, previously true
- `arc3d_context_allowGLSPIRV` to use SPIR-V in OpenGL, compiled by Arc3D shader compiler, default is false
* (Forge/NeoForge only) Initialize UI manager and UI thread earlier
* Add a separate option "Additional Blur Effect" to blur vanilla screens, default is false
* Fix threading issue in layer blitting, which may cause crash when resizing window
* (1.21.1+, NeoForge only) Always do GL promotion if EARLY_WINDOW_CONTROL is disabled
* Use private logger instead of framework logger
* Add configs to custom "ding" sound and volume
* Update localization to match vanilla language data
* Add "Reset to Default" to context menu in Preferences UI, to reset a config entry to its default value
* Add back view configs and add some new view configs
* The entire Center UI is reworked, a great number of UI/UX improvements and bug fixes
* Provide an abstraction of config system
#### Forge Extension 1.21.8 (1.21.4, 1.21.1, 1.20.1)
* (1.21.8 only) Migrate to new EventBus
* Equivalent to NeoForge version, except where noted
#### Fabric Extension 1.21.8 (1.21.4, 1.21.1, 1.20.1)
* Functionally equivalent to NeoForge version, except where noted
#### Modern Text Engine 1.21.8 (1.21.4, 1.21.1, 1.20.1)
* (1.21.8 only) Port to 1.21.8
* (1.21.8 only) Ensure that the shadow layer and non-shadow layer of obfuscated text in GUI use the same glyphs.
* (1.21.8 only) Separate and simplify text rendering logic for world and GUI: in world, always use SDF rendering;
in the GUI, determine density and font size from CTM while ensuring pixel-aligned rendering.
* (1.21.8 only) Delay font atlas resizing to the end of the frame
* (1.21.8 only) `GlyphManager` is no longer initialized when Modern Text Engine is disabled
* Add config for bitmap horizontal offset
* (1.21.4+ only) Add support for no shadow text (i.e. shadow_color=0)
* Emit no lines for empty strings when computing line breaks to match vanilla behavior
* Make StandardGlyphInfo return exact advance instead of ceiling, matching vanilla TrueTypeProvider behavior.
This might improve the rendering of the AE2 guidebook
* For line wrapping of formatted text, allow emitting no lines to match vanilla behavior,
fixing the issue where an empty tooltip is sometimes visible.
* Fix crash with obfuscated style on large bitmap fonts
#### Core Framework 3.12.0
* Fix disappearing transitions caused by removing views in batches cannot be seen
* Tweak edge absorption in NestedScrollView
* Delay TextBlob initialization of ShapedText until draw time
* Add paint parameter for leading/trailing margins
* Merge TrailingMarginSpan with LeadingMarginSpan, also fix a text layout bug
* Optimize many text processing methods
* Fix StyleSpan is not cumulative
* Move LogWriter to internal
* Migrate to SLF4J, remove Log4j dependency
* Add filled text field style
* Add measure cache
* Add convenient methods for specifying styles
* Add thread-safe methods to change themes in context
* Change AdapterView.OnItemSelectedListener to functional interface
* Fully configurable view configuration
* Update scroller to calculate physical coefficients using ppi
* Make CharacterStyle cloneable, also fix TextPaint.density
* More methods in Color, and allow creating instances
* Update default fragment SFX transitions
* Allow shallow copy of Bitmap and Image as shared owners
* Add TabLayout and styles
* Improve widget scrolling mechanism
* Add tag system to View
* Add MotionEasingUtils for common bezier interpolators
* Add RTL support and fix bugs for ViewPager
* Improvements and fixes for ViewPager
* Fix hotspot point not dispatched to children
* Fix LinearLayout divider layout bug in RTL direction
* Add option to enable SPIR-V in OpenGL backend, but disable by default
- NVIDIA driver will compile SPIR-V back to into GLSL in OpenGL, and
the disassembler takes up at least 40MB of additional RAM usage
* Use rounding for font metrics
- Rounding seems to produce a more accurate layout, so the ceiling
is no longer used unless there are internal changes in the JDK
* Fix view pager touch slop
* Update color mappings for all buttons
* Not showing long click tooltip when there's hover tooltip
* Add icon button styles
* Fix two bugs in font register
- Should lookup in FontManager to use native bold/italic fonts
- To ensure thread-safety, lock the whole register method (actually a JDK bug)
* Improve tooltip show/hide logic when tooltip text is changed
* Add shadow alpha configuration to ViewGroup
* Add ComposeShader to composite two layers
* Add copyWithLocalMatrix for gradient shaders
* Use an accurate method to detect whether Bidi is needed
- Matching ShapedText and MeasuredText behavior.
This is 20% slower than the previous one, but is fast enough.
* Optimize image shader constructor, add copyWithLocalMatrix
* Add new slider styles and animation control
* Expose clearFocusInternal method to internal code
* Expose setOptionalIconsVisible method
* Remove unnecessary ThreadLocal usage
* Add View lighting and shadow casting system
* Optimize line breaking performance
* Add Drawable dirty bounds
* Update dropdown style
* Add menu item icon style and update menu item layout
* Add new checkbox style
* Add new text field and spinner styles
* Add the drawable tint methods to TextView
* Move TextStyle from Paint to TextPaint subclass
* Add builtin icons and replace legacy code
* Add new draw methods to Canvas API
* Renew RippleDrawable with masks and animations
* Add Outline class and compute Drawable outline
* Disable edge AA for ImageDrawable by default
* Change font_size_granularity to 0.25
* Enable subpixel positioning for text rendering
* Sync with latest Arc3D
* Add indeterminate state to checkbox, a tri-state checkbox
* Update subset logic for (Rounded)ImageDrawable and move subset to constant state
* Change default reference density DPI to 96
* Add on/off tooltip text for CheckableImageButton, and optimize
* Add ArrayAdapter.getContext()
* Allow nested radio groups to work, deprecate RelativeRadioGroup
* Add on/off text to switch, and optimize
* Add toggle button
* Enhance RadioGroup, so that it can work on all checkable views
* Add Checkable2 interface for checkable views with a callback
* Make CompoundButton always have checkable state to sync with CheckableImageButton
* Add checkable image button
* Add elevated button style
* Adjust default button size
* Move modulateColor to ColorStateList as a public method
* Adjust tooltip padding
* Add InsetDrawable
* Allow ShapeDrawable to draw rounded rectangles with per-corner radius
* Add methods to draw rounded rectangles with different corner radii to Canvas
* Temporarily disable popup anchor aligning to work around a bug
* Add ClipDrawable
* Add AnimationDrawable for frame-by-frame animations
* Add themed resource cache
* Add theme styles
* Add dropdown styles
* Add styles for popup menus
* Add seek bar styles and other improvements
* Add progress bar styles (determinate and indeterminate)
* Full functionality and fixes for ProgressBar
* Update text appearance of menu item
* Add radio button and switch styles
* Make EdgeEffect accept Context to retrieve theme color
* Add TextAppearance class and methods to apply typography
* Add many buttons styles
* Add many system theme values, based on M3 Expressive
* Add attributes/styleables for most UI components
* Rework the TypedValue class
* Add methods to retrieve attributes and styles in batch
* Add base methods for retrieving attributes
* Add ResourceId, StringView, ThemeKey
* Introduce a new Resources and Theme system
* Merge with ICU Bidi for MeasuredText
* Add fast path for BoringLayout.drawText() for all alignments
* Add toString() for animator classes
* Remove assertions for kotlin compile tasks
* Add RoundedImageDrawable (always keeping aspect ratio)
* Remove Paint.getShader() and simplify ImageDrawable
* Update scrollbar colors
* Update toast and tooltip styles
* Update popup menu styles
* Add new slider style
* No longer use pointing hand cursor for buttons (only for hyperlinks now)
* Update SeekBar to respect thumbOffset and support split track
* Add new drop-down style
* Update drop-down transition animation
* Change default layout for ArrayAdapter
* Change default selector for ListView
* Disable default transition for windows (rework needed)
* Add text padding for Switch
* Add custom clip bounds for View
* Add new switch thumb drawable
* Add Switch, deprecate SwitchButton
* Add two cubic Bezier interpolator
* Add button tint blend mode
* Make ShapeDrawable always skip stroking when the color is transparent
* Add new radio button drawable
* Add SystemTheme
* Make ValueAnimator work without values
* Support line spacing addition/multiplier for text Layout
* No longer using Caffeine for text layout caching, remove Caffeine dependency
* Fix AnimationMatrix clear
* Make View.getMatrix() return non-null
* Add partial view invalidation, dirty region accumulation
* Delete obsolete GLSL shaders
* Add RippleDrawable (allowing analytic mask)
* Add Bezier time interpolator
* Add experimental support for Windows native window border (no title bar)
#### Markflow Extension
The old **Markdown** extension is completely deprecated and replaced by the new **Markflow**
* Renew markdown theme & styling
* Fix heading break style when wrapping
* Update API notice for Markflow
* Markflow initial version
#### Arc3D Graphics Engine
* Update benchmark, shader source, and dependency version
* ContextOptions logger defaults to null
* Remove instance usage of Color
* Disable runtime constant BIG_ENDIAN since LWJGL does not support big endian machines
* Rename Pixels to PixelRef
* Rename Path.recycle() to Path.release()
* Remove the old usage of UniqueID
* Rework some classes
* Optimize TaskList and more
* Fully decouple core and sketch package
* TextureQueryLod support should default to false
* Remove helper methods for drawing round rects
* Rework PathIterable and PathIterator, add Shape interface
* Rename SharedResourceCache to GlobalResourceCache
* Move 2D rendering API to sketch package
* Optimize and fix text metrics computation
* No longer make Blender and ColorFilter ref-counted
* Many improvements on high-quality text rendering
* Add Rect2f.makeInfiniteInverted() for branchless bounds union
* Update load factor for multimap
* Delete a lot of old code
* Add drawEllipse to Canvas
* Add AnalyticComplexBox geometry step, for complex AA rounded rectangles
* Trying to use Contract on read-only parameters
* Fix constant value retrieval for vector splats
* Add isOpaque for more shaders
* Merge Color4fShader with ColorShader
* Allow creating GL programs without fragment shaders (for depth-only pass)
* Add cover bounds step to handle non-AA fill and scissor fill
* Simplify LinkedListMultimap and make it small-footprint
* Add experimental drawEdgeAAQuad and drawBlurredRRect to Canvas
* ResourceCache: move budgeted and shareable to resource creation
* Strengthen FragmentStage initialization
* Add analytic blurred box geometry step
* Add modes for makeWithLocalMatrix, allow pre-concat, post-concat, replacement
* Optimize Vertices color array memcopy, move the swizzling to GPU
* Add RRectShader and implementation
* More methods to the RRect class
* Leak ref count of some wrapper-like effect objects to the underlying objects
* Allow some Shader objects to be trivially ref-counted
* Add option to enable SPIR-V in OpenGL backend
* Enable SPIR-V in OpenGL backend
* Fix vertex array setup prior to OpenGL 4.3
* Add per-edge AA quad geometry step
* Add option to use staging buffers in OpenGL, and default to false (previously is true)
* Rewrite shaders from GLSL to AkSL (Arc3D shading language)
* Fix sizeof(IndexType) calculation
* Fix blend shaders bugs
* Make StrikeDesc immutable by default
* Full support for subpixel positioning fonts
* Add methods to pack subpixel info into glyph ID
* Migrate to jspecify
#### Arc3D Shader Compiler
* Rename some classes in compiler package
* No longer use 'packed' as a variable name
- Prior to GLSL ES 3.00, 'packed' is a reserved keyword.
However, even if we use versions 3.00 and above, some drivers still consider it a keyword.
* Add some intrinsics to SPIR-V codegen
* Add TreeWriter to visit and modify the AST
* Rework TreeVisitor and AST node accept
* Use Context object everywhere instead of ShaderCompiler object
* Now accept only String input, due to immutability and compressed strings
* Remove short/half types in favor of min16int/min16float types
* Full support for GLSL codegen in OpenGL/ES backend
### Modern UI 3.12.0.4 (3.12.0.3, 3.12.0.2, 3.12.0.1)
Changes from
* 3.11.1.11 → 3.12.0.4 for Minecraft 1.21.6-1.21.8
* 3.11.1.11 → 3.12.0.3 for Minecraft 1.21.4
* 3.11.1.9 → 3.12.0.2 for Minecraft 1.21-1.21.1
* 3.11.1.6 → 3.12.0.1 for Minecraft 1.20-1.20.1
#### NeoForge Extension 1.21.8 (1.21.4, 1.21.1)
* (1.21.8 only) Fully port to 1.21.8 and adapt to the technical changes in vanilla
* (1.21.8, NeoForge only) On Windows/Linux, you have to manually set `config/fml.toml > earlyWindowControl` to false;
otherwise, your game will crash on the first launch — though you can simply restart it to resolve the issue;
this will finally be resolved in MC 1.21.9+
* (1.21.8 only) Enable blur effect by default even when OptiFine is installed
* (1.21.8 only) Delay applying the configuration until just before the game finishes loading
* (1.21.8 only) Deprecate method for drawing rounded rectangles in `ExtendedGuiGraphics`, replaced by gradient rectangles
* (1.21.8 only) `MinecraftSurfaceView.Renderer` no longer clips to the bounds of draw by default
* (1.21.8 only) Modern rounded tooltip is applied at most once per frame; subsequent tooltips in the same frame are non-rounded
* (1.21.1 only) Disable blur effect by default when OptiFine is installed
* (1.21.1 only) Fix coordinates in layer blitting
* Add complete version of Still Alive, the Portal ending song
* Add bootstrap option `modernui_mc_skipGLPromotion` to skip GL promotion
* Always skip GL promotion on macOS
* Add modified version of Inter font "Inter Frozen Medium" and its native italic font as default
* Add in-game changelogs to Home UI
* Add bootstrap options:
- `arc3d_context_useStagingBuffers` to enable staging buffers in OpenGL, default is false, previously true
- `arc3d_context_allowGLSPIRV` to use SPIR-V in OpenGL, compiled by Arc3D shader compiler, default is false
* (Forge/NeoForge only) Initialize UI manager and UI thread earlier
* Add a separate option "Additional Blur Effect" to blur vanilla screens, default is false
* Fix threading issue in layer blitting, which may cause crash when resizing window
* (1.21.1+, NeoForge only) Always do GL promotion if EARLY_WINDOW_CONTROL is disabled
* Use private logger instead of framework logger
* Add configs to custom "ding" sound and volume
* Update localization to match vanilla language data
* Add "Reset to Default" to context menu in Preferences UI, to reset a config entry to its default value
* Add back view configs and add some new view configs
* The entire Center UI is reworked, a great number of UI/UX improvements and bug fixes
* Provide an abstraction of config system
#### Forge Extension 1.21.8 (1.21.4, 1.21.1, 1.20.1)
* (1.21.8 only) Migrate to new EventBus
* Equivalent to NeoForge version, except where noted
#### Fabric Extension 1.21.8 (1.21.4, 1.21.1, 1.20.1)
* Functionally equivalent to NeoForge version, except where noted
#### Modern Text Engine 1.21.8 (1.21.4, 1.21.1, 1.20.1)
* (1.21.8 only) Port to 1.21.8
* (1.21.8 only) Ensure that the shadow layer and non-shadow layer of obfuscated text in GUI use the same glyphs.
* (1.21.8 only) Separate and simplify text rendering logic for world and GUI: in world, always use SDF rendering;
in the GUI, determine density and font size from CTM while ensuring pixel-aligned rendering.
* (1.21.8 only) Delay font atlas resizing to the end of the frame
* (1.21.8 only) `GlyphManager` is no longer initialized when Modern Text Engine is disabled
* Add config for bitmap horizontal offset
* (1.21.4+ only) Add support for no shadow text (i.e. shadow_color=0)
* Emit no lines for empty strings when computing line breaks to match vanilla behavior
* Make StandardGlyphInfo return exact advance instead of ceiling, matching vanilla TrueTypeProvider behavior.
This might improve the rendering of the AE2 guidebook
* For line wrapping of formatted text, allow emitting no lines to match vanilla behavior,
fixing the issue where an empty tooltip is sometimes visible.
* Fix crash with obfuscated style on large bitmap fonts
#### Core Framework 3.12.0
* Fix disappearing transitions caused by removing views in batches cannot be seen
* Tweak edge absorption in NestedScrollView
* Delay TextBlob initialization of ShapedText until draw time
* Add paint parameter for leading/trailing margins
* Merge TrailingMarginSpan with LeadingMarginSpan, also fix a text layout bug
* Optimize many text processing methods
* Fix StyleSpan is not cumulative
* Move LogWriter to internal
* Migrate to SLF4J, remove Log4j dependency
* Add filled text field style
* Add measure cache
* Add convenient methods for specifying styles
* Add thread-safe methods to change themes in context
* Change AdapterView.OnItemSelectedListener to functional interface
* Fully configurable view configuration
* Update scroller to calculate physical coefficients using ppi
* Make CharacterStyle cloneable, also fix TextPaint.density
* More methods in Color, and allow creating instances
* Update default fragment SFX transitions
* Allow shallow copy of Bitmap and Image as shared owners
* Add TabLayout and styles
* Improve widget scrolling mechanism
* Add tag system to View
* Add MotionEasingUtils for common bezier interpolators
* Add RTL support and fix bugs for ViewPager
* Improvements and fixes for ViewPager
* Fix hotspot point not dispatched to children
* Fix LinearLayout divider layout bug in RTL direction
* Add option to enable SPIR-V in OpenGL backend, but disable by default
- NVIDIA driver will compile SPIR-V back to into GLSL in OpenGL, and
the disassembler takes up at least 40MB of additional RAM usage
* Use rounding for font metrics
- Rounding seems to produce a more accurate layout, so the ceiling
is no longer used unless there are internal changes in the JDK
* Fix view pager touch slop
* Update color mappings for all buttons
* Not showing long click tooltip when there's hover tooltip
* Add icon button styles
* Fix two bugs in font register
- Should lookup in FontManager to use native bold/italic fonts
- To ensure thread-safety, lock the whole register method (actually a JDK bug)
* Improve tooltip show/hide logic when tooltip text is changed
* Add shadow alpha configuration to ViewGroup
* Add ComposeShader to composite two layers
* Add copyWithLocalMatrix for gradient shaders
* Use an accurate method to detect whether Bidi is needed
- Matching ShapedText and MeasuredText behavior.
This is 20% slower than the previous one, but is fast enough.
* Optimize image shader constructor, add copyWithLocalMatrix
* Add new slider styles and animation control
* Expose clearFocusInternal method to internal code
* Expose setOptionalIconsVisible method
* Remove unnecessary ThreadLocal usage
* Add View lighting and shadow casting system
* Optimize line breaking performance
* Add Drawable dirty bounds
* Update dropdown style
* Add menu item icon style and update menu item layout
* Add new checkbox style
* Add new text field and spinner styles
* Add the drawable tint methods to TextView
* Move TextStyle from Paint to TextPaint subclass
* Add builtin icons and replace legacy code
* Add new draw methods to Canvas API
* Renew RippleDrawable with masks and animations
* Add Outline class and compute Drawable outline
* Disable edge AA for ImageDrawable by default
* Change font_size_granularity to 0.25
* Enable subpixel positioning for text rendering
* Sync with latest Arc3D
* Add indeterminate state to checkbox, a tri-state checkbox
* Update subset logic for (Rounded)ImageDrawable and move subset to constant state
* Change default reference density DPI to 96
* Add on/off tooltip text for CheckableImageButton, and optimize
* Add ArrayAdapter.getContext()
* Allow nested radio groups to work, deprecate RelativeRadioGroup
* Add on/off text to switch, and optimize
* Add toggle button
* Enhance RadioGroup, so that it can work on all checkable views
* Add Checkable2 interface for checkable views with a callback
* Make CompoundButton always have checkable state to sync with CheckableImageButton
* Add checkable image button
* Add elevated button style
* Adjust default button size
* Move modulateColor to ColorStateList as a public method
* Adjust tooltip padding
* Add InsetDrawable
* Allow ShapeDrawable to draw rounded rectangles with per-corner radius
* Add methods to draw rounded rectangles with different corner radii to Canvas
* Temporarily disable popup anchor aligning to work around a bug
* Add ClipDrawable
* Add AnimationDrawable for frame-by-frame animations
* Add themed resource cache
* Add theme styles
* Add dropdown styles
* Add styles for popup menus
* Add seek bar styles and other improvements
* Add progress bar styles (determinate and indeterminate)
* Full functionality and fixes for ProgressBar
* Update text appearance of menu item
* Add radio button and switch styles
* Make EdgeEffect accept Context to retrieve theme color
* Add TextAppearance class and methods to apply typography
* Add many buttons styles
* Add many system theme values, based on M3 Expressive
* Add attributes/styleables for most UI components
* Rework the TypedValue class
* Add methods to retrieve attributes and styles in batch
* Add base methods for retrieving attributes
* Add ResourceId, StringView, ThemeKey
* Introduce a new Resources and Theme system
* Merge with ICU Bidi for MeasuredText
* Add fast path for BoringLayout.drawText() for all alignments
* Add toString() for animator classes
* Remove assertions for kotlin compile tasks
* Add RoundedImageDrawable (always keeping aspect ratio)
* Remove Paint.getShader() and simplify ImageDrawable
* Update scrollbar colors
* Update toast and tooltip styles
* Update popup menu styles
* Add new slider style
* No longer use pointing hand cursor for buttons (only for hyperlinks now)
* Update SeekBar to respect thumbOffset and support split track
* Add new drop-down style
* Update drop-down transition animation
* Change default layout for ArrayAdapter
* Change default selector for ListView
* Disable default transition for windows (rework needed)
* Add text padding for Switch
* Add custom clip bounds for View
* Add new switch thumb drawable
* Add Switch, deprecate SwitchButton
* Add two cubic Bezier interpolator
* Add button tint blend mode
* Make ShapeDrawable always skip stroking when the color is transparent
* Add new radio button drawable
* Add SystemTheme
* Make ValueAnimator work without values
* Support line spacing addition/multiplier for text Layout
* No longer using Caffeine for text layout caching, remove Caffeine dependency
* Fix AnimationMatrix clear
* Make View.getMatrix() return non-null
* Add partial view invalidation, dirty region accumulation
* Delete obsolete GLSL shaders
* Add RippleDrawable (allowing analytic mask)
* Add Bezier time interpolator
* Add experimental support for Windows native window border (no title bar)
#### Markflow Extension
The old **Markdown** extension is completely deprecated and replaced by the new **Markflow**
* Renew markdown theme & styling
* Fix heading break style when wrapping
* Update API notice for Markflow
* Markflow initial version
#### Arc3D Graphics Engine
* Update benchmark, shader source, and dependency version
* ContextOptions logger defaults to null
* Remove instance usage of Color
* Disable runtime constant BIG_ENDIAN since LWJGL does not support big endian machines
* Rename Pixels to PixelRef
* Rename Path.recycle() to Path.release()
* Remove the old usage of UniqueID
* Rework some classes
* Optimize TaskList and more
* Fully decouple core and sketch package
* TextureQueryLod support should default to false
* Remove helper methods for drawing round rects
* Rework PathIterable and PathIterator, add Shape interface
* Rename SharedResourceCache to GlobalResourceCache
* Move 2D rendering API to sketch package
* Optimize and fix text metrics computation
* No longer make Blender and ColorFilter ref-counted
* Many improvements on high-quality text rendering
* Add Rect2f.makeInfiniteInverted() for branchless bounds union
* Update load factor for multimap
* Delete a lot of old code
* Add drawEllipse to Canvas
* Add AnalyticComplexBox geometry step, for complex AA rounded rectangles
* Trying to use Contract on read-only parameters
* Fix constant value retrieval for vector splats
* Add isOpaque for more shaders
* Merge Color4fShader with ColorShader
* Allow creating GL programs without fragment shaders (for depth-only pass)
* Add cover bounds step to handle non-AA fill and scissor fill
* Simplify LinkedListMultimap and make it small-footprint
* Add experimental drawEdgeAAQuad and drawBlurredRRect to Canvas
* ResourceCache: move budgeted and shareable to resource creation
* Strengthen FragmentStage initialization
* Add analytic blurred box geometry step
* Add modes for makeWithLocalMatrix, allow pre-concat, post-concat, replacement
* Optimize Vertices color array memcopy, move the swizzling to GPU
* Add RRectShader and implementation
* More methods to the RRect class
* Leak ref count of some wrapper-like effect objects to the underlying objects
* Allow some Shader objects to be trivially ref-counted
* Add option to enable SPIR-V in OpenGL backend
* Enable SPIR-V in OpenGL backend
* Fix vertex array setup prior to OpenGL 4.3
* Add per-edge AA quad geometry step
* Add option to use staging buffers in OpenGL, and default to false (previously is true)
* Rewrite shaders from GLSL to AkSL (Arc3D shading language)
* Fix sizeof(IndexType) calculation
* Fix blend shaders bugs
* Make StrikeDesc immutable by default
* Full support for subpixel positioning fonts
* Add methods to pack subpixel info into glyph ID
* Migrate to jspecify
#### Arc3D Shader Compiler
* Rename some classes in compiler package
* No longer use 'packed' as a variable name
- Prior to GLSL ES 3.00, 'packed' is a reserved keyword.
However, even if we use versions 3.00 and above, some drivers still consider it a keyword.
* Add some intrinsics to SPIR-V codegen
* Add TreeWriter to visit and modify the AST
* Rework TreeVisitor and AST node accept
* Use Context object everywhere instead of ShaderCompiler object
* Now accept only String input, due to immutability and compressed strings
* Remove short/half types in favor of min16int/min16float types
* Full support for GLSL codegen in OpenGL/ES backend
### Modern UI 3.12.0.4 (3.12.0.3, 3.12.0.2, 3.12.0.1)
Changes from
* 3.11.1.11 → 3.12.0.4 for Minecraft 1.21.6-1.21.8
* 3.11.1.11 → 3.12.0.3 for Minecraft 1.21.4
* 3.11.1.9 → 3.12.0.2 for Minecraft 1.21-1.21.1
* 3.11.1.6 → 3.12.0.1 for Minecraft 1.20-1.20.1
#### NeoForge Extension 1.21.8 (1.21.4, 1.21.1)
* (1.21.8 only) Fully port to 1.21.8 and adapt to the technical changes in vanilla
* (1.21.8, NeoForge only) On Windows/Linux, you have to manually set `config/fml.toml > earlyWindowControl` to false;
otherwise, your game will crash on the first launch — though you can simply restart it to resolve the issue;
this will finally be resolved in MC 1.21.9+
* (1.21.8 only) Enable blur effect by default even when OptiFine is installed
* (1.21.8 only) Delay applying the configuration until just before the game finishes loading
* (1.21.8 only) Deprecate method for drawing rounded rectangles in `ExtendedGuiGraphics`, replaced by gradient rectangles
* (1.21.8 only) `MinecraftSurfaceView.Renderer` no longer clips to the bounds of draw by default
* (1.21.8 only) Modern rounded tooltip is applied at most once per frame; subsequent tooltips in the same frame are non-rounded
* (1.21.1 only) Disable blur effect by default when OptiFine is installed
* (1.21.1 only) Fix coordinates in layer blitting
* Add complete version of Still Alive, the Portal ending song
* Add bootstrap option `modernui_mc_skipGLPromotion` to skip GL promotion
* Always skip GL promotion on macOS
* Add modified version of Inter font "Inter Frozen Medium" and its native italic font as default
* Add in-game changelogs to Home UI
* Add bootstrap options:
- `arc3d_context_useStagingBuffers` to enable staging buffers in OpenGL, default is false, previously true
- `arc3d_context_allowGLSPIRV` to use SPIR-V in OpenGL, compiled by Arc3D shader compiler, default is false
* (Forge/NeoForge only) Initialize UI manager and UI thread earlier
* Add a separate option "Additional Blur Effect" to blur vanilla screens, default is false
* Fix threading issue in layer blitting, which may cause crash when resizing window
* (1.21.1+, NeoForge only) Always do GL promotion if EARLY_WINDOW_CONTROL is disabled
* Use private logger instead of framework logger
* Add configs to custom "ding" sound and volume
* Update localization to match vanilla language data
* Add "Reset to Default" to context menu in Preferences UI, to reset a config entry to its default value
* Add back view configs and add some new view configs
* The entire Center UI is reworked, a great number of UI/UX improvements and bug fixes
* Provide an abstraction of config system
#### Forge Extension 1.21.8 (1.21.4, 1.21.1, 1.20.1)
* (1.21.8 only) Migrate to new EventBus
* Equivalent to NeoForge version, except where noted
#### Fabric Extension 1.21.8 (1.21.4, 1.21.1, 1.20.1)
* Functionally equivalent to NeoForge version, except where noted
#### Modern Text Engine 1.21.8 (1.21.4, 1.21.1, 1.20.1)
* (1.21.8 only) Port to 1.21.8
* (1.21.8 only) Ensure that the shadow layer and non-shadow layer of obfuscated text in GUI use the same glyphs.
* (1.21.8 only) Separate and simplify text rendering logic for world and GUI: in world, always use SDF rendering;
in the GUI, determine density and font size from CTM while ensuring pixel-aligned rendering.
* (1.21.8 only) Delay font atlas resizing to the end of the frame
* (1.21.8 only) `GlyphManager` is no longer initialized when Modern Text Engine is disabled
* Add config for bitmap horizontal offset
* (1.21.4+ only) Add support for no shadow text (i.e. shadow_color=0)
* Emit no lines for empty strings when computing line breaks to match vanilla behavior
* Make StandardGlyphInfo return exact advance instead of ceiling, matching vanilla TrueTypeProvider behavior.
This might improve the rendering of the AE2 guidebook
* For line wrapping of formatted text, allow emitting no lines to match vanilla behavior,
fixing the issue where an empty tooltip is sometimes visible.
* Fix crash with obfuscated style on large bitmap fonts
#### Core Framework 3.12.0
* Fix disappearing transitions caused by removing views in batches cannot be seen
* Tweak edge absorption in NestedScrollView
* Delay TextBlob initialization of ShapedText until draw time
* Add paint parameter for leading/trailing margins
* Merge TrailingMarginSpan with LeadingMarginSpan, also fix a text layout bug
* Optimize many text processing methods
* Fix StyleSpan is not cumulative
* Move LogWriter to internal
* Migrate to SLF4J, remove Log4j dependency
* Add filled text field style
* Add measure cache
* Add convenient methods for specifying styles
* Add thread-safe methods to change themes in context
* Change AdapterView.OnItemSelectedListener to functional interface
* Fully configurable view configuration
* Update scroller to calculate physical coefficients using ppi
* Make CharacterStyle cloneable, also fix TextPaint.density
* More methods in Color, and allow creating instances
* Update default fragment SFX transitions
* Allow shallow copy of Bitmap and Image as shared owners
* Add TabLayout and styles
* Improve widget scrolling mechanism
* Add tag system to View
* Add MotionEasingUtils for common bezier interpolators
* Add RTL support and fix bugs for ViewPager
* Improvements and fixes for ViewPager
* Fix hotspot point not dispatched to children
* Fix LinearLayout divider layout bug in RTL direction
* Add option to enable SPIR-V in OpenGL backend, but disable by default
- NVIDIA driver will compile SPIR-V back to into GLSL in OpenGL, and
the disassembler takes up at least 40MB of additional RAM usage
* Use rounding for font metrics
- Rounding seems to produce a more accurate layout, so the ceiling
is no longer used unless there are internal changes in the JDK
* Fix view pager touch slop
* Update color mappings for all buttons
* Not showing long click tooltip when there's hover tooltip
* Add icon button styles
* Fix two bugs in font register
- Should lookup in FontManager to use native bold/italic fonts
- To ensure thread-safety, lock the whole register method (actually a JDK bug)
* Improve tooltip show/hide logic when tooltip text is changed
* Add shadow alpha configuration to ViewGroup
* Add ComposeShader to composite two layers
* Add copyWithLocalMatrix for gradient shaders
* Use an accurate method to detect whether Bidi is needed
- Matching ShapedText and MeasuredText behavior.
This is 20% slower than the previous one, but is fast enough.
* Optimize image shader constructor, add copyWithLocalMatrix
* Add new slider styles and animation control
* Expose clearFocusInternal method to internal code
* Expose setOptionalIconsVisible method
* Remove unnecessary ThreadLocal usage
* Add View lighting and shadow casting system
* Optimize line breaking performance
* Add Drawable dirty bounds
* Update dropdown style
* Add menu item icon style and update menu item layout
* Add new checkbox style
* Add new text field and spinner styles
* Add the drawable tint methods to TextView
* Move TextStyle from Paint to TextPaint subclass
* Add builtin icons and replace legacy code
* Add new draw methods to Canvas API
* Renew RippleDrawable with masks and animations
* Add Outline class and compute Drawable outline
* Disable edge AA for ImageDrawable by default
* Change font_size_granularity to 0.25
* Enable subpixel positioning for text rendering
* Sync with latest Arc3D
* Add indeterminate state to checkbox, a tri-state checkbox
* Update subset logic for (Rounded)ImageDrawable and move subset to constant state
* Change default reference density DPI to 96
* Add on/off tooltip text for CheckableImageButton, and optimize
* Add ArrayAdapter.getContext()
* Allow nested radio groups to work, deprecate RelativeRadioGroup
* Add on/off text to switch, and optimize
* Add toggle button
* Enhance RadioGroup, so that it can work on all checkable views
* Add Checkable2 interface for checkable views with a callback
* Make CompoundButton always have checkable state to sync with CheckableImageButton
* Add checkable image button
* Add elevated button style
* Adjust default button size
* Move modulateColor to ColorStateList as a public method
* Adjust tooltip padding
* Add InsetDrawable
* Allow ShapeDrawable to draw rounded rectangles with per-corner radius
* Add methods to draw rounded rectangles with different corner radii to Canvas
* Temporarily disable popup anchor aligning to work around a bug
* Add ClipDrawable
* Add AnimationDrawable for frame-by-frame animations
* Add themed resource cache
* Add theme styles
* Add dropdown styles
* Add styles for popup menus
* Add seek bar styles and other improvements
* Add progress bar styles (determinate and indeterminate)
* Full functionality and fixes for ProgressBar
* Update text appearance of menu item
* Add radio button and switch styles
* Make EdgeEffect accept Context to retrieve theme color
* Add TextAppearance class and methods to apply typography
* Add many buttons styles
* Add many system theme values, based on M3 Expressive
* Add attributes/styleables for most UI components
* Rework the TypedValue class
* Add methods to retrieve attributes and styles in batch
* Add base methods for retrieving attributes
* Add ResourceId, StringView, ThemeKey
* Introduce a new Resources and Theme system
* Merge with ICU Bidi for MeasuredText
* Add fast path for BoringLayout.drawText() for all alignments
* Add toString() for animator classes
* Remove assertions for kotlin compile tasks
* Add RoundedImageDrawable (always keeping aspect ratio)
* Remove Paint.getShader() and simplify ImageDrawable
* Update scrollbar colors
* Update toast and tooltip styles
* Update popup menu styles
* Add new slider style
* No longer use pointing hand cursor for buttons (only for hyperlinks now)
* Update SeekBar to respect thumbOffset and support split track
* Add new drop-down style
* Update drop-down transition animation
* Change default layout for ArrayAdapter
* Change default selector for ListView
* Disable default transition for windows (rework needed)
* Add text padding for Switch
* Add custom clip bounds for View
* Add new switch thumb drawable
* Add Switch, deprecate SwitchButton
* Add two cubic Bezier interpolator
* Add button tint blend mode
* Make ShapeDrawable always skip stroking when the color is transparent
* Add new radio button drawable
* Add SystemTheme
* Make ValueAnimator work without values
* Support line spacing addition/multiplier for text Layout
* No longer using Caffeine for text layout caching, remove Caffeine dependency
* Fix AnimationMatrix clear
* Make View.getMatrix() return non-null
* Add partial view invalidation, dirty region accumulation
* Delete obsolete GLSL shaders
* Add RippleDrawable (allowing analytic mask)
* Add Bezier time interpolator
* Add experimental support for Windows native window border (no title bar)
#### Markflow Extension
The old **Markdown** extension is completely deprecated and replaced by the new **Markflow**
* Renew markdown theme & styling
* Fix heading break style when wrapping
* Update API notice for Markflow
* Markflow initial version
#### Arc3D Graphics Engine
* Update benchmark, shader source, and dependency version
* ContextOptions logger defaults to null
* Remove instance usage of Color
* Disable runtime constant BIG_ENDIAN since LWJGL does not support big endian machines
* Rename Pixels to PixelRef
* Rename Path.recycle() to Path.release()
* Remove the old usage of UniqueID
* Rework some classes
* Optimize TaskList and more
* Fully decouple core and sketch package
* TextureQueryLod support should default to false
* Remove helper methods for drawing round rects
* Rework PathIterable and PathIterator, add Shape interface
* Rename SharedResourceCache to GlobalResourceCache
* Move 2D rendering API to sketch package
* Optimize and fix text metrics computation
* No longer make Blender and ColorFilter ref-counted
* Many improvements on high-quality text rendering
* Add Rect2f.makeInfiniteInverted() for branchless bounds union
* Update load factor for multimap
* Delete a lot of old code
* Add drawEllipse to Canvas
* Add AnalyticComplexBox geometry step, for complex AA rounded rectangles
* Trying to use Contract on read-only parameters
* Fix constant value retrieval for vector splats
* Add isOpaque for more shaders
* Merge Color4fShader with ColorShader
* Allow creating GL programs without fragment shaders (for depth-only pass)
* Add cover bounds step to handle non-AA fill and scissor fill
* Simplify LinkedListMultimap and make it small-footprint
* Add experimental drawEdgeAAQuad and drawBlurredRRect to Canvas
* ResourceCache: move budgeted and shareable to resource creation
* Strengthen FragmentStage initialization
* Add analytic blurred box geometry step
* Add modes for makeWithLocalMatrix, allow pre-concat, post-concat, replacement
* Optimize Vertices color array memcopy, move the swizzling to GPU
* Add RRectShader and implementation
* More methods to the RRect class
* Leak ref count of some wrapper-like effect objects to the underlying objects
* Allow some Shader objects to be trivially ref-counted
* Add option to enable SPIR-V in OpenGL backend
* Enable SPIR-V in OpenGL backend
* Fix vertex array setup prior to OpenGL 4.3
* Add per-edge AA quad geometry step
* Add option to use staging buffers in OpenGL, and default to false (previously is true)
* Rewrite shaders from GLSL to AkSL (Arc3D shading language)
* Fix sizeof(IndexType) calculation
* Fix blend shaders bugs
* Make StrikeDesc immutable by default
* Full support for subpixel positioning fonts
* Add methods to pack subpixel info into glyph ID
* Migrate to jspecify
#### Arc3D Shader Compiler
* Rename some classes in compiler package
* No longer use 'packed' as a variable name
- Prior to GLSL ES 3.00, 'packed' is a reserved keyword.
However, even if we use versions 3.00 and above, some drivers still consider it a keyword.
* Add some intrinsics to SPIR-V codegen
* Add TreeWriter to visit and modify the AST
* Rework TreeVisitor and AST node accept
* Use Context object everywhere instead of ShaderCompiler object
* Now accept only String input, due to immutability and compressed strings
* Remove short/half types in favor of min16int/min16float types
* Full support for GLSL codegen in OpenGL/ES backend
### Modern UI 3.12.0.3
#### NeoForge Extension 1.21.4
* (1.21.1 only) Disable blur effect by default when OptiFine is installed
* (1.21.1 only) Fix coordinates in layer blitting
* Add complete version of Still Alive, the Portal ending song
* Add bootstrap option `modernui_mc_skipGLPromotion` to skip GL promotion
* Always skip GL promotion on macOS
* Add modified version of Inter font "Inter Frozen Medium" and its native italic font as default
* Add in-game changelogs to Home UI
* Add bootstrap options:
- `arc3d_context_useStagingBuffers` to enable staging buffers in OpenGL, default is false, previously true
- `arc3d_context_allowGLSPIRV` to use SPIR-V in OpenGL, compiled by Arc3D shader compiler, default is false
* (Forge/NeoForge only) Initialize UI manager and UI thread earlier
* Add a separate option "Additional Blur Effect" to blur vanilla screens, default is false
* Fix threading issue in layer blitting, which may cause crash when resizing window
* (1.21.1+, NeoForge only) Always do GL promotion if EARLY_WINDOW_CONTROL is disabled
* Use private logger instead of framework logger
* Add configs to custom "ding" sound and volume
* Update localization to match vanilla language data
* Add "Reset to Default" to context menu in Preferences UI, to reset a config entry to its default value
* Add back view configs and add some new view configs
* The entire Center UI is reworked, a great number of UI/UX improvements and bug fixes
* Provide an abstraction of config system
#### Forge Extension 1.21.4
* Equivalent to NeoForge version, except where noted
#### Fabric Extension 1.21.4
* Functionally equivalent to NeoForge version, except where noted
#### Modern Text Engine 1.21.4
* Add config for bitmap horizontal offset
* (1.21.4+ only) Add support for no shadow text (i.e. shadow_color=0)
* Emit no lines for empty strings when computing line breaks to match vanilla behavior
* Make StandardGlyphInfo return exact advance instead of ceiling, matching vanilla TrueTypeProvider behavior.
This might improve the rendering of the AE2 guidebook
* For line wrapping of formatted text, allow emitting no lines to match vanilla behavior,
fixing the issue where an empty tooltip is sometimes visible.
* Fix crash with obfuscated style on large bitmap fonts
#### Core Framework
* Fix disappearing transitions caused by removing views in batches cannot be seen
* Tweak edge absorption in NestedScrollView
* Delay TextBlob initialization of ShapedText until draw time
* Add paint parameter for leading/trailing margins
* Merge TrailingMarginSpan with LeadingMarginSpan, also fix a text layout bug
* Optimize many text processing methods
* Fix StyleSpan is not cumulative
* Move LogWriter to internal
* Migrate to SLF4J, remove Log4j dependency
* Add filled text field style
* Add measure cache
* Add convenient methods for specifying styles
* Add thread-safe methods to change themes in context
* Change AdapterView.OnItemSelectedListener to functional interface
* Fully configurable view configuration
* Update scroller to calculate physical coefficients using ppi
* Make CharacterStyle cloneable, also fix TextPaint.density
* More methods in Color, and allow creating instances
* Update default fragment SFX transitions
* Allow shallow copy of Bitmap and Image as shared owners
* Add TabLayout and styles
* Improve widget scrolling mechanism
* Add tag system to View
* Add MotionEasingUtils for common bezier interpolators
* Add RTL support and fix bugs for ViewPager
* Improvements and fixes for ViewPager
* Fix hotspot point not dispatched to children
* Fix LinearLayout divider layout bug in RTL direction
* Add option to enable SPIR-V in OpenGL backend, but disable by default
- NVIDIA driver will compile SPIR-V back to into GLSL in OpenGL, and
the disassembler takes up at least 40MB of additional RAM usage
* Use rounding for font metrics
- Rounding seems to produce a more accurate layout, so the ceiling
is no longer used unless there are internal changes in the JDK
* Fix view pager touch slop
* Update color mappings for all buttons
* Not showing long click tooltip when there's hover tooltip
* Add icon button styles
* Fix two bugs in font register
- Should lookup in FontManager to use native bold/italic fonts
- To ensure thread-safety, lock the whole register method (actually a JDK bug)
* Improve tooltip show/hide logic when tooltip text is changed
* Add shadow alpha configuration to ViewGroup
* Add ComposeShader to composite two layers
* Add copyWithLocalMatrix for gradient shaders
* Use an accurate method to detect whether Bidi is needed
- Matching ShapedText and MeasuredText behavior.
This is 20% slower than the previous one, but is fast enough.
* Optimize image shader constructor, add copyWithLocalMatrix
* Add new slider styles and animation control
* Expose clearFocusInternal method to internal code
* Expose setOptionalIconsVisible method
* Remove unnecessary ThreadLocal usage
* Add View lighting and shadow casting system
* Optimize line breaking performance
* Add Drawable dirty bounds
* Update dropdown style
* Add menu item icon style and update menu item layout
* Add new checkbox style
* Add new text field and spinner styles
* Add the drawable tint methods to TextView
* Move TextStyle from Paint to TextPaint subclass
* Add builtin icons and replace legacy code
* Add new draw methods to Canvas API
* Renew RippleDrawable with masks and animations
* Add Outline class and compute Drawable outline
* Disable edge AA for ImageDrawable by default
* Change font_size_granularity to 0.25
* Enable subpixel positioning for text rendering
* Sync with latest Arc3D
* Add indeterminate state to checkbox, a tri-state checkbox
* Update subset logic for (Rounded)ImageDrawable and move subset to constant state
* Change default reference density DPI to 96
* Add on/off tooltip text for CheckableImageButton, and optimize
* Add ArrayAdapter.getContext()
* Allow nested radio groups to work, deprecate RelativeRadioGroup
* Add on/off text to switch, and optimize
* Add toggle button
* Enhance RadioGroup, so that it can work on all checkable views
* Add Checkable2 interface for checkable views with a callback
* Make CompoundButton always have checkable state to sync with CheckableImageButton
* Add checkable image button
* Add elevated button style
* Adjust default button size
* Move modulateColor to ColorStateList as a public method
* Adjust tooltip padding
* Add InsetDrawable
* Allow ShapeDrawable to draw rounded rectangles with per-corner radius
* Add methods to draw rounded rectangles with different corner radii to Canvas
* Temporarily disable popup anchor aligning to work around a bug
* Add ClipDrawable
* Add AnimationDrawable for frame-by-frame animations
* Add themed resource cache
* Add theme styles
* Add dropdown styles
* Add styles for popup menus
* Add seek bar styles and other improvements
* Add progress bar styles (determinate and indeterminate)
* Full functionality and fixes for ProgressBar
* Update text appearance of menu item
* Add radio button and switch styles
* Make EdgeEffect accept Context to retrieve theme color
* Add TextAppearance class and methods to apply typography
* Add many buttons styles
* Add many system theme values, based on M3 Expressive
* Add attributes/styleables for most UI components
* Rework the TypedValue class
* Add methods to retrieve attributes and styles in batch
* Add base methods for retrieving attributes
* Add ResourceId, StringView, ThemeKey
* Introduce a new Resources and Theme system
* Merge with ICU Bidi for MeasuredText
* Add fast path for BoringLayout.drawText() for all alignments
* Add toString() for animator classes
* Remove assertions for kotlin compile tasks
* Add RoundedImageDrawable (always keeping aspect ratio)
* Remove Paint.getShader() and simplify ImageDrawable
* Update scrollbar colors
* Update toast and tooltip styles
* Update popup menu styles
* Add new slider style
* No longer use pointing hand cursor for buttons (only for hyperlinks now)
* Update SeekBar to respect thumbOffset and support split track
* Add new drop-down style
* Update drop-down transition animation
* Change default layout for ArrayAdapter
* Change default selector for ListView
* Disable default transition for windows (rework needed)
* Add text padding for Switch
* Add custom clip bounds for View
* Add new switch thumb drawable
* Add Switch, deprecate SwitchButton
* Add two cubic Bezier interpolator
* Add button tint blend mode
* Make ShapeDrawable always skip stroking when the color is transparent
* Add new radio button drawable
* Add SystemTheme
* Make ValueAnimator work without values
* Support line spacing addition/multiplier for text Layout
* No longer using Caffeine for text layout caching, remove Caffeine dependency
* Fix AnimationMatrix clear
* Make View.getMatrix() return non-null
* Add partial view invalidation, dirty region accumulation
* Delete obsolete GLSL shaders
* Add RippleDrawable (allowing analytic mask)
* Add Bezier time interpolator
* Add experimental support for Windows native window border (no title bar)
#### Markflow Extension
The old **Markdown** extension is completely deprecated and replaced by the new **Markflow**
* Renew markdown theme & styling
* Fix heading break style when wrapping
* Update API notice for Markflow
* Markflow initial version
#### Arc3D Graphics Engine
* Update benchmark, shader source, and dependency version
* ContextOptions logger defaults to null
* Remove instance usage of Color
* Disable runtime constant BIG_ENDIAN since LWJGL does not support big endian machines
* Rename Pixels to PixelRef
* Rename Path.recycle() to Path.release()
* Remove the old usage of UniqueID
* Rework some classes
* Optimize TaskList and more
* Fully decouple core and sketch package
* TextureQueryLod support should default to false
* Remove helper methods for drawing round rects
* Rework PathIterable and PathIterator, add Shape interface
* Rename SharedResourceCache to GlobalResourceCache
* Move 2D rendering API to sketch package
* Optimize and fix text metrics computation
* No longer make Blender and ColorFilter ref-counted
* Many improvements on high-quality text rendering
* Add Rect2f.makeInfiniteInverted() for branchless bounds union
* Update load factor for multimap
* Delete a lot of old code
* Add drawEllipse to Canvas
* Add AnalyticComplexBox geometry step, for complex AA rounded rectangles
* Trying to use Contract on read-only parameters
* Fix constant value retrieval for vector splats
* Add isOpaque for more shaders
* Merge Color4fShader with ColorShader
* Allow creating GL programs without fragment shaders (for depth-only pass)
* Add cover bounds step to handle non-AA fill and scissor fill
* Simplify LinkedListMultimap and make it small-footprint
* Add experimental drawEdgeAAQuad and drawBlurredRRect to Canvas
* ResourceCache: move budgeted and shareable to resource creation
* Strengthen FragmentStage initialization
* Add analytic blurred box geometry step
* Add modes for makeWithLocalMatrix, allow pre-concat, post-concat, replacement
* Optimize Vertices color array memcopy, move the swizzling to GPU
* Add RRectShader and implementation
* More methods to the RRect class
* Leak ref count of some wrapper-like effect objects to the underlying objects
* Allow some Shader objects to be trivially ref-counted
* Add option to enable SPIR-V in OpenGL backend
* Enable SPIR-V in OpenGL backend
* Fix vertex array setup prior to OpenGL 4.3
* Add per-edge AA quad geometry step
* Add option to use staging buffers in OpenGL, and default to false (previously is true)
* Rewrite shaders from GLSL to AkSL (Arc3D shading language)
* Fix sizeof(IndexType) calculation
* Fix blend shaders bugs
* Make StrikeDesc immutable by default
* Full support for subpixel positioning fonts
* Add methods to pack subpixel info into glyph ID
* Migrate to jspecify
#### Arc3D Shader Compiler
* Rename some classes in compiler package
* No longer use 'packed' as a variable name
- Prior to GLSL ES 3.00, 'packed' is a reserved keyword.
However, even if we use versions 3.00 and above, some drivers still consider it a keyword.
* Add some intrinsics to SPIR-V codegen
* Add TreeWriter to visit and modify the AST
* Rework TreeVisitor and AST node accept
* Use Context object everywhere instead of ShaderCompiler object
* Now accept only String input, due to immutability and compressed strings
* Remove short/half types in favor of min16int/min16float types
* Full support for GLSL codegen in OpenGL/ES backend
### Modern UI 3.12.0.3
#### NeoForge Extension 1.21.4
* (1.21.1 only) Disable blur effect by default when OptiFine is installed
* (1.21.1 only) Fix coordinates in layer blitting
* Add complete version of Still Alive, the Portal ending song
* Add bootstrap option `modernui_mc_skipGLPromotion` to skip GL promotion
* Always skip GL promotion on macOS
* Add modified version of Inter font "Inter Frozen Medium" and its native italic font as default
* Add in-game changelogs to Home UI
* Add bootstrap options:
- `arc3d_context_useStagingBuffers` to enable staging buffers in OpenGL, default is false, previously true
- `arc3d_context_allowGLSPIRV` to use SPIR-V in OpenGL, compiled by Arc3D shader compiler, default is false
* (Forge/NeoForge only) Initialize UI manager and UI thread earlier
* Add a separate option "Additional Blur Effect" to blur vanilla screens, default is false
* Fix threading issue in layer blitting, which may cause crash when resizing window
* (1.21.1+, NeoForge only) Always do GL promotion if EARLY_WINDOW_CONTROL is disabled
* Use private logger instead of framework logger
* Add configs to custom "ding" sound and volume
* Update localization to match vanilla language data
* Add "Reset to Default" to context menu in Preferences UI, to reset a config entry to its default value
* Add back view configs and add some new view configs
* The entire Center UI is reworked, a great number of UI/UX improvements and bug fixes
* Provide an abstraction of config system
#### Forge Extension 1.21.4
* Equivalent to NeoForge version, except where noted
#### Fabric Extension 1.21.4
* Functionally equivalent to NeoForge version, except where noted
#### Modern Text Engine 1.21.4
* Add config for bitmap horizontal offset
* (1.21.4+ only) Add support for no shadow text (i.e. shadow_color=0)
* Emit no lines for empty strings when computing line breaks to match vanilla behavior
* Make StandardGlyphInfo return exact advance instead of ceiling, matching vanilla TrueTypeProvider behavior.
This might improve the rendering of the AE2 guidebook
* For line wrapping of formatted text, allow emitting no lines to match vanilla behavior,
fixing the issue where an empty tooltip is sometimes visible.
* Fix crash with obfuscated style on large bitmap fonts
#### Core Framework
* Fix disappearing transitions caused by removing views in batches cannot be seen
* Tweak edge absorption in NestedScrollView
* Delay TextBlob initialization of ShapedText until draw time
* Add paint parameter for leading/trailing margins
* Merge TrailingMarginSpan with LeadingMarginSpan, also fix a text layout bug
* Optimize many text processing methods
* Fix StyleSpan is not cumulative
* Move LogWriter to internal
* Migrate to SLF4J, remove Log4j dependency
* Add filled text field style
* Add measure cache
* Add convenient methods for specifying styles
* Add thread-safe methods to change themes in context
* Change AdapterView.OnItemSelectedListener to functional interface
* Fully configurable view configuration
* Update scroller to calculate physical coefficients using ppi
* Make CharacterStyle cloneable, also fix TextPaint.density
* More methods in Color, and allow creating instances
* Update default fragment SFX transitions
* Allow shallow copy of Bitmap and Image as shared owners
* Add TabLayout and styles
* Improve widget scrolling mechanism
* Add tag system to View
* Add MotionEasingUtils for common bezier interpolators
* Add RTL support and fix bugs for ViewPager
* Improvements and fixes for ViewPager
* Fix hotspot point not dispatched to children
* Fix LinearLayout divider layout bug in RTL direction
* Add option to enable SPIR-V in OpenGL backend, but disable by default
- NVIDIA driver will compile SPIR-V back to into GLSL in OpenGL, and
the disassembler takes up at least 40MB of additional RAM usage
* Use rounding for font metrics
- Rounding seems to produce a more accurate layout, so the ceiling
is no longer used unless there are internal changes in the JDK
* Fix view pager touch slop
* Update color mappings for all buttons
* Not showing long click tooltip when there's hover tooltip
* Add icon button styles
* Fix two bugs in font register
- Should lookup in FontManager to use native bold/italic fonts
- To ensure thread-safety, lock the whole register method (actually a JDK bug)
* Improve tooltip show/hide logic when tooltip text is changed
* Add shadow alpha configuration to ViewGroup
* Add ComposeShader to composite two layers
* Add copyWithLocalMatrix for gradient shaders
* Use an accurate method to detect whether Bidi is needed
- Matching ShapedText and MeasuredText behavior.
This is 20% slower than the previous one, but is fast enough.
* Optimize image shader constructor, add copyWithLocalMatrix
* Add new slider styles and animation control
* Expose clearFocusInternal method to internal code
* Expose setOptionalIconsVisible method
* Remove unnecessary ThreadLocal usage
* Add View lighting and shadow casting system
* Optimize line breaking performance
* Add Drawable dirty bounds
* Update dropdown style
* Add menu item icon style and update menu item layout
* Add new checkbox style
* Add new text field and spinner styles
* Add the drawable tint methods to TextView
* Move TextStyle from Paint to TextPaint subclass
* Add builtin icons and replace legacy code
* Add new draw methods to Canvas API
* Renew RippleDrawable with masks and animations
* Add Outline class and compute Drawable outline
* Disable edge AA for ImageDrawable by default
* Change font_size_granularity to 0.25
* Enable subpixel positioning for text rendering
* Sync with latest Arc3D
* Add indeterminate state to checkbox, a tri-state checkbox
* Update subset logic for (Rounded)ImageDrawable and move subset to constant state
* Change default reference density DPI to 96
* Add on/off tooltip text for CheckableImageButton, and optimize
* Add ArrayAdapter.getContext()
* Allow nested radio groups to work, deprecate RelativeRadioGroup
* Add on/off text to switch, and optimize
* Add toggle button
* Enhance RadioGroup, so that it can work on all checkable views
* Add Checkable2 interface for checkable views with a callback
* Make CompoundButton always have checkable state to sync with CheckableImageButton
* Add checkable image button
* Add elevated button style
* Adjust default button size
* Move modulateColor to ColorStateList as a public method
* Adjust tooltip padding
* Add InsetDrawable
* Allow ShapeDrawable to draw rounded rectangles with per-corner radius
* Add methods to draw rounded rectangles with different corner radii to Canvas
* Temporarily disable popup anchor aligning to work around a bug
* Add ClipDrawable
* Add AnimationDrawable for frame-by-frame animations
* Add themed resource cache
* Add theme styles
* Add dropdown styles
* Add styles for popup menus
* Add seek bar styles and other improvements
* Add progress bar styles (determinate and indeterminate)
* Full functionality and fixes for ProgressBar
* Update text appearance of menu item
* Add radio button and switch styles
* Make EdgeEffect accept Context to retrieve theme color
* Add TextAppearance class and methods to apply typography
* Add many buttons styles
* Add many system theme values, based on M3 Expressive
* Add attributes/styleables for most UI components
* Rework the TypedValue class
* Add methods to retrieve attributes and styles in batch
* Add base methods for retrieving attributes
* Add ResourceId, StringView, ThemeKey
* Introduce a new Resources and Theme system
* Merge with ICU Bidi for MeasuredText
* Add fast path for BoringLayout.drawText() for all alignments
* Add toString() for animator classes
* Remove assertions for kotlin compile tasks
* Add RoundedImageDrawable (always keeping aspect ratio)
* Remove Paint.getShader() and simplify ImageDrawable
* Update scrollbar colors
* Update toast and tooltip styles
* Update popup menu styles
* Add new slider style
* No longer use pointing hand cursor for buttons (only for hyperlinks now)
* Update SeekBar to respect thumbOffset and support split track
* Add new drop-down style
* Update drop-down transition animation
* Change default layout for ArrayAdapter
* Change default selector for ListView
* Disable default transition for windows (rework needed)
* Add text padding for Switch
* Add custom clip bounds for View
* Add new switch thumb drawable
* Add Switch, deprecate SwitchButton
* Add two cubic Bezier interpolator
* Add button tint blend mode
* Make ShapeDrawable always skip stroking when the color is transparent
* Add new radio button drawable
* Add SystemTheme
* Make ValueAnimator work without values
* Support line spacing addition/multiplier for text Layout
* No longer using Caffeine for text layout caching, remove Caffeine dependency
* Fix AnimationMatrix clear
* Make View.getMatrix() return non-null
* Add partial view invalidation, dirty region accumulation
* Delete obsolete GLSL shaders
* Add RippleDrawable (allowing analytic mask)
* Add Bezier time interpolator
* Add experimental support for Windows native window border (no title bar)
#### Markflow Extension
The old **Markdown** extension is completely deprecated and replaced by the new **Markflow**
* Renew markdown theme & styling
* Fix heading break style when wrapping
* Update API notice for Markflow
* Markflow initial version
#### Arc3D Graphics Engine
* Update benchmark, shader source, and dependency version
* ContextOptions logger defaults to null
* Remove instance usage of Color
* Disable runtime constant BIG_ENDIAN since LWJGL does not support big endian machines
* Rename Pixels to PixelRef
* Rename Path.recycle() to Path.release()
* Remove the old usage of UniqueID
* Rework some classes
* Optimize TaskList and more
* Fully decouple core and sketch package
* TextureQueryLod support should default to false
* Remove helper methods for drawing round rects
* Rework PathIterable and PathIterator, add Shape interface
* Rename SharedResourceCache to GlobalResourceCache
* Move 2D rendering API to sketch package
* Optimize and fix text metrics computation
* No longer make Blender and ColorFilter ref-counted
* Many improvements on high-quality text rendering
* Add Rect2f.makeInfiniteInverted() for branchless bounds union
* Update load factor for multimap
* Delete a lot of old code
* Add drawEllipse to Canvas
* Add AnalyticComplexBox geometry step, for complex AA rounded rectangles
* Trying to use Contract on read-only parameters
* Fix constant value retrieval for vector splats
* Add isOpaque for more shaders
* Merge Color4fShader with ColorShader
* Allow creating GL programs without fragment shaders (for depth-only pass)
* Add cover bounds step to handle non-AA fill and scissor fill
* Simplify LinkedListMultimap and make it small-footprint
* Add experimental drawEdgeAAQuad and drawBlurredRRect to Canvas
* ResourceCache: move budgeted and shareable to resource creation
* Strengthen FragmentStage initialization
* Add analytic blurred box geometry step
* Add modes for makeWithLocalMatrix, allow pre-concat, post-concat, replacement
* Optimize Vertices color array memcopy, move the swizzling to GPU
* Add RRectShader and implementation
* More methods to the RRect class
* Leak ref count of some wrapper-like effect objects to the underlying objects
* Allow some Shader objects to be trivially ref-counted
* Add option to enable SPIR-V in OpenGL backend
* Enable SPIR-V in OpenGL backend
* Fix vertex array setup prior to OpenGL 4.3
* Add per-edge AA quad geometry step
* Add option to use staging buffers in OpenGL, and default to false (previously is true)
* Rewrite shaders from GLSL to AkSL (Arc3D shading language)
* Fix sizeof(IndexType) calculation
* Fix blend shaders bugs
* Make StrikeDesc immutable by default
* Full support for subpixel positioning fonts
* Add methods to pack subpixel info into glyph ID
* Migrate to jspecify
#### Arc3D Shader Compiler
* Rename some classes in compiler package
* No longer use 'packed' as a variable name
- Prior to GLSL ES 3.00, 'packed' is a reserved keyword.
However, even if we use versions 3.00 and above, some drivers still consider it a keyword.
* Add some intrinsics to SPIR-V codegen
* Add TreeWriter to visit and modify the AST
* Rework TreeVisitor and AST node accept
* Use Context object everywhere instead of ShaderCompiler object
* Now accept only String input, due to immutability and compressed strings
* Remove short/half types in favor of min16int/min16float types
* Full support for GLSL codegen in OpenGL/ES backend
### Modern UI 3.12.0.3
#### NeoForge Extension 1.21.4
* (1.21.1 only) Disable blur effect by default when OptiFine is installed
* (1.21.1 only) Fix coordinates in layer blitting
* Add complete version of Still Alive, the Portal ending song
* Add bootstrap option `modernui_mc_skipGLPromotion` to skip GL promotion
* Always skip GL promotion on macOS
* Add modified version of Inter font "Inter Frozen Medium" and its native italic font as default
* Add in-game changelogs to Home UI
* Add bootstrap options:
- `arc3d_context_useStagingBuffers` to enable staging buffers in OpenGL, default is false, previously true
- `arc3d_context_allowGLSPIRV` to use SPIR-V in OpenGL, compiled by Arc3D shader compiler, default is false
* (Forge/NeoForge only) Initialize UI manager and UI thread earlier
* Add a separate option "Additional Blur Effect" to blur vanilla screens, default is false
* Fix threading issue in layer blitting, which may cause crash when resizing window
* (1.21.1+, NeoForge only) Always do GL promotion if EARLY_WINDOW_CONTROL is disabled
* Use private logger instead of framework logger
* Add configs to custom "ding" sound and volume
* Update localization to match vanilla language data
* Add "Reset to Default" to context menu in Preferences UI, to reset a config entry to its default value
* Add back view configs and add some new view configs
* The entire Center UI is reworked, a great number of UI/UX improvements and bug fixes
* Provide an abstraction of config system
#### Forge Extension 1.21.4
* Equivalent to NeoForge version, except where noted
#### Fabric Extension 1.21.4
* Functionally equivalent to NeoForge version, except where noted
#### Modern Text Engine 1.21.4
* Add config for bitmap horizontal offset
* (1.21.4+ only) Add support for no shadow text (i.e. shadow_color=0)
* Emit no lines for empty strings when computing line breaks to match vanilla behavior
* Make StandardGlyphInfo return exact advance instead of ceiling, matching vanilla TrueTypeProvider behavior.
This might improve the rendering of the AE2 guidebook
* For line wrapping of formatted text, allow emitting no lines to match vanilla behavior,
fixing the issue where an empty tooltip is sometimes visible.
* Fix crash with obfuscated style on large bitmap fonts
#### Core Framework
* Fix disappearing transitions caused by removing views in batches cannot be seen
* Tweak edge absorption in NestedScrollView
* Delay TextBlob initialization of ShapedText until draw time
* Add paint parameter for leading/trailing margins
* Merge TrailingMarginSpan with LeadingMarginSpan, also fix a text layout bug
* Optimize many text processing methods
* Fix StyleSpan is not cumulative
* Move LogWriter to internal
* Migrate to SLF4J, remove Log4j dependency
* Add filled text field style
* Add measure cache
* Add convenient methods for specifying styles
* Add thread-safe methods to change themes in context
* Change AdapterView.OnItemSelectedListener to functional interface
* Fully configurable view configuration
* Update scroller to calculate physical coefficients using ppi
* Make CharacterStyle cloneable, also fix TextPaint.density
* More methods in Color, and allow creating instances
* Update default fragment SFX transitions
* Allow shallow copy of Bitmap and Image as shared owners
* Add TabLayout and styles
* Improve widget scrolling mechanism
* Add tag system to View
* Add MotionEasingUtils for common bezier interpolators
* Add RTL support and fix bugs for ViewPager
* Improvements and fixes for ViewPager
* Fix hotspot point not dispatched to children
* Fix LinearLayout divider layout bug in RTL direction
* Add option to enable SPIR-V in OpenGL backend, but disable by default
- NVIDIA driver will compile SPIR-V back to into GLSL in OpenGL, and
the disassembler takes up at least 40MB of additional RAM usage
* Use rounding for font metrics
- Rounding seems to produce a more accurate layout, so the ceiling
is no longer used unless there are internal changes in the JDK
* Fix view pager touch slop
* Update color mappings for all buttons
* Not showing long click tooltip when there's hover tooltip
* Add icon button styles
* Fix two bugs in font register
- Should lookup in FontManager to use native bold/italic fonts
- To ensure thread-safety, lock the whole register method (actually a JDK bug)
* Improve tooltip show/hide logic when tooltip text is changed
* Add shadow alpha configuration to ViewGroup
* Add ComposeShader to composite two layers
* Add copyWithLocalMatrix for gradient shaders
* Use an accurate method to detect whether Bidi is needed
- Matching ShapedText and MeasuredText behavior.
This is 20% slower than the previous one, but is fast enough.
* Optimize image shader constructor, add copyWithLocalMatrix
* Add new slider styles and animation control
* Expose clearFocusInternal method to internal code
* Expose setOptionalIconsVisible method
* Remove unnecessary ThreadLocal usage
* Add View lighting and shadow casting system
* Optimize line breaking performance
* Add Drawable dirty bounds
* Update dropdown style
* Add menu item icon style and update menu item layout
* Add new checkbox style
* Add new text field and spinner styles
* Add the drawable tint methods to TextView
* Move TextStyle from Paint to TextPaint subclass
* Add builtin icons and replace legacy code
* Add new draw methods to Canvas API
* Renew RippleDrawable with masks and animations
* Add Outline class and compute Drawable outline
* Disable edge AA for ImageDrawable by default
* Change font_size_granularity to 0.25
* Enable subpixel positioning for text rendering
* Sync with latest Arc3D
* Add indeterminate state to checkbox, a tri-state checkbox
* Update subset logic for (Rounded)ImageDrawable and move subset to constant state
* Change default reference density DPI to 96
* Add on/off tooltip text for CheckableImageButton, and optimize
* Add ArrayAdapter.getContext()
* Allow nested radio groups to work, deprecate RelativeRadioGroup
* Add on/off text to switch, and optimize
* Add toggle button
* Enhance RadioGroup, so that it can work on all checkable views
* Add Checkable2 interface for checkable views with a callback
* Make CompoundButton always have checkable state to sync with CheckableImageButton
* Add checkable image button
* Add elevated button style
* Adjust default button size
* Move modulateColor to ColorStateList as a public method
* Adjust tooltip padding
* Add InsetDrawable
* Allow ShapeDrawable to draw rounded rectangles with per-corner radius
* Add methods to draw rounded rectangles with different corner radii to Canvas
* Temporarily disable popup anchor aligning to work around a bug
* Add ClipDrawable
* Add AnimationDrawable for frame-by-frame animations
* Add themed resource cache
* Add theme styles
* Add dropdown styles
* Add styles for popup menus
* Add seek bar styles and other improvements
* Add progress bar styles (determinate and indeterminate)
* Full functionality and fixes for ProgressBar
* Update text appearance of menu item
* Add radio button and switch styles
* Make EdgeEffect accept Context to retrieve theme color
* Add TextAppearance class and methods to apply typography
* Add many buttons styles
* Add many system theme values, based on M3 Expressive
* Add attributes/styleables for most UI components
* Rework the TypedValue class
* Add methods to retrieve attributes and styles in batch
* Add base methods for retrieving attributes
* Add ResourceId, StringView, ThemeKey
* Introduce a new Resources and Theme system
* Merge with ICU Bidi for MeasuredText
* Add fast path for BoringLayout.drawText() for all alignments
* Add toString() for animator classes
* Remove assertions for kotlin compile tasks
* Add RoundedImageDrawable (always keeping aspect ratio)
* Remove Paint.getShader() and simplify ImageDrawable
* Update scrollbar colors
* Update toast and tooltip styles
* Update popup menu styles
* Add new slider style
* No longer use pointing hand cursor for buttons (only for hyperlinks now)
* Update SeekBar to respect thumbOffset and support split track
* Add new drop-down style
* Update drop-down transition animation
* Change default layout for ArrayAdapter
* Change default selector for ListView
* Disable default transition for windows (rework needed)
* Add text padding for Switch
* Add custom clip bounds for View
* Add new switch thumb drawable
* Add Switch, deprecate SwitchButton
* Add two cubic Bezier interpolator
* Add button tint blend mode
* Make ShapeDrawable always skip stroking when the color is transparent
* Add new radio button drawable
* Add SystemTheme
* Make ValueAnimator work without values
* Support line spacing addition/multiplier for text Layout
* No longer using Caffeine for text layout caching, remove Caffeine dependency
* Fix AnimationMatrix clear
* Make View.getMatrix() return non-null
* Add partial view invalidation, dirty region accumulation
* Delete obsolete GLSL shaders
* Add RippleDrawable (allowing analytic mask)
* Add Bezier time interpolator
* Add experimental support for Windows native window border (no title bar)
#### Markflow Extension
The old **Markdown** extension is completely deprecated and replaced by the new **Markflow**
* Renew markdown theme & styling
* Fix heading break style when wrapping
* Update API notice for Markflow
* Markflow initial version
#### Arc3D Graphics Engine
* Update benchmark, shader source, and dependency version
* ContextOptions logger defaults to null
* Remove instance usage of Color
* Disable runtime constant BIG_ENDIAN since LWJGL does not support big endian machines
* Rename Pixels to PixelRef
* Rename Path.recycle() to Path.release()
* Remove the old usage of UniqueID
* Rework some classes
* Optimize TaskList and more
* Fully decouple core and sketch package
* TextureQueryLod support should default to false
* Remove helper methods for drawing round rects
* Rework PathIterable and PathIterator, add Shape interface
* Rename SharedResourceCache to GlobalResourceCache
* Move 2D rendering API to sketch package
* Optimize and fix text metrics computation
* No longer make Blender and ColorFilter ref-counted
* Many improvements on high-quality text rendering
* Add Rect2f.makeInfiniteInverted() for branchless bounds union
* Update load factor for multimap
* Delete a lot of old code
* Add drawEllipse to Canvas
* Add AnalyticComplexBox geometry step, for complex AA rounded rectangles
* Trying to use Contract on read-only parameters
* Fix constant value retrieval for vector splats
* Add isOpaque for more shaders
* Merge Color4fShader with ColorShader
* Allow creating GL programs without fragment shaders (for depth-only pass)
* Add cover bounds step to handle non-AA fill and scissor fill
* Simplify LinkedListMultimap and make it small-footprint
* Add experimental drawEdgeAAQuad and drawBlurredRRect to Canvas
* ResourceCache: move budgeted and shareable to resource creation
* Strengthen FragmentStage initialization
* Add analytic blurred box geometry step
* Add modes for makeWithLocalMatrix, allow pre-concat, post-concat, replacement
* Optimize Vertices color array memcopy, move the swizzling to GPU
* Add RRectShader and implementation
* More methods to the RRect class
* Leak ref count of some wrapper-like effect objects to the underlying objects
* Allow some Shader objects to be trivially ref-counted
* Add option to enable SPIR-V in OpenGL backend
* Enable SPIR-V in OpenGL backend
* Fix vertex array setup prior to OpenGL 4.3
* Add per-edge AA quad geometry step
* Add option to use staging buffers in OpenGL, and default to false (previously is true)
* Rewrite shaders from GLSL to AkSL (Arc3D shading language)
* Fix sizeof(IndexType) calculation
* Fix blend shaders bugs
* Make StrikeDesc immutable by default
* Full support for subpixel positioning fonts
* Add methods to pack subpixel info into glyph ID
* Migrate to jspecify
#### Arc3D Shader Compiler
* Rename some classes in compiler package
* No longer use 'packed' as a variable name
- Prior to GLSL ES 3.00, 'packed' is a reserved keyword.
However, even if we use versions 3.00 and above, some drivers still consider it a keyword.
* Add some intrinsics to SPIR-V codegen
* Add TreeWriter to visit and modify the AST
* Rework TreeVisitor and AST node accept
* Use Context object everywhere instead of ShaderCompiler object
* Now accept only String input, due to immutability and compressed strings
* Remove short/half types in favor of min16int/min16float types
* Full support for GLSL codegen in OpenGL/ES backend
### Modern UI 3.12.0.2
#### NeoForge Extension 1.21.1
* (1.21.1 only) Disable blur effect by default when OptiFine is installed
* (1.21.1 only) Fix coordinates in layer blitting
* Add complete version of Still Alive, the Portal ending song
* Add bootstrap option `modernui_mc_skipGLPromotion` to skip GL promotion
* Always skip GL promotion on macOS
* Add modified version of Inter font "Inter Frozen Medium" and its native italic font as default
* Add in-game changelogs to Home UI
* Add bootstrap options:
- `arc3d_context_useStagingBuffers` to enable staging buffers in OpenGL, default is false, previously true
- `arc3d_context_allowGLSPIRV` to use SPIR-V in OpenGL, compiled by Arc3D shader compiler, default is false
* (Forge/NeoForge only) Initialize UI manager and UI thread earlier
* Add a separate option "Additional Blur Effect" to blur vanilla screens, default is false
* Fix threading issue in layer blitting, which may cause crash when resizing window
* (1.21.1+, NeoForge only) Always do GL promotion if EARLY_WINDOW_CONTROL is disabled
* Use private logger instead of framework logger
* Add configs to custom "ding" sound and volume
* Update localization to match vanilla language data
* Add "Reset to Default" to context menu in Preferences UI, to reset a config entry to its default value
* Add back view configs and add some new view configs
* The entire Center UI is reworked, a great number of UI/UX improvements and bug fixes
* Provide an abstraction of config system
#### Forge Extension 1.21.1
* Equivalent to NeoForge version, except where noted
#### Fabric Extension 1.21.1
* Functionally equivalent to NeoForge version, except where noted
#### Modern Text Engine 1.21.1
* Add config for bitmap horizontal offset
* (1.21.4+ only) Add support for no shadow text (i.e. shadow_color=0)
* Emit no lines for empty strings when computing line breaks to match vanilla behavior
* Make StandardGlyphInfo return exact advance instead of ceiling, matching vanilla TrueTypeProvider behavior.
This might improve the rendering of the AE2 guidebook
* For line wrapping of formatted text, allow emitting no lines to match vanilla behavior,
fixing the issue where an empty tooltip is sometimes visible.
* Fix crash with obfuscated style on large bitmap fonts
#### Core Framework
* Fix disappearing transitions caused by removing views in batches cannot be seen
* Tweak edge absorption in NestedScrollView
* Delay TextBlob initialization of ShapedText until draw time
* Add paint parameter for leading/trailing margins
* Merge TrailingMarginSpan with LeadingMarginSpan, also fix a text layout bug
* Optimize many text processing methods
* Fix StyleSpan is not cumulative
* Move LogWriter to internal
* Migrate to SLF4J, remove Log4j dependency
* Add filled text field style
* Add measure cache
* Add convenient methods for specifying styles
* Add thread-safe methods to change themes in context
* Change AdapterView.OnItemSelectedListener to functional interface
* Fully configurable view configuration
* Update scroller to calculate physical coefficients using ppi
* Make CharacterStyle cloneable, also fix TextPaint.density
* More methods in Color, and allow creating instances
* Update default fragment SFX transitions
* Allow shallow copy of Bitmap and Image as shared owners
* Add TabLayout and styles
* Improve widget scrolling mechanism
* Add tag system to View
* Add MotionEasingUtils for common bezier interpolators
* Add RTL support and fix bugs for ViewPager
* Improvements and fixes for ViewPager
* Fix hotspot point not dispatched to children
* Fix LinearLayout divider layout bug in RTL direction
* Add option to enable SPIR-V in OpenGL backend, but disable by default
- NVIDIA driver will compile SPIR-V back to into GLSL in OpenGL, and
the disassembler takes up at least 40MB of additional RAM usage
* Use rounding for font metrics
- Rounding seems to produce a more accurate layout, so the ceiling
is no longer used unless there are internal changes in the JDK
* Fix view pager touch slop
* Update color mappings for all buttons
* Not showing long click tooltip when there's hover tooltip
* Add icon button styles
* Fix two bugs in font register
- Should lookup in FontManager to use native bold/italic fonts
- To ensure thread-safety, lock the whole register method (actually a JDK bug)
* Improve tooltip show/hide logic when tooltip text is changed
* Add shadow alpha configuration to ViewGroup
* Add ComposeShader to composite two layers
* Add copyWithLocalMatrix for gradient shaders
* Use an accurate method to detect whether Bidi is needed
- Matching ShapedText and MeasuredText behavior.
This is 20% slower than the previous one, but is fast enough.
* Optimize image shader constructor, add copyWithLocalMatrix
* Add new slider styles and animation control
* Expose clearFocusInternal method to internal code
* Expose setOptionalIconsVisible method
* Remove unnecessary ThreadLocal usage
* Add View lighting and shadow casting system
* Optimize line breaking performance
* Add Drawable dirty bounds
* Update dropdown style
* Add menu item icon style and update menu item layout
* Add new checkbox style
* Add new text field and spinner styles
* Add the drawable tint methods to TextView
* Move TextStyle from Paint to TextPaint subclass
* Add builtin icons and replace legacy code
* Add new draw methods to Canvas API
* Renew RippleDrawable with masks and animations
* Add Outline class and compute Drawable outline
* Disable edge AA for ImageDrawable by default
* Change font_size_granularity to 0.25
* Enable subpixel positioning for text rendering
* Sync with latest Arc3D
* Add indeterminate state to checkbox, a tri-state checkbox
* Update subset logic for (Rounded)ImageDrawable and move subset to constant state
* Change default reference density DPI to 96
* Add on/off tooltip text for CheckableImageButton, and optimize
* Add ArrayAdapter.getContext()
* Allow nested radio groups to work, deprecate RelativeRadioGroup
* Add on/off text to switch, and optimize
* Add toggle button
* Enhance RadioGroup, so that it can work on all checkable views
* Add Checkable2 interface for checkable views with a callback
* Make CompoundButton always have checkable state to sync with CheckableImageButton
* Add checkable image button
* Add elevated button style
* Adjust default button size
* Move modulateColor to ColorStateList as a public method
* Adjust tooltip padding
* Add InsetDrawable
* Allow ShapeDrawable to draw rounded rectangles with per-corner radius
* Add methods to draw rounded rectangles with different corner radii to Canvas
* Temporarily disable popup anchor aligning to work around a bug
* Add ClipDrawable
* Add AnimationDrawable for frame-by-frame animations
* Add themed resource cache
* Add theme styles
* Add dropdown styles
* Add styles for popup menus
* Add seek bar styles and other improvements
* Add progress bar styles (determinate and indeterminate)
* Full functionality and fixes for ProgressBar
* Update text appearance of menu item
* Add radio button and switch styles
* Make EdgeEffect accept Context to retrieve theme color
* Add TextAppearance class and methods to apply typography
* Add many buttons styles
* Add many system theme values, based on M3 Expressive
* Add attributes/styleables for most UI components
* Rework the TypedValue class
* Add methods to retrieve attributes and styles in batch
* Add base methods for retrieving attributes
* Add ResourceId, StringView, ThemeKey
* Introduce a new Resources and Theme system
* Merge with ICU Bidi for MeasuredText
* Add fast path for BoringLayout.drawText() for all alignments
* Add toString() for animator classes
* Remove assertions for kotlin compile tasks
* Add RoundedImageDrawable (always keeping aspect ratio)
* Remove Paint.getShader() and simplify ImageDrawable
* Update scrollbar colors
* Update toast and tooltip styles
* Update popup menu styles
* Add new slider style
* No longer use pointing hand cursor for buttons (only for hyperlinks now)
* Update SeekBar to respect thumbOffset and support split track
* Add new drop-down style
* Update drop-down transition animation
* Change default layout for ArrayAdapter
* Change default selector for ListView
* Disable default transition for windows (rework needed)
* Add text padding for Switch
* Add custom clip bounds for View
* Add new switch thumb drawable
* Add Switch, deprecate SwitchButton
* Add two cubic Bezier interpolator
* Add button tint blend mode
* Make ShapeDrawable always skip stroking when the color is transparent
* Add new radio button drawable
* Add SystemTheme
* Make ValueAnimator work without values
* Support line spacing addition/multiplier for text Layout
* No longer using Caffeine for text layout caching, remove Caffeine dependency
* Fix AnimationMatrix clear
* Make View.getMatrix() return non-null
* Add partial view invalidation, dirty region accumulation
* Delete obsolete GLSL shaders
* Add RippleDrawable (allowing analytic mask)
* Add Bezier time interpolator
* Add experimental support for Windows native window border (no title bar)
#### Markflow Extension
The old **Markdown** extension is completely deprecated and replaced by the new **Markflow**
* Renew markdown theme & styling
* Fix heading break style when wrapping
* Update API notice for Markflow
* Markflow initial version
#### Arc3D Graphics Engine
* Update benchmark, shader source, and dependency version
* ContextOptions logger defaults to null
* Remove instance usage of Color
* Disable runtime constant BIG_ENDIAN since LWJGL does not support big endian machines
* Rename Pixels to PixelRef
* Rename Path.recycle() to Path.release()
* Remove the old usage of UniqueID
* Rework some classes
* Optimize TaskList and more
* Fully decouple core and sketch package
* TextureQueryLod support should default to false
* Remove helper methods for drawing round rects
* Rework PathIterable and PathIterator, add Shape interface
* Rename SharedResourceCache to GlobalResourceCache
* Move 2D rendering API to sketch package
* Optimize and fix text metrics computation
* No longer make Blender and ColorFilter ref-counted
* Many improvements on high-quality text rendering
* Add Rect2f.makeInfiniteInverted() for branchless bounds union
* Update load factor for multimap
* Delete a lot of old code
* Add drawEllipse to Canvas
* Add AnalyticComplexBox geometry step, for complex AA rounded rectangles
* Trying to use Contract on read-only parameters
* Fix constant value retrieval for vector splats
* Add isOpaque for more shaders
* Merge Color4fShader with ColorShader
* Allow creating GL programs without fragment shaders (for depth-only pass)
* Add cover bounds step to handle non-AA fill and scissor fill
* Simplify LinkedListMultimap and make it small-footprint
* Add experimental drawEdgeAAQuad and drawBlurredRRect to Canvas
* ResourceCache: move budgeted and shareable to resource creation
* Strengthen FragmentStage initialization
* Add analytic blurred box geometry step
* Add modes for makeWithLocalMatrix, allow pre-concat, post-concat, replacement
* Optimize Vertices color array memcopy, move the swizzling to GPU
* Add RRectShader and implementation
* More methods to the RRect class
* Leak ref count of some wrapper-like effect objects to the underlying objects
* Allow some Shader objects to be trivially ref-counted
* Add option to enable SPIR-V in OpenGL backend
* Enable SPIR-V in OpenGL backend
* Fix vertex array setup prior to OpenGL 4.3
* Add per-edge AA quad geometry step
* Add option to use staging buffers in OpenGL, and default to false (previously is true)
* Rewrite shaders from GLSL to AkSL (Arc3D shading language)
* Fix sizeof(IndexType) calculation
* Fix blend shaders bugs
* Make StrikeDesc immutable by default
* Full support for subpixel positioning fonts
* Add methods to pack subpixel info into glyph ID
* Migrate to jspecify
#### Arc3D Shader Compiler
* Rename some classes in compiler package
* No longer use 'packed' as a variable name
- Prior to GLSL ES 3.00, 'packed' is a reserved keyword.
However, even if we use versions 3.00 and above, some drivers still consider it a keyword.
* Add some intrinsics to SPIR-V codegen
* Add TreeWriter to visit and modify the AST
* Rework TreeVisitor and AST node accept
* Use Context object everywhere instead of ShaderCompiler object
* Now accept only String input, due to immutability and compressed strings
* Remove short/half types in favor of min16int/min16float types
* Full support for GLSL codegen in OpenGL/ES backend
### Modern UI 3.12.0.2
#### NeoForge Extension 1.21.1
* (1.21.1 only) Disable blur effect by default when OptiFine is installed
* (1.21.1 only) Fix coordinates in layer blitting
* Add complete version of Still Alive, the Portal ending song
* Add bootstrap option `modernui_mc_skipGLPromotion` to skip GL promotion
* Always skip GL promotion on macOS
* Add modified version of Inter font "Inter Frozen Medium" and its native italic font as default
* Add in-game changelogs to Home UI
* Add bootstrap options:
- `arc3d_context_useStagingBuffers` to enable staging buffers in OpenGL, default is false, previously true
- `arc3d_context_allowGLSPIRV` to use SPIR-V in OpenGL, compiled by Arc3D shader compiler, default is false
* (Forge/NeoForge only) Initialize UI manager and UI thread earlier
* Add a separate option "Additional Blur Effect" to blur vanilla screens, default is false
* Fix threading issue in layer blitting, which may cause crash when resizing window
* (1.21.1+, NeoForge only) Always do GL promotion if EARLY_WINDOW_CONTROL is disabled
* Use private logger instead of framework logger
* Add configs to custom "ding" sound and volume
* Update localization to match vanilla language data
* Add "Reset to Default" to context menu in Preferences UI, to reset a config entry to its default value
* Add back view configs and add some new view configs
* The entire Center UI is reworked, a great number of UI/UX improvements and bug fixes
* Provide an abstraction of config system
#### Forge Extension 1.21.1
* Equivalent to NeoForge version, except where noted
#### Fabric Extension 1.21.1
* Functionally equivalent to NeoForge version, except where noted
#### Modern Text Engine 1.21.1
* Add config for bitmap horizontal offset
* (1.21.4+ only) Add support for no shadow text (i.e. shadow_color=0)
* Emit no lines for empty strings when computing line breaks to match vanilla behavior
* Make StandardGlyphInfo return exact advance instead of ceiling, matching vanilla TrueTypeProvider behavior.
This might improve the rendering of the AE2 guidebook
* For line wrapping of formatted text, allow emitting no lines to match vanilla behavior,
fixing the issue where an empty tooltip is sometimes visible.
* Fix crash with obfuscated style on large bitmap fonts
#### Core Framework
* Fix disappearing transitions caused by removing views in batches cannot be seen
* Tweak edge absorption in NestedScrollView
* Delay TextBlob initialization of ShapedText until draw time
* Add paint parameter for leading/trailing margins
* Merge TrailingMarginSpan with LeadingMarginSpan, also fix a text layout bug
* Optimize many text processing methods
* Fix StyleSpan is not cumulative
* Move LogWriter to internal
* Migrate to SLF4J, remove Log4j dependency
* Add filled text field style
* Add measure cache
* Add convenient methods for specifying styles
* Add thread-safe methods to change themes in context
* Change AdapterView.OnItemSelectedListener to functional interface
* Fully configurable view configuration
* Update scroller to calculate physical coefficients using ppi
* Make CharacterStyle cloneable, also fix TextPaint.density
* More methods in Color, and allow creating instances
* Update default fragment SFX transitions
* Allow shallow copy of Bitmap and Image as shared owners
* Add TabLayout and styles
* Improve widget scrolling mechanism
* Add tag system to View
* Add MotionEasingUtils for common bezier interpolators
* Add RTL support and fix bugs for ViewPager
* Improvements and fixes for ViewPager
* Fix hotspot point not dispatched to children
* Fix LinearLayout divider layout bug in RTL direction
* Add option to enable SPIR-V in OpenGL backend, but disable by default
- NVIDIA driver will compile SPIR-V back to into GLSL in OpenGL, and
the disassembler takes up at least 40MB of additional RAM usage
* Use rounding for font metrics
- Rounding seems to produce a more accurate layout, so the ceiling
is no longer used unless there are internal changes in the JDK
* Fix view pager touch slop
* Update color mappings for all buttons
* Not showing long click tooltip when there's hover tooltip
* Add icon button styles
* Fix two bugs in font register
- Should lookup in FontManager to use native bold/italic fonts
- To ensure thread-safety, lock the whole register method (actually a JDK bug)
* Improve tooltip show/hide logic when tooltip text is changed
* Add shadow alpha configuration to ViewGroup
* Add ComposeShader to composite two layers
* Add copyWithLocalMatrix for gradient shaders
* Use an accurate method to detect whether Bidi is needed
- Matching ShapedText and MeasuredText behavior.
This is 20% slower than the previous one, but is fast enough.
* Optimize image shader constructor, add copyWithLocalMatrix
* Add new slider styles and animation control
* Expose clearFocusInternal method to internal code
* Expose setOptionalIconsVisible method
* Remove unnecessary ThreadLocal usage
* Add View lighting and shadow casting system
* Optimize line breaking performance
* Add Drawable dirty bounds
* Update dropdown style
* Add menu item icon style and update menu item layout
* Add new checkbox style
* Add new text field and spinner styles
* Add the drawable tint methods to TextView
* Move TextStyle from Paint to TextPaint subclass
* Add builtin icons and replace legacy code
* Add new draw methods to Canvas API
* Renew RippleDrawable with masks and animations
* Add Outline class and compute Drawable outline
* Disable edge AA for ImageDrawable by default
* Change font_size_granularity to 0.25
* Enable subpixel positioning for text rendering
* Sync with latest Arc3D
* Add indeterminate state to checkbox, a tri-state checkbox
* Update subset logic for (Rounded)ImageDrawable and move subset to constant state
* Change default reference density DPI to 96
* Add on/off tooltip text for CheckableImageButton, and optimize
* Add ArrayAdapter.getContext()
* Allow nested radio groups to work, deprecate RelativeRadioGroup
* Add on/off text to switch, and optimize
* Add toggle button
* Enhance RadioGroup, so that it can work on all checkable views
* Add Checkable2 interface for checkable views with a callback
* Make CompoundButton always have checkable state to sync with CheckableImageButton
* Add checkable image button
* Add elevated button style
* Adjust default button size
* Move modulateColor to ColorStateList as a public method
* Adjust tooltip padding
* Add InsetDrawable
* Allow ShapeDrawable to draw rounded rectangles with per-corner radius
* Add methods to draw rounded rectangles with different corner radii to Canvas
* Temporarily disable popup anchor aligning to work around a bug
* Add ClipDrawable
* Add AnimationDrawable for frame-by-frame animations
* Add themed resource cache
* Add theme styles
* Add dropdown styles
* Add styles for popup menus
* Add seek bar styles and other improvements
* Add progress bar styles (determinate and indeterminate)
* Full functionality and fixes for ProgressBar
* Update text appearance of menu item
* Add radio button and switch styles
* Make EdgeEffect accept Context to retrieve theme color
* Add TextAppearance class and methods to apply typography
* Add many buttons styles
* Add many system theme values, based on M3 Expressive
* Add attributes/styleables for most UI components
* Rework the TypedValue class
* Add methods to retrieve attributes and styles in batch
* Add base methods for retrieving attributes
* Add ResourceId, StringView, ThemeKey
* Introduce a new Resources and Theme system
* Merge with ICU Bidi for MeasuredText
* Add fast path for BoringLayout.drawText() for all alignments
* Add toString() for animator classes
* Remove assertions for kotlin compile tasks
* Add RoundedImageDrawable (always keeping aspect ratio)
* Remove Paint.getShader() and simplify ImageDrawable
* Update scrollbar colors
* Update toast and tooltip styles
* Update popup menu styles
* Add new slider style
* No longer use pointing hand cursor for buttons (only for hyperlinks now)
* Update SeekBar to respect thumbOffset and support split track
* Add new drop-down style
* Update drop-down transition animation
* Change default layout for ArrayAdapter
* Change default selector for ListView
* Disable default transition for windows (rework needed)
* Add text padding for Switch
* Add custom clip bounds for View
* Add new switch thumb drawable
* Add Switch, deprecate SwitchButton
* Add two cubic Bezier interpolator
* Add button tint blend mode
* Make ShapeDrawable always skip stroking when the color is transparent
* Add new radio button drawable
* Add SystemTheme
* Make ValueAnimator work without values
* Support line spacing addition/multiplier for text Layout
* No longer using Caffeine for text layout caching, remove Caffeine dependency
* Fix AnimationMatrix clear
* Make View.getMatrix() return non-null
* Add partial view invalidation, dirty region accumulation
* Delete obsolete GLSL shaders
* Add RippleDrawable (allowing analytic mask)
* Add Bezier time interpolator
* Add experimental support for Windows native window border (no title bar)
#### Markflow Extension
The old **Markdown** extension is completely deprecated and replaced by the new **Markflow**
* Renew markdown theme & styling
* Fix heading break style when wrapping
* Update API notice for Markflow
* Markflow initial version
#### Arc3D Graphics Engine
* Update benchmark, shader source, and dependency version
* ContextOptions logger defaults to null
* Remove instance usage of Color
* Disable runtime constant BIG_ENDIAN since LWJGL does not support big endian machines
* Rename Pixels to PixelRef
* Rename Path.recycle() to Path.release()
* Remove the old usage of UniqueID
* Rework some classes
* Optimize TaskList and more
* Fully decouple core and sketch package
* TextureQueryLod support should default to false
* Remove helper methods for drawing round rects
* Rework PathIterable and PathIterator, add Shape interface
* Rename SharedResourceCache to GlobalResourceCache
* Move 2D rendering API to sketch package
* Optimize and fix text metrics computation
* No longer make Blender and ColorFilter ref-counted
* Many improvements on high-quality text rendering
* Add Rect2f.makeInfiniteInverted() for branchless bounds union
* Update load factor for multimap
* Delete a lot of old code
* Add drawEllipse to Canvas
* Add AnalyticComplexBox geometry step, for complex AA rounded rectangles
* Trying to use Contract on read-only parameters
* Fix constant value retrieval for vector splats
* Add isOpaque for more shaders
* Merge Color4fShader with ColorShader
* Allow creating GL programs without fragment shaders (for depth-only pass)
* Add cover bounds step to handle non-AA fill and scissor fill
* Simplify LinkedListMultimap and make it small-footprint
* Add experimental drawEdgeAAQuad and drawBlurredRRect to Canvas
* ResourceCache: move budgeted and shareable to resource creation
* Strengthen FragmentStage initialization
* Add analytic blurred box geometry step
* Add modes for makeWithLocalMatrix, allow pre-concat, post-concat, replacement
* Optimize Vertices color array memcopy, move the swizzling to GPU
* Add RRectShader and implementation
* More methods to the RRect class
* Leak ref count of some wrapper-like effect objects to the underlying objects
* Allow some Shader objects to be trivially ref-counted
* Add option to enable SPIR-V in OpenGL backend
* Enable SPIR-V in OpenGL backend
* Fix vertex array setup prior to OpenGL 4.3
* Add per-edge AA quad geometry step
* Add option to use staging buffers in OpenGL, and default to false (previously is true)
* Rewrite shaders from GLSL to AkSL (Arc3D shading language)
* Fix sizeof(IndexType) calculation
* Fix blend shaders bugs
* Make StrikeDesc immutable by default
* Full support for subpixel positioning fonts
* Add methods to pack subpixel info into glyph ID
* Migrate to jspecify
#### Arc3D Shader Compiler
* Rename some classes in compiler package
* No longer use 'packed' as a variable name
- Prior to GLSL ES 3.00, 'packed' is a reserved keyword.
However, even if we use versions 3.00 and above, some drivers still consider it a keyword.
* Add some intrinsics to SPIR-V codegen
* Add TreeWriter to visit and modify the AST
* Rework TreeVisitor and AST node accept
* Use Context object everywhere instead of ShaderCompiler object
* Now accept only String input, due to immutability and compressed strings
* Remove short/half types in favor of min16int/min16float types
* Full support for GLSL codegen in OpenGL/ES backend
### Modern UI 3.12.0.2
#### NeoForge Extension 1.21.1
* (1.21.1 only) Disable blur effect by default when OptiFine is installed
* (1.21.1 only) Fix coordinates in layer blitting
* Add complete version of Still Alive, the Portal ending song
* Add bootstrap option `modernui_mc_skipGLPromotion` to skip GL promotion
* Always skip GL promotion on macOS
* Add modified version of Inter font "Inter Frozen Medium" and its native italic font as default
* Add in-game changelogs to Home UI
* Add bootstrap options:
- `arc3d_context_useStagingBuffers` to enable staging buffers in OpenGL, default is false, previously true
- `arc3d_context_allowGLSPIRV` to use SPIR-V in OpenGL, compiled by Arc3D shader compiler, default is false
* (Forge/NeoForge only) Initialize UI manager and UI thread earlier
* Add a separate option "Additional Blur Effect" to blur vanilla screens, default is false
* Fix threading issue in layer blitting, which may cause crash when resizing window
* (1.21.1+, NeoForge only) Always do GL promotion if EARLY_WINDOW_CONTROL is disabled
* Use private logger instead of framework logger
* Add configs to custom "ding" sound and volume
* Update localization to match vanilla language data
* Add "Reset to Default" to context menu in Preferences UI, to reset a config entry to its default value
* Add back view configs and add some new view configs
* The entire Center UI is reworked, a great number of UI/UX improvements and bug fixes
* Provide an abstraction of config system
#### Forge Extension 1.21.1
* Equivalent to NeoForge version, except where noted
#### Fabric Extension 1.21.1
* Functionally equivalent to NeoForge version, except where noted
#### Modern Text Engine 1.21.1
* Add config for bitmap horizontal offset
* (1.21.4+ only) Add support for no shadow text (i.e. shadow_color=0)
* Emit no lines for empty strings when computing line breaks to match vanilla behavior
* Make StandardGlyphInfo return exact advance instead of ceiling, matching vanilla TrueTypeProvider behavior.
This might improve the rendering of the AE2 guidebook
* For line wrapping of formatted text, allow emitting no lines to match vanilla behavior,
fixing the issue where an empty tooltip is sometimes visible.
* Fix crash with obfuscated style on large bitmap fonts
#### Core Framework
* Fix disappearing transitions caused by removing views in batches cannot be seen
* Tweak edge absorption in NestedScrollView
* Delay TextBlob initialization of ShapedText until draw time
* Add paint parameter for leading/trailing margins
* Merge TrailingMarginSpan with LeadingMarginSpan, also fix a text layout bug
* Optimize many text processing methods
* Fix StyleSpan is not cumulative
* Move LogWriter to internal
* Migrate to SLF4J, remove Log4j dependency
* Add filled text field style
* Add measure cache
* Add convenient methods for specifying styles
* Add thread-safe methods to change themes in context
* Change AdapterView.OnItemSelectedListener to functional interface
* Fully configurable view configuration
* Update scroller to calculate physical coefficients using ppi
* Make CharacterStyle cloneable, also fix TextPaint.density
* More methods in Color, and allow creating instances
* Update default fragment SFX transitions
* Allow shallow copy of Bitmap and Image as shared owners
* Add TabLayout and styles
* Improve widget scrolling mechanism
* Add tag system to View
* Add MotionEasingUtils for common bezier interpolators
* Add RTL support and fix bugs for ViewPager
* Improvements and fixes for ViewPager
* Fix hotspot point not dispatched to children
* Fix LinearLayout divider layout bug in RTL direction
* Add option to enable SPIR-V in OpenGL backend, but disable by default
- NVIDIA driver will compile SPIR-V back to into GLSL in OpenGL, and
the disassembler takes up at least 40MB of additional RAM usage
* Use rounding for font metrics
- Rounding seems to produce a more accurate layout, so the ceiling
is no longer used unless there are internal changes in the JDK
* Fix view pager touch slop
* Update color mappings for all buttons
* Not showing long click tooltip when there's hover tooltip
* Add icon button styles
* Fix two bugs in font register
- Should lookup in FontManager to use native bold/italic fonts
- To ensure thread-safety, lock the whole register method (actually a JDK bug)
* Improve tooltip show/hide logic when tooltip text is changed
* Add shadow alpha configuration to ViewGroup
* Add ComposeShader to composite two layers
* Add copyWithLocalMatrix for gradient shaders
* Use an accurate method to detect whether Bidi is needed
- Matching ShapedText and MeasuredText behavior.
This is 20% slower than the previous one, but is fast enough.
* Optimize image shader constructor, add copyWithLocalMatrix
* Add new slider styles and animation control
* Expose clearFocusInternal method to internal code
* Expose setOptionalIconsVisible method
* Remove unnecessary ThreadLocal usage
* Add View lighting and shadow casting system
* Optimize line breaking performance
* Add Drawable dirty bounds
* Update dropdown style
* Add menu item icon style and update menu item layout
* Add new checkbox style
* Add new text field and spinner styles
* Add the drawable tint methods to TextView
* Move TextStyle from Paint to TextPaint subclass
* Add builtin icons and replace legacy code
* Add new draw methods to Canvas API
* Renew RippleDrawable with masks and animations
* Add Outline class and compute Drawable outline
* Disable edge AA for ImageDrawable by default
* Change font_size_granularity to 0.25
* Enable subpixel positioning for text rendering
* Sync with latest Arc3D
* Add indeterminate state to checkbox, a tri-state checkbox
* Update subset logic for (Rounded)ImageDrawable and move subset to constant state
* Change default reference density DPI to 96
* Add on/off tooltip text for CheckableImageButton, and optimize
* Add ArrayAdapter.getContext()
* Allow nested radio groups to work, deprecate RelativeRadioGroup
* Add on/off text to switch, and optimize
* Add toggle button
* Enhance RadioGroup, so that it can work on all checkable views
* Add Checkable2 interface for checkable views with a callback
* Make CompoundButton always have checkable state to sync with CheckableImageButton
* Add checkable image button
* Add elevated button style
* Adjust default button size
* Move modulateColor to ColorStateList as a public method
* Adjust tooltip padding
* Add InsetDrawable
* Allow ShapeDrawable to draw rounded rectangles with per-corner radius
* Add methods to draw rounded rectangles with different corner radii to Canvas
* Temporarily disable popup anchor aligning to work around a bug
* Add ClipDrawable
* Add AnimationDrawable for frame-by-frame animations
* Add themed resource cache
* Add theme styles
* Add dropdown styles
* Add styles for popup menus
* Add seek bar styles and other improvements
* Add progress bar styles (determinate and indeterminate)
* Full functionality and fixes for ProgressBar
* Update text appearance of menu item
* Add radio button and switch styles
* Make EdgeEffect accept Context to retrieve theme color
* Add TextAppearance class and methods to apply typography
* Add many buttons styles
* Add many system theme values, based on M3 Expressive
* Add attributes/styleables for most UI components
* Rework the TypedValue class
* Add methods to retrieve attributes and styles in batch
* Add base methods for retrieving attributes
* Add ResourceId, StringView, ThemeKey
* Introduce a new Resources and Theme system
* Merge with ICU Bidi for MeasuredText
* Add fast path for BoringLayout.drawText() for all alignments
* Add toString() for animator classes
* Remove assertions for kotlin compile tasks
* Add RoundedImageDrawable (always keeping aspect ratio)
* Remove Paint.getShader() and simplify ImageDrawable
* Update scrollbar colors
* Update toast and tooltip styles
* Update popup menu styles
* Add new slider style
* No longer use pointing hand cursor for buttons (only for hyperlinks now)
* Update SeekBar to respect thumbOffset and support split track
* Add new drop-down style
* Update drop-down transition animation
* Change default layout for ArrayAdapter
* Change default selector for ListView
* Disable default transition for windows (rework needed)
* Add text padding for Switch
* Add custom clip bounds for View
* Add new switch thumb drawable
* Add Switch, deprecate SwitchButton
* Add two cubic Bezier interpolator
* Add button tint blend mode
* Make ShapeDrawable always skip stroking when the color is transparent
* Add new radio button drawable
* Add SystemTheme
* Make ValueAnimator work without values
* Support line spacing addition/multiplier for text Layout
* No longer using Caffeine for text layout caching, remove Caffeine dependency
* Fix AnimationMatrix clear
* Make View.getMatrix() return non-null
* Add partial view invalidation, dirty region accumulation
* Delete obsolete GLSL shaders
* Add RippleDrawable (allowing analytic mask)
* Add Bezier time interpolator
* Add experimental support for Windows native window border (no title bar)
#### Markflow Extension
The old **Markdown** extension is completely deprecated and replaced by the new **Markflow**
* Renew markdown theme & styling
* Fix heading break style when wrapping
* Update API notice for Markflow
* Markflow initial version
#### Arc3D Graphics Engine
* Update benchmark, shader source, and dependency version
* ContextOptions logger defaults to null
* Remove instance usage of Color
* Disable runtime constant BIG_ENDIAN since LWJGL does not support big endian machines
* Rename Pixels to PixelRef
* Rename Path.recycle() to Path.release()
* Remove the old usage of UniqueID
* Rework some classes
* Optimize TaskList and more
* Fully decouple core and sketch package
* TextureQueryLod support should default to false
* Remove helper methods for drawing round rects
* Rework PathIterable and PathIterator, add Shape interface
* Rename SharedResourceCache to GlobalResourceCache
* Move 2D rendering API to sketch package
* Optimize and fix text metrics computation
* No longer make Blender and ColorFilter ref-counted
* Many improvements on high-quality text rendering
* Add Rect2f.makeInfiniteInverted() for branchless bounds union
* Update load factor for multimap
* Delete a lot of old code
* Add drawEllipse to Canvas
* Add AnalyticComplexBox geometry step, for complex AA rounded rectangles
* Trying to use Contract on read-only parameters
* Fix constant value retrieval for vector splats
* Add isOpaque for more shaders
* Merge Color4fShader with ColorShader
* Allow creating GL programs without fragment shaders (for depth-only pass)
* Add cover bounds step to handle non-AA fill and scissor fill
* Simplify LinkedListMultimap and make it small-footprint
* Add experimental drawEdgeAAQuad and drawBlurredRRect to Canvas
* ResourceCache: move budgeted and shareable to resource creation
* Strengthen FragmentStage initialization
* Add analytic blurred box geometry step
* Add modes for makeWithLocalMatrix, allow pre-concat, post-concat, replacement
* Optimize Vertices color array memcopy, move the swizzling to GPU
* Add RRectShader and implementation
* More methods to the RRect class
* Leak ref count of some wrapper-like effect objects to the underlying objects
* Allow some Shader objects to be trivially ref-counted
* Add option to enable SPIR-V in OpenGL backend
* Enable SPIR-V in OpenGL backend
* Fix vertex array setup prior to OpenGL 4.3
* Add per-edge AA quad geometry step
* Add option to use staging buffers in OpenGL, and default to false (previously is true)
* Rewrite shaders from GLSL to AkSL (Arc3D shading language)
* Fix sizeof(IndexType) calculation
* Fix blend shaders bugs
* Make StrikeDesc immutable by default
* Full support for subpixel positioning fonts
* Add methods to pack subpixel info into glyph ID
* Migrate to jspecify
#### Arc3D Shader Compiler
* Rename some classes in compiler package
* No longer use 'packed' as a variable name
- Prior to GLSL ES 3.00, 'packed' is a reserved keyword.
However, even if we use versions 3.00 and above, some drivers still consider it a keyword.
* Add some intrinsics to SPIR-V codegen
* Add TreeWriter to visit and modify the AST
* Rework TreeVisitor and AST node accept
* Use Context object everywhere instead of ShaderCompiler object
* Now accept only String input, due to immutability and compressed strings
* Remove short/half types in favor of min16int/min16float types
* Full support for GLSL codegen in OpenGL/ES backend
### Modern UI 3.12.0.1
#### Forge Extension 1.20.1 / NeoForge Extension 1.20.1
* (1.21.1 only) Disable blur effect by default when OptiFine is installed
* (1.21.1 only) Fix coordinates in layer blitting
* Add complete version of Still Alive, the Portal ending song
* Add bootstrap option `modernui_mc_skipGLPromotion` to skip GL promotion
* Always skip GL promotion on macOS
* Add modified version of Inter font "Inter Frozen Medium" and its native italic font as default
* Add in-game changelogs to Home UI
* Add bootstrap options:
- `arc3d_context_useStagingBuffers` to enable staging buffers in OpenGL, default is false, previously true
- `arc3d_context_allowGLSPIRV` to use SPIR-V in OpenGL, compiled by Arc3D shader compiler, default is false
* (Forge/NeoForge only) Initialize UI manager and UI thread earlier
* Add a separate option "Additional Blur Effect" to blur vanilla screens, default is false
* Fix threading issue in layer blitting, which may cause crash when resizing window
* (1.21.1+, NeoForge only) Always do GL promotion if EARLY_WINDOW_CONTROL is disabled
* Use private logger instead of framework logger
* Add configs to custom "ding" sound and volume
* Update localization to match vanilla language data
* Add "Reset to Default" to context menu in Preferences UI, to reset a config entry to its default value
* Add back view configs and add some new view configs
* The entire Center UI is reworked, a great number of UI/UX improvements and bug fixes
* Provide an abstraction of config system
#### Fabric Extension 1.20.1
* Functionally equivalent to Forge version, except where noted
#### Modern Text Engine 1.20.1
* Add config for bitmap horizontal offset
* (1.21.4+ only) Add support for no shadow text (i.e. shadow_color=0)
* Emit no lines for empty strings when computing line breaks to match vanilla behavior
* Make StandardGlyphInfo return exact advance instead of ceiling, matching vanilla TrueTypeProvider behavior.
This might improve the rendering of the AE2 guidebook
* For line wrapping of formatted text, allow emitting no lines to match vanilla behavior,
fixing the issue where an empty tooltip is sometimes visible.
* Fix crash with obfuscated style on large bitmap fonts
#### Core Framework
* Fix disappearing transitions caused by removing views in batches cannot be seen
* Tweak edge absorption in NestedScrollView
* Delay TextBlob initialization of ShapedText until draw time
* Add paint parameter for leading/trailing margins
* Merge TrailingMarginSpan with LeadingMarginSpan, also fix a text layout bug
* Optimize many text processing methods
* Fix StyleSpan is not cumulative
* Move LogWriter to internal
* Migrate to SLF4J, remove Log4j dependency
* Add filled text field style
* Add measure cache
* Add convenient methods for specifying styles
* Add thread-safe methods to change themes in context
* Change AdapterView.OnItemSelectedListener to functional interface
* Fully configurable view configuration
* Update scroller to calculate physical coefficients using ppi
* Make CharacterStyle cloneable, also fix TextPaint.density
* More methods in Color, and allow creating instances
* Update default fragment SFX transitions
* Allow shallow copy of Bitmap and Image as shared owners
* Add TabLayout and styles
* Improve widget scrolling mechanism
* Add tag system to View
* Add MotionEasingUtils for common bezier interpolators
* Add RTL support and fix bugs for ViewPager
* Improvements and fixes for ViewPager
* Fix hotspot point not dispatched to children
* Fix LinearLayout divider layout bug in RTL direction
* Add option to enable SPIR-V in OpenGL backend, but disable by default
- NVIDIA driver will compile SPIR-V back to into GLSL in OpenGL, and
the disassembler takes up at least 40MB of additional RAM usage
* Use rounding for font metrics
- Rounding seems to produce a more accurate layout, so the ceiling
is no longer used unless there are internal changes in the JDK
* Fix view pager touch slop
* Update color mappings for all buttons
* Not showing long click tooltip when there's hover tooltip
* Add icon button styles
* Fix two bugs in font register
- Should lookup in FontManager to use native bold/italic fonts
- To ensure thread-safety, lock the whole register method (actually a JDK bug)
* Improve tooltip show/hide logic when tooltip text is changed
* Add shadow alpha configuration to ViewGroup
* Add ComposeShader to composite two layers
* Add copyWithLocalMatrix for gradient shaders
* Use an accurate method to detect whether Bidi is needed
- Matching ShapedText and MeasuredText behavior.
This is 20% slower than the previous one, but is fast enough.
* Optimize image shader constructor, add copyWithLocalMatrix
* Add new slider styles and animation control
* Expose clearFocusInternal method to internal code
* Expose setOptionalIconsVisible method
* Remove unnecessary ThreadLocal usage
* Add View lighting and shadow casting system
* Optimize line breaking performance
* Add Drawable dirty bounds
* Update dropdown style
* Add menu item icon style and update menu item layout
* Add new checkbox style
* Add new text field and spinner styles
* Add the drawable tint methods to TextView
* Move TextStyle from Paint to TextPaint subclass
* Add builtin icons and replace legacy code
* Add new draw methods to Canvas API
* Renew RippleDrawable with masks and animations
* Add Outline class and compute Drawable outline
* Disable edge AA for ImageDrawable by default
* Change font_size_granularity to 0.25
* Enable subpixel positioning for text rendering
* Sync with latest Arc3D
* Add indeterminate state to checkbox, a tri-state checkbox
* Update subset logic for (Rounded)ImageDrawable and move subset to constant state
* Change default reference density DPI to 96
* Add on/off tooltip text for CheckableImageButton, and optimize
* Add ArrayAdapter.getContext()
* Allow nested radio groups to work, deprecate RelativeRadioGroup
* Add on/off text to switch, and optimize
* Add toggle button
* Enhance RadioGroup, so that it can work on all checkable views
* Add Checkable2 interface for checkable views with a callback
* Make CompoundButton always have checkable state to sync with CheckableImageButton
* Add checkable image button
* Add elevated button style
* Adjust default button size
* Move modulateColor to ColorStateList as a public method
* Adjust tooltip padding
* Add InsetDrawable
* Allow ShapeDrawable to draw rounded rectangles with per-corner radius
* Add methods to draw rounded rectangles with different corner radii to Canvas
* Temporarily disable popup anchor aligning to work around a bug
* Add ClipDrawable
* Add AnimationDrawable for frame-by-frame animations
* Add themed resource cache
* Add theme styles
* Add dropdown styles
* Add styles for popup menus
* Add seek bar styles and other improvements
* Add progress bar styles (determinate and indeterminate)
* Full functionality and fixes for ProgressBar
* Update text appearance of menu item
* Add radio button and switch styles
* Make EdgeEffect accept Context to retrieve theme color
* Add TextAppearance class and methods to apply typography
* Add many buttons styles
* Add many system theme values, based on M3 Expressive
* Add attributes/styleables for most UI components
* Rework the TypedValue class
* Add methods to retrieve attributes and styles in batch
* Add base methods for retrieving attributes
* Add ResourceId, StringView, ThemeKey
* Introduce a new Resources and Theme system
* Merge with ICU Bidi for MeasuredText
* Add fast path for BoringLayout.drawText() for all alignments
* Add toString() for animator classes
* Remove assertions for kotlin compile tasks
* Add RoundedImageDrawable (always keeping aspect ratio)
* Remove Paint.getShader() and simplify ImageDrawable
* Update scrollbar colors
* Update toast and tooltip styles
* Update popup menu styles
* Add new slider style
* No longer use pointing hand cursor for buttons (only for hyperlinks now)
* Update SeekBar to respect thumbOffset and support split track
* Add new drop-down style
* Update drop-down transition animation
* Change default layout for ArrayAdapter
* Change default selector for ListView
* Disable default transition for windows (rework needed)
* Add text padding for Switch
* Add custom clip bounds for View
* Add new switch thumb drawable
* Add Switch, deprecate SwitchButton
* Add two cubic Bezier interpolator
* Add button tint blend mode
* Make ShapeDrawable always skip stroking when the color is transparent
* Add new radio button drawable
* Add SystemTheme
* Make ValueAnimator work without values
* Support line spacing addition/multiplier for text Layout
* No longer using Caffeine for text layout caching, remove Caffeine dependency
* Fix AnimationMatrix clear
* Make View.getMatrix() return non-null
* Add partial view invalidation, dirty region accumulation
* Delete obsolete GLSL shaders
* Add RippleDrawable (allowing analytic mask)
* Add Bezier time interpolator
* Add experimental support for Windows native window border (no title bar)
#### Markflow Extension
The old **Markdown** extension is completely deprecated and replaced by the new **Markflow**
* Renew markdown theme & styling
* Fix heading break style when wrapping
* Update API notice for Markflow
* Markflow initial version
#### Arc3D Graphics Engine
* Update benchmark, shader source, and dependency version
* ContextOptions logger defaults to null
* Remove instance usage of Color
* Disable runtime constant BIG_ENDIAN since LWJGL does not support big endian machines
* Rename Pixels to PixelRef
* Rename Path.recycle() to Path.release()
* Remove the old usage of UniqueID
* Rework some classes
* Optimize TaskList and more
* Fully decouple core and sketch package
* TextureQueryLod support should default to false
* Remove helper methods for drawing round rects
* Rework PathIterable and PathIterator, add Shape interface
* Rename SharedResourceCache to GlobalResourceCache
* Move 2D rendering API to sketch package
* Optimize and fix text metrics computation
* No longer make Blender and ColorFilter ref-counted
* Many improvements on high-quality text rendering
* Add Rect2f.makeInfiniteInverted() for branchless bounds union
* Update load factor for multimap
* Delete a lot of old code
* Add drawEllipse to Canvas
* Add AnalyticComplexBox geometry step, for complex AA rounded rectangles
* Trying to use Contract on read-only parameters
* Fix constant value retrieval for vector splats
* Add isOpaque for more shaders
* Merge Color4fShader with ColorShader
* Allow creating GL programs without fragment shaders (for depth-only pass)
* Add cover bounds step to handle non-AA fill and scissor fill
* Simplify LinkedListMultimap and make it small-footprint
* Add experimental drawEdgeAAQuad and drawBlurredRRect to Canvas
* ResourceCache: move budgeted and shareable to resource creation
* Strengthen FragmentStage initialization
* Add analytic blurred box geometry step
* Add modes for makeWithLocalMatrix, allow pre-concat, post-concat, replacement
* Optimize Vertices color array memcopy, move the swizzling to GPU
* Add RRectShader and implementation
* More methods to the RRect class
* Leak ref count of some wrapper-like effect objects to the underlying objects
* Allow some Shader objects to be trivially ref-counted
* Add option to enable SPIR-V in OpenGL backend
* Enable SPIR-V in OpenGL backend
* Fix vertex array setup prior to OpenGL 4.3
* Add per-edge AA quad geometry step
* Add option to use staging buffers in OpenGL, and default to false (previously is true)
* Rewrite shaders from GLSL to AkSL (Arc3D shading language)
* Fix sizeof(IndexType) calculation
* Fix blend shaders bugs
* Make StrikeDesc immutable by default
* Full support for subpixel positioning fonts
* Add methods to pack subpixel info into glyph ID
* Migrate to jspecify
#### Arc3D Shader Compiler
* Rename some classes in compiler package
* No longer use 'packed' as a variable name
- Prior to GLSL ES 3.00, 'packed' is a reserved keyword.
However, even if we use versions 3.00 and above, some drivers still consider it a keyword.
* Add some intrinsics to SPIR-V codegen
* Add TreeWriter to visit and modify the AST
* Rework TreeVisitor and AST node accept
* Use Context object everywhere instead of ShaderCompiler object
* Now accept only String input, due to immutability and compressed strings
* Remove short/half types in favor of min16int/min16float types
* Full support for GLSL codegen in OpenGL/ES backend
### Modern UI 3.12.0.1
#### Forge Extension 1.20.1 / NeoForge Extension 1.20.1
* (1.21.1 only) Disable blur effect by default when OptiFine is installed
* (1.21.1 only) Fix coordinates in layer blitting
* Add complete version of Still Alive, the Portal ending song
* Add bootstrap option `modernui_mc_skipGLPromotion` to skip GL promotion
* Always skip GL promotion on macOS
* Add modified version of Inter font "Inter Frozen Medium" and its native italic font as default
* Add in-game changelogs to Home UI
* Add bootstrap options:
- `arc3d_context_useStagingBuffers` to enable staging buffers in OpenGL, default is false, previously true
- `arc3d_context_allowGLSPIRV` to use SPIR-V in OpenGL, compiled by Arc3D shader compiler, default is false
* (Forge/NeoForge only) Initialize UI manager and UI thread earlier
* Add a separate option "Additional Blur Effect" to blur vanilla screens, default is false
* Fix threading issue in layer blitting, which may cause crash when resizing window
* (1.21.1+, NeoForge only) Always do GL promotion if EARLY_WINDOW_CONTROL is disabled
* Use private logger instead of framework logger
* Add configs to custom "ding" sound and volume
* Update localization to match vanilla language data
* Add "Reset to Default" to context menu in Preferences UI, to reset a config entry to its default value
* Add back view configs and add some new view configs
* The entire Center UI is reworked, a great number of UI/UX improvements and bug fixes
* Provide an abstraction of config system
#### Fabric Extension 1.20.1
* Functionally equivalent to Forge version, except where noted
#### Modern Text Engine 1.20.1
* Add config for bitmap horizontal offset
* (1.21.4+ only) Add support for no shadow text (i.e. shadow_color=0)
* Emit no lines for empty strings when computing line breaks to match vanilla behavior
* Make StandardGlyphInfo return exact advance instead of ceiling, matching vanilla TrueTypeProvider behavior.
This might improve the rendering of the AE2 guidebook
* For line wrapping of formatted text, allow emitting no lines to match vanilla behavior,
fixing the issue where an empty tooltip is sometimes visible.
* Fix crash with obfuscated style on large bitmap fonts
#### Core Framework
* Fix disappearing transitions caused by removing views in batches cannot be seen
* Tweak edge absorption in NestedScrollView
* Delay TextBlob initialization of ShapedText until draw time
* Add paint parameter for leading/trailing margins
* Merge TrailingMarginSpan with LeadingMarginSpan, also fix a text layout bug
* Optimize many text processing methods
* Fix StyleSpan is not cumulative
* Move LogWriter to internal
* Migrate to SLF4J, remove Log4j dependency
* Add filled text field style
* Add measure cache
* Add convenient methods for specifying styles
* Add thread-safe methods to change themes in context
* Change AdapterView.OnItemSelectedListener to functional interface
* Fully configurable view configuration
* Update scroller to calculate physical coefficients using ppi
* Make CharacterStyle cloneable, also fix TextPaint.density
* More methods in Color, and allow creating instances
* Update default fragment SFX transitions
* Allow shallow copy of Bitmap and Image as shared owners
* Add TabLayout and styles
* Improve widget scrolling mechanism
* Add tag system to View
* Add MotionEasingUtils for common bezier interpolators
* Add RTL support and fix bugs for ViewPager
* Improvements and fixes for ViewPager
* Fix hotspot point not dispatched to children
* Fix LinearLayout divider layout bug in RTL direction
* Add option to enable SPIR-V in OpenGL backend, but disable by default
- NVIDIA driver will compile SPIR-V back to into GLSL in OpenGL, and
the disassembler takes up at least 40MB of additional RAM usage
* Use rounding for font metrics
- Rounding seems to produce a more accurate layout, so the ceiling
is no longer used unless there are internal changes in the JDK
* Fix view pager touch slop
* Update color mappings for all buttons
* Not showing long click tooltip when there's hover tooltip
* Add icon button styles
* Fix two bugs in font register
- Should lookup in FontManager to use native bold/italic fonts
- To ensure thread-safety, lock the whole register method (actually a JDK bug)
* Improve tooltip show/hide logic when tooltip text is changed
* Add shadow alpha configuration to ViewGroup
* Add ComposeShader to composite two layers
* Add copyWithLocalMatrix for gradient shaders
* Use an accurate method to detect whether Bidi is needed
- Matching ShapedText and MeasuredText behavior.
This is 20% slower than the previous one, but is fast enough.
* Optimize image shader constructor, add copyWithLocalMatrix
* Add new slider styles and animation control
* Expose clearFocusInternal method to internal code
* Expose setOptionalIconsVisible method
* Remove unnecessary ThreadLocal usage
* Add View lighting and shadow casting system
* Optimize line breaking performance
* Add Drawable dirty bounds
* Update dropdown style
* Add menu item icon style and update menu item layout
* Add new checkbox style
* Add new text field and spinner styles
* Add the drawable tint methods to TextView
* Move TextStyle from Paint to TextPaint subclass
* Add builtin icons and replace legacy code
* Add new draw methods to Canvas API
* Renew RippleDrawable with masks and animations
* Add Outline class and compute Drawable outline
* Disable edge AA for ImageDrawable by default
* Change font_size_granularity to 0.25
* Enable subpixel positioning for text rendering
* Sync with latest Arc3D
* Add indeterminate state to checkbox, a tri-state checkbox
* Update subset logic for (Rounded)ImageDrawable and move subset to constant state
* Change default reference density DPI to 96
* Add on/off tooltip text for CheckableImageButton, and optimize
* Add ArrayAdapter.getContext()
* Allow nested radio groups to work, deprecate RelativeRadioGroup
* Add on/off text to switch, and optimize
* Add toggle button
* Enhance RadioGroup, so that it can work on all checkable views
* Add Checkable2 interface for checkable views with a callback
* Make CompoundButton always have checkable state to sync with CheckableImageButton
* Add checkable image button
* Add elevated button style
* Adjust default button size
* Move modulateColor to ColorStateList as a public method
* Adjust tooltip padding
* Add InsetDrawable
* Allow ShapeDrawable to draw rounded rectangles with per-corner radius
* Add methods to draw rounded rectangles with different corner radii to Canvas
* Temporarily disable popup anchor aligning to work around a bug
* Add ClipDrawable
* Add AnimationDrawable for frame-by-frame animations
* Add themed resource cache
* Add theme styles
* Add dropdown styles
* Add styles for popup menus
* Add seek bar styles and other improvements
* Add progress bar styles (determinate and indeterminate)
* Full functionality and fixes for ProgressBar
* Update text appearance of menu item
* Add radio button and switch styles
* Make EdgeEffect accept Context to retrieve theme color
* Add TextAppearance class and methods to apply typography
* Add many buttons styles
* Add many system theme values, based on M3 Expressive
* Add attributes/styleables for most UI components
* Rework the TypedValue class
* Add methods to retrieve attributes and styles in batch
* Add base methods for retrieving attributes
* Add ResourceId, StringView, ThemeKey
* Introduce a new Resources and Theme system
* Merge with ICU Bidi for MeasuredText
* Add fast path for BoringLayout.drawText() for all alignments
* Add toString() for animator classes
* Remove assertions for kotlin compile tasks
* Add RoundedImageDrawable (always keeping aspect ratio)
* Remove Paint.getShader() and simplify ImageDrawable
* Update scrollbar colors
* Update toast and tooltip styles
* Update popup menu styles
* Add new slider style
* No longer use pointing hand cursor for buttons (only for hyperlinks now)
* Update SeekBar to respect thumbOffset and support split track
* Add new drop-down style
* Update drop-down transition animation
* Change default layout for ArrayAdapter
* Change default selector for ListView
* Disable default transition for windows (rework needed)
* Add text padding for Switch
* Add custom clip bounds for View
* Add new switch thumb drawable
* Add Switch, deprecate SwitchButton
* Add two cubic Bezier interpolator
* Add button tint blend mode
* Make ShapeDrawable always skip stroking when the color is transparent
* Add new radio button drawable
* Add SystemTheme
* Make ValueAnimator work without values
* Support line spacing addition/multiplier for text Layout
* No longer using Caffeine for text layout caching, remove Caffeine dependency
* Fix AnimationMatrix clear
* Make View.getMatrix() return non-null
* Add partial view invalidation, dirty region accumulation
* Delete obsolete GLSL shaders
* Add RippleDrawable (allowing analytic mask)
* Add Bezier time interpolator
* Add experimental support for Windows native window border (no title bar)
#### Markflow Extension
The old **Markdown** extension is completely deprecated and replaced by the new **Markflow**
* Renew markdown theme & styling
* Fix heading break style when wrapping
* Update API notice for Markflow
* Markflow initial version
#### Arc3D Graphics Engine
* Update benchmark, shader source, and dependency version
* ContextOptions logger defaults to null
* Remove instance usage of Color
* Disable runtime constant BIG_ENDIAN since LWJGL does not support big endian machines
* Rename Pixels to PixelRef
* Rename Path.recycle() to Path.release()
* Remove the old usage of UniqueID
* Rework some classes
* Optimize TaskList and more
* Fully decouple core and sketch package
* TextureQueryLod support should default to false
* Remove helper methods for drawing round rects
* Rework PathIterable and PathIterator, add Shape interface
* Rename SharedResourceCache to GlobalResourceCache
* Move 2D rendering API to sketch package
* Optimize and fix text metrics computation
* No longer make Blender and ColorFilter ref-counted
* Many improvements on high-quality text rendering
* Add Rect2f.makeInfiniteInverted() for branchless bounds union
* Update load factor for multimap
* Delete a lot of old code
* Add drawEllipse to Canvas
* Add AnalyticComplexBox geometry step, for complex AA rounded rectangles
* Trying to use Contract on read-only parameters
* Fix constant value retrieval for vector splats
* Add isOpaque for more shaders
* Merge Color4fShader with ColorShader
* Allow creating GL programs without fragment shaders (for depth-only pass)
* Add cover bounds step to handle non-AA fill and scissor fill
* Simplify LinkedListMultimap and make it small-footprint
* Add experimental drawEdgeAAQuad and drawBlurredRRect to Canvas
* ResourceCache: move budgeted and shareable to resource creation
* Strengthen FragmentStage initialization
* Add analytic blurred box geometry step
* Add modes for makeWithLocalMatrix, allow pre-concat, post-concat, replacement
* Optimize Vertices color array memcopy, move the swizzling to GPU
* Add RRectShader and implementation
* More methods to the RRect class
* Leak ref count of some wrapper-like effect objects to the underlying objects
* Allow some Shader objects to be trivially ref-counted
* Add option to enable SPIR-V in OpenGL backend
* Enable SPIR-V in OpenGL backend
* Fix vertex array setup prior to OpenGL 4.3
* Add per-edge AA quad geometry step
* Add option to use staging buffers in OpenGL, and default to false (previously is true)
* Rewrite shaders from GLSL to AkSL (Arc3D shading language)
* Fix sizeof(IndexType) calculation
* Fix blend shaders bugs
* Make StrikeDesc immutable by default
* Full support for subpixel positioning fonts
* Add methods to pack subpixel info into glyph ID
* Migrate to jspecify
#### Arc3D Shader Compiler
* Rename some classes in compiler package
* No longer use 'packed' as a variable name
- Prior to GLSL ES 3.00, 'packed' is a reserved keyword.
However, even if we use versions 3.00 and above, some drivers still consider it a keyword.
* Add some intrinsics to SPIR-V codegen
* Add TreeWriter to visit and modify the AST
* Rework TreeVisitor and AST node accept
* Use Context object everywhere instead of ShaderCompiler object
* Now accept only String input, due to immutability and compressed strings
* Remove short/half types in favor of min16int/min16float types
* Full support for GLSL codegen in OpenGL/ES backend
### Modern UI 3.11.1.11
This is a Minecraft-only update, the Modern UI core does not change.
**Modern UI** is likely to be renamed to **ModernUI** in the next version.
#### NeoForge Extension 1.21.4
* Update to 1.21.4
* Suppress indirect crashes due to broken mod state
* Ignore translation-z for exact tooltip positioning
* Fix multiple tooltip colors not working
#### Forge Extension 1.21.4
* Equivalent to NeoForge version
#### Fabric Extension 1.21.4
* Improve modern tooltip compatibility on Fabric
* Add config for tooltip line wrapping on Fabric
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.21.4
* Fix text effect of color emoji is always white
* Exclude CozyUI fonts by default
* Remove duplicates when dumping bitmap fonts
* Use isLenient for parsing font definition files
* Fix large bitmap fonts being ignored
### Modern UI 3.11.1.11
This is a Minecraft-only update, the Modern UI core does not change.
**Modern UI** is likely to be renamed to **ModernUI** in the next version.
#### NeoForge Extension 1.21.4
* Update to 1.21.4
* Suppress indirect crashes due to broken mod state
* Ignore translation-z for exact tooltip positioning
* Fix multiple tooltip colors not working
#### Forge Extension 1.21.4
* Equivalent to NeoForge version
#### Fabric Extension 1.21.4
* Improve modern tooltip compatibility on Fabric
* Add config for tooltip line wrapping on Fabric
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.21.4
* Fix text effect of color emoji is always white
* Exclude CozyUI fonts by default
* Remove duplicates when dumping bitmap fonts
* Use isLenient for parsing font definition files
* Fix large bitmap fonts being ignored
### Modern UI 3.11.1.11
This is a Minecraft-only update, the Modern UI core does not change.
**Modern UI** is likely to be renamed to **ModernUI** in the next version.
#### NeoForge Extension 1.21.4
* Update to 1.21.4
* Suppress indirect crashes due to broken mod state
* Ignore translation-z for exact tooltip positioning
* Fix multiple tooltip colors not working
#### Forge Extension 1.21.4
* Equivalent to NeoForge version
#### Fabric Extension 1.21.4
* Improve modern tooltip compatibility on Fabric
* Add config for tooltip line wrapping on Fabric
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.21.4
* Fix text effect of color emoji is always white
* Exclude CozyUI fonts by default
* Remove duplicates when dumping bitmap fonts
* Use isLenient for parsing font definition files
* Fix large bitmap fonts being ignored
### Modern UI 3.11.1.10
This is a Minecraft-only update, the Modern UI core does not change.
**Modern UI** is likely to be renamed to **ModernUI** in the next version.
#### NeoForge Extension 1.21.3
* Suppress indirect crashes due to broken mod state
* Ignore translation-z for exact tooltip positioning
* Fix multiple tooltip colors not working
#### Forge Extension 1.21.3
* Equivalent to NeoForge version
#### Fabric Extension 1.21.3
* Improve modern tooltip compatibility on Fabric
* Add config for tooltip line wrapping on Fabric
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.21.3
* Fix text effect of color emoji is always white
* Exclude CozyUI fonts by default
* Remove duplicates when dumping bitmap fonts
* Use isLenient for parsing font definition files
* Fix large bitmap fonts being ignored
### Modern UI 3.11.1.10
This is a Minecraft-only update, the Modern UI core does not change.
**Modern UI** is likely to be renamed to **ModernUI** in the next version.
#### NeoForge Extension 1.21.3
* Suppress indirect crashes due to broken mod state
* Ignore translation-z for exact tooltip positioning
* Fix multiple tooltip colors not working
#### Forge Extension 1.21.3
* Equivalent to NeoForge version
#### Fabric Extension 1.21.3
* Improve modern tooltip compatibility on Fabric
* Add config for tooltip line wrapping on Fabric
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.21.3
* Fix text effect of color emoji is always white
* Exclude CozyUI fonts by default
* Remove duplicates when dumping bitmap fonts
* Use isLenient for parsing font definition files
* Fix large bitmap fonts being ignored
### Modern UI 3.11.1.10
This is a Minecraft-only update, the Modern UI core does not change.
**Modern UI** is likely to be renamed to **ModernUI** in the next version.
#### NeoForge Extension 1.21.3
* Suppress indirect crashes due to broken mod state
* Ignore translation-z for exact tooltip positioning
* Fix multiple tooltip colors not working
#### Forge Extension 1.21.3
* Equivalent to NeoForge version
#### Fabric Extension 1.21.3
* Improve modern tooltip compatibility on Fabric
* Add config for tooltip line wrapping on Fabric
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.21.3
* Fix text effect of color emoji is always white
* Exclude CozyUI fonts by default
* Remove duplicates when dumping bitmap fonts
* Use isLenient for parsing font definition files
* Fix large bitmap fonts being ignored
### Modern UI 3.11.1.9
This is a Minecraft-only update, the Modern UI core does not change.
**Modern UI** is likely to be renamed to **ModernUI** in the next version.
#### NeoForge Extension 1.21.1
* Suppress indirect crashes due to broken mod state
* Ignore translation-z for exact tooltip positioning
* Fix multiple tooltip colors not working
#### Forge Extension 1.21.1
* Equivalent to NeoForge version
#### Fabric Extension 1.21.1
* Improve modern tooltip compatibility on Fabric
* Add config for tooltip line wrapping on Fabric
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.21.1
* Fix text effect of color emoji is always white
* Exclude CozyUI fonts by default
* Remove duplicates when dumping bitmap fonts
* Use isLenient for parsing font definition files
* Fix large bitmap fonts being ignored
### Modern UI 3.11.1.9
This is a Minecraft-only update, the Modern UI core does not change.
**Modern UI** is likely to be renamed to **ModernUI** in the next version.
#### NeoForge Extension 1.21.1
* Suppress indirect crashes due to broken mod state
* Ignore translation-z for exact tooltip positioning
* Fix multiple tooltip colors not working
#### Forge Extension 1.21.1
* Equivalent to NeoForge version
#### Fabric Extension 1.21.1
* Improve modern tooltip compatibility on Fabric
* Add config for tooltip line wrapping on Fabric
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.21.1
* Fix text effect of color emoji is always white
* Exclude CozyUI fonts by default
* Remove duplicates when dumping bitmap fonts
* Use isLenient for parsing font definition files
* Fix large bitmap fonts being ignored
### Modern UI 3.11.1.9
This is a Minecraft-only update, the Modern UI core does not change.
**Modern UI** is likely to be renamed to **ModernUI** in the next version.
#### NeoForge Extension 1.21.1
* Suppress indirect crashes due to broken mod state
* Ignore translation-z for exact tooltip positioning
* Fix multiple tooltip colors not working
#### Forge Extension 1.21.1
* Equivalent to NeoForge version
#### Fabric Extension 1.21.1
* Improve modern tooltip compatibility on Fabric
* Add config for tooltip line wrapping on Fabric
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.21.1
* Fix text effect of color emoji is always white
* Exclude CozyUI fonts by default
* Remove duplicates when dumping bitmap fonts
* Use isLenient for parsing font definition files
* Fix large bitmap fonts being ignored
### Modern UI 3.11.1.8
This is a Minecraft-only update, the Modern UI core does not change.
**Modern UI** is likely to be renamed to **ModernUI** in the next version.
#### NeoForge Extension 1.20.6
* Suppress indirect crashes due to broken mod state
* Ignore translation-z for exact tooltip positioning
* Fix multiple tooltip colors not working
#### Forge Extension 1.20.6
* Equivalent to NeoForge version
#### Fabric Extension 1.20.6
* Improve modern tooltip compatibility on Fabric
* Add config for tooltip line wrapping on Fabric
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.20.6
* Fix text effect of color emoji is always white
* Exclude CozyUI fonts by default
* Remove duplicates when dumping bitmap fonts
* Use isLenient for parsing font definition files
* Fix large bitmap fonts being ignored
### Modern UI 3.11.1.8
This is a Minecraft-only update, the Modern UI core does not change.
**Modern UI** is likely to be renamed to **ModernUI** in the next version.
#### NeoForge Extension 1.20.6
* Suppress indirect crashes due to broken mod state
* Ignore translation-z for exact tooltip positioning
* Fix multiple tooltip colors not working
#### Forge Extension 1.20.6
* Equivalent to NeoForge version
#### Fabric Extension 1.20.6
* Improve modern tooltip compatibility on Fabric
* Add config for tooltip line wrapping on Fabric
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.20.6
* Fix text effect of color emoji is always white
* Exclude CozyUI fonts by default
* Remove duplicates when dumping bitmap fonts
* Use isLenient for parsing font definition files
* Fix large bitmap fonts being ignored
### Modern UI 3.11.1.8
This is a Minecraft-only update, the Modern UI core does not change.
**Modern UI** is likely to be renamed to **ModernUI** in the next version.
#### NeoForge Extension 1.20.6
* Suppress indirect crashes due to broken mod state
* Ignore translation-z for exact tooltip positioning
* Fix multiple tooltip colors not working
#### Forge Extension 1.20.6
* Equivalent to NeoForge version
#### Fabric Extension 1.20.6
* Improve modern tooltip compatibility on Fabric
* Add config for tooltip line wrapping on Fabric
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.20.6
* Fix text effect of color emoji is always white
* Exclude CozyUI fonts by default
* Remove duplicates when dumping bitmap fonts
* Use isLenient for parsing font definition files
* Fix large bitmap fonts being ignored
### Modern UI 3.11.1.7
This is a Minecraft-only update, the Modern UI core does not change.
**Modern UI** is likely to be renamed to **ModernUI** in the next version.
#### NeoForge Extension 1.20.4
* Suppress indirect crashes due to broken mod state
* Ignore translation-z for exact tooltip positioning
* Fix multiple tooltip colors not working
#### Forge Extension 1.20.4
* Equivalent to NeoForge version
#### Fabric Extension 1.20.4
* Improve modern tooltip compatibility on Fabric
* Add config for tooltip line wrapping on Fabric
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.20.4
* Fix the compatibility with polytone
* Fix text effect of color emoji is always white
* Exclude CozyUI fonts by default
* Remove duplicates when dumping bitmap fonts
* Use isLenient for parsing font definition files
* Fix large bitmap fonts being ignored
### Modern UI 3.11.1.7
This is a Minecraft-only update, the Modern UI core does not change.
**Modern UI** is likely to be renamed to **ModernUI** in the next version.
#### NeoForge Extension 1.20.4
* Suppress indirect crashes due to broken mod state
* Ignore translation-z for exact tooltip positioning
* Fix multiple tooltip colors not working
#### Forge Extension 1.20.4
* Equivalent to NeoForge version
#### Fabric Extension 1.20.4
* Improve modern tooltip compatibility on Fabric
* Add config for tooltip line wrapping on Fabric
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.20.4
* Fix the compatibility with polytone
* Fix text effect of color emoji is always white
* Exclude CozyUI fonts by default
* Remove duplicates when dumping bitmap fonts
* Use isLenient for parsing font definition files
* Fix large bitmap fonts being ignored
### Modern UI 3.11.1.7
This is a Minecraft-only update, the Modern UI core does not change.
**Modern UI** is likely to be renamed to **ModernUI** in the next version.
#### NeoForge Extension 1.20.4
* Suppress indirect crashes due to broken mod state
* Ignore translation-z for exact tooltip positioning
* Fix multiple tooltip colors not working
#### Forge Extension 1.20.4
* Equivalent to NeoForge version
#### Fabric Extension 1.20.4
* Improve modern tooltip compatibility on Fabric
* Add config for tooltip line wrapping on Fabric
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.20.4
* Fix the compatibility with polytone
* Fix text effect of color emoji is always white
* Exclude CozyUI fonts by default
* Remove duplicates when dumping bitmap fonts
* Use isLenient for parsing font definition files
* Fix large bitmap fonts being ignored
### Modern UI 3.11.1.6
This is a Minecraft-only update, the Modern UI core does not change.
**Modern UI** is likely to be renamed to **ModernUI** in the next version.
#### Forge Extension 1.20.1 / NeoForge Extension 1.20.1
* Suppress indirect crashes due to broken mod state
* Ignore translation-z for exact tooltip positioning
* Fix multiple tooltip colors not working
#### Fabric Extension 1.20.1
* Improve modern tooltip compatibility on Fabric
* Add config for tooltip line wrapping on Fabric
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.20.1
* Fix the compatibility with polytone
* Fix text effect of color emoji is always white
* Exclude CozyUI fonts by default
* Remove duplicates when dumping bitmap fonts
* Use isLenient for parsing font definition files
* Fix large bitmap fonts being ignored
### Modern UI 3.11.1.6
This is a Minecraft-only update, the Modern UI core does not change.
**Modern UI** is likely to be renamed to **ModernUI** in the next version.
#### Forge Extension 1.20.1 / NeoForge Extension 1.20.1
* Suppress indirect crashes due to broken mod state
* Ignore translation-z for exact tooltip positioning
* Fix multiple tooltip colors not working
#### Fabric Extension 1.20.1
* Improve modern tooltip compatibility on Fabric
* Add config for tooltip line wrapping on Fabric
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.20.1
* Fix the compatibility with polytone
* Fix text effect of color emoji is always white
* Exclude CozyUI fonts by default
* Remove duplicates when dumping bitmap fonts
* Use isLenient for parsing font definition files
* Fix large bitmap fonts being ignored
### Modern UI 3.11.1.5
#### NeoForge Extension 1.21.3
* Add ExtendedGuiGraphics that allows other mods to draw rounded rectangles in vanilla-based GUI
* Vanilla blur now follow vanilla menu blurriness option
* Add emoji shortcode suggestions
* Fix lifecycle bug, improve UI slider
* Fix game loading complete sound "DING" not working
* Fix tooltip title break not showing up on certain GPUs
* Update to Emoji 16.0
* Fix startup crash on dedicated server
* Fix crash in PojavLauncher
* Change the first font loading behavior to ensure bundled fonts are loaded
* Some other fixes, improvements and optimizations
#### Forge Extension 1.21.3
* Equivalent to NeoForge version
#### Fabric Extension 1.21.3
* Functionally equivalent to NeoForge version
#### Modern Text Engine 1.21.3
* Improve experience level rendering
* Optimize white texture and text effect rendering
* No longer register fonts in minecraft namespace
- Use `"font":"modernui:jetbrains-mono-medium"` to change font
* Set max allowed value for minPixelDensityForSDF to 10
* Use point sampling for A8 atlas by default as an optimization
- We prefer computeDeviceFontSize and allowSDFTextIn2D, if some mods use `RenderSystem.getModelViewMatrix()` to
scale, or either of the above two options is false, or Shaders are active, you can set linearSamplingA8Atlas to
true to get better quality
* Align text shadow to pixel grid to improve rendering, change default shadow offset to 0.5
* Further improve text rendering quality at any scale (such as for Mekanism, JourneyMap), you can disable this
by setting computeDeviceFontSize to false
* Rework obfuscated char rendering, improve quality, balance performance and compatibility
* Fix a bug in handling hover and click events with styleAtWidth() (which can cause single char after SPACE char
not clickable)
* Fix font index is not unsigned during layout
* Always create 256x256 font texture for bitmap font when using dedicated texture
* Use 32-bit int for bearing X and bearing Y, allow large metrics for bitmap fonts
#### Core Framework
* Allow to use MENU key to open/close context menu
* Add option to create mutable Bitmap from encoded data
* Add method to explicitly release Shader
* Add method to clear a rectangle of Bitmap to some color
* Add a number of methods to access/convert pixels in bulk
* Add Bitmap.getColor4f() and Bitmap.setColor4f() to access pixel value at high precision
* Add Bitmap.setFormat() and Bitmap.setPremultiplied() to reinterpret existing pixel data with a new type
* Add a large number of pixel formats for Bitmap, and add methods for converting between different pixel formats,
these new formats can also be used to create textures
* Add density for Image, allowing it to be scaled in ImageDrawable/ImageView/ImageSpan
* Replace some copy-on-read list with copy-on-write list
* Disable default scroll bar for AbsListView
* Not force skipping OpenGL error checks, always print GLCaps
* Add fallback method to compute font metrics
* Add method to create Bitmap by wrapping an existing address
* Remove dimension restriction on Bitmap creation
* Temporarily fix lifecycle never reaches RESUME state
* Many other optimizations and internal changes
#### Core Framework - Kotlin Extension
* No changes
#### Markdown Extension
* No changes
#### Arc3D Graphics Engine
* Change Shader and ColorFilter to sealed interface (and RefCounted)
* Add Pixmap.clear() to clear a rectangle of pixels
* Add low precision pixel load function
* Add half float support
* Add 16-bit per channel pixel format conversion
* Optimize pixel ops and loops
* Refactor color types and optimize pixel format conversion
* Rename rowStride to rowBytes, limit rowBytes to Int32.Max
* Add method for access/convert pixels in bulk
* Engine
- Update the initialization of image format capabilities
- Improve caps dump
- Add named methods to Swizzle
* OpenGL backend
- Workaround Intel driver bug that causes rendering broken
- Improve GLCaps initialization
- Some other internal changes
* Shader Compiler
- Add initializer list grammar
- Add vertex_id and instance_id builtin for OpenGL
- Update SPIR-V generator for sampler operations
- Add array stride decoration for all supported types for type matching
- Update descriptor set validation
- Initially add switch statement parsing
- Tons of updates on SPIR-V code generator, SPIR-V generation is now basically functional,
but not yet used in production
- Add struct declaration grammar
- Add scoped block grammar
* Granite Renderer
- Add workaround when there is no clamp_to_border support
- Split up universal blend shader snippet
* Vulkan backend
- Add full method to create VulkanImage
- Refactor some class structures
- Add VulkanImageView
- Add VulkanMemoryAllocator to allocate memory for images/buffers
- Some other internal changes
* Some other internal changes
### Modern UI 3.11.1.5
#### NeoForge Extension 1.21.3
* Add ExtendedGuiGraphics that allows other mods to draw rounded rectangles in vanilla-based GUI
* Vanilla blur now follow vanilla menu blurriness option
* Add emoji shortcode suggestions
* Fix lifecycle bug, improve UI slider
* Fix game loading complete sound "DING" not working
* Fix tooltip title break not showing up on certain GPUs
* Update to Emoji 16.0
* Fix startup crash on dedicated server
* Fix crash in PojavLauncher
* Change the first font loading behavior to ensure bundled fonts are loaded
* Some other fixes, improvements and optimizations
#### Forge Extension 1.21.3
* Equivalent to NeoForge version
#### Fabric Extension 1.21.3
* Functionally equivalent to NeoForge version
#### Modern Text Engine 1.21.3
* Improve experience level rendering
* Optimize white texture and text effect rendering
* No longer register fonts in minecraft namespace
- Use `"font":"modernui:jetbrains-mono-medium"` to change font
* Set max allowed value for minPixelDensityForSDF to 10
* Use point sampling for A8 atlas by default as an optimization
- We prefer computeDeviceFontSize and allowSDFTextIn2D, if some mods use `RenderSystem.getModelViewMatrix()` to
scale, or either of the above two options is false, or Shaders are active, you can set linearSamplingA8Atlas to
true to get better quality
* Align text shadow to pixel grid to improve rendering, change default shadow offset to 0.5
* Further improve text rendering quality at any scale (such as for Mekanism, JourneyMap), you can disable this
by setting computeDeviceFontSize to false
* Rework obfuscated char rendering, improve quality, balance performance and compatibility
* Fix a bug in handling hover and click events with styleAtWidth() (which can cause single char after SPACE char
not clickable)
* Fix font index is not unsigned during layout
* Always create 256x256 font texture for bitmap font when using dedicated texture
* Use 32-bit int for bearing X and bearing Y, allow large metrics for bitmap fonts
#### Core Framework
* Allow to use MENU key to open/close context menu
* Add option to create mutable Bitmap from encoded data
* Add method to explicitly release Shader
* Add method to clear a rectangle of Bitmap to some color
* Add a number of methods to access/convert pixels in bulk
* Add Bitmap.getColor4f() and Bitmap.setColor4f() to access pixel value at high precision
* Add Bitmap.setFormat() and Bitmap.setPremultiplied() to reinterpret existing pixel data with a new type
* Add a large number of pixel formats for Bitmap, and add methods for converting between different pixel formats,
these new formats can also be used to create textures
* Add density for Image, allowing it to be scaled in ImageDrawable/ImageView/ImageSpan
* Replace some copy-on-read list with copy-on-write list
* Disable default scroll bar for AbsListView
* Not force skipping OpenGL error checks, always print GLCaps
* Add fallback method to compute font metrics
* Add method to create Bitmap by wrapping an existing address
* Remove dimension restriction on Bitmap creation
* Temporarily fix lifecycle never reaches RESUME state
* Many other optimizations and internal changes
#### Core Framework - Kotlin Extension
* No changes
#### Markdown Extension
* No changes
#### Arc3D Graphics Engine
* Change Shader and ColorFilter to sealed interface (and RefCounted)
* Add Pixmap.clear() to clear a rectangle of pixels
* Add low precision pixel load function
* Add half float support
* Add 16-bit per channel pixel format conversion
* Optimize pixel ops and loops
* Refactor color types and optimize pixel format conversion
* Rename rowStride to rowBytes, limit rowBytes to Int32.Max
* Add method for access/convert pixels in bulk
* Engine
- Update the initialization of image format capabilities
- Improve caps dump
- Add named methods to Swizzle
* OpenGL backend
- Workaround Intel driver bug that causes rendering broken
- Improve GLCaps initialization
- Some other internal changes
* Shader Compiler
- Add initializer list grammar
- Add vertex_id and instance_id builtin for OpenGL
- Update SPIR-V generator for sampler operations
- Add array stride decoration for all supported types for type matching
- Update descriptor set validation
- Initially add switch statement parsing
- Tons of updates on SPIR-V code generator, SPIR-V generation is now basically functional,
but not yet used in production
- Add struct declaration grammar
- Add scoped block grammar
* Granite Renderer
- Add workaround when there is no clamp_to_border support
- Split up universal blend shader snippet
* Vulkan backend
- Add full method to create VulkanImage
- Refactor some class structures
- Add VulkanImageView
- Add VulkanMemoryAllocator to allocate memory for images/buffers
- Some other internal changes
* Some other internal changes
### Modern UI 3.11.1.5
#### NeoForge Extension 1.21.3
* Add ExtendedGuiGraphics that allows other mods to draw rounded rectangles in vanilla-based GUI
* Vanilla blur now follow vanilla menu blurriness option
* Add emoji shortcode suggestions
* Fix lifecycle bug, improve UI slider
* Fix game loading complete sound "DING" not working
* Fix tooltip title break not showing up on certain GPUs
* Update to Emoji 16.0
* Fix startup crash on dedicated server
* Fix crash in PojavLauncher
* Change the first font loading behavior to ensure bundled fonts are loaded
* Some other fixes, improvements and optimizations
#### Forge Extension 1.21.3
* Equivalent to NeoForge version
#### Fabric Extension 1.21.3
* Functionally equivalent to NeoForge version
#### Modern Text Engine 1.21.3
* Improve experience level rendering
* Optimize white texture and text effect rendering
* No longer register fonts in minecraft namespace
- Use `"font":"modernui:jetbrains-mono-medium"` to change font
* Set max allowed value for minPixelDensityForSDF to 10
* Use point sampling for A8 atlas by default as an optimization
- We prefer computeDeviceFontSize and allowSDFTextIn2D, if some mods use `RenderSystem.getModelViewMatrix()` to
scale, or either of the above two options is false, or Shaders are active, you can set linearSamplingA8Atlas to
true to get better quality
* Align text shadow to pixel grid to improve rendering, change default shadow offset to 0.5
* Further improve text rendering quality at any scale (such as for Mekanism, JourneyMap), you can disable this
by setting computeDeviceFontSize to false
* Rework obfuscated char rendering, improve quality, balance performance and compatibility
* Fix a bug in handling hover and click events with styleAtWidth() (which can cause single char after SPACE char
not clickable)
* Fix font index is not unsigned during layout
* Always create 256x256 font texture for bitmap font when using dedicated texture
* Use 32-bit int for bearing X and bearing Y, allow large metrics for bitmap fonts
#### Core Framework
* Allow to use MENU key to open/close context menu
* Add option to create mutable Bitmap from encoded data
* Add method to explicitly release Shader
* Add method to clear a rectangle of Bitmap to some color
* Add a number of methods to access/convert pixels in bulk
* Add Bitmap.getColor4f() and Bitmap.setColor4f() to access pixel value at high precision
* Add Bitmap.setFormat() and Bitmap.setPremultiplied() to reinterpret existing pixel data with a new type
* Add a large number of pixel formats for Bitmap, and add methods for converting between different pixel formats,
these new formats can also be used to create textures
* Add density for Image, allowing it to be scaled in ImageDrawable/ImageView/ImageSpan
* Replace some copy-on-read list with copy-on-write list
* Disable default scroll bar for AbsListView
* Not force skipping OpenGL error checks, always print GLCaps
* Add fallback method to compute font metrics
* Add method to create Bitmap by wrapping an existing address
* Remove dimension restriction on Bitmap creation
* Temporarily fix lifecycle never reaches RESUME state
* Many other optimizations and internal changes
#### Core Framework - Kotlin Extension
* No changes
#### Markdown Extension
* No changes
#### Arc3D Graphics Engine
* Change Shader and ColorFilter to sealed interface (and RefCounted)
* Add Pixmap.clear() to clear a rectangle of pixels
* Add low precision pixel load function
* Add half float support
* Add 16-bit per channel pixel format conversion
* Optimize pixel ops and loops
* Refactor color types and optimize pixel format conversion
* Rename rowStride to rowBytes, limit rowBytes to Int32.Max
* Add method for access/convert pixels in bulk
* Engine
- Update the initialization of image format capabilities
- Improve caps dump
- Add named methods to Swizzle
* OpenGL backend
- Workaround Intel driver bug that causes rendering broken
- Improve GLCaps initialization
- Some other internal changes
* Shader Compiler
- Add initializer list grammar
- Add vertex_id and instance_id builtin for OpenGL
- Update SPIR-V generator for sampler operations
- Add array stride decoration for all supported types for type matching
- Update descriptor set validation
- Initially add switch statement parsing
- Tons of updates on SPIR-V code generator, SPIR-V generation is now basically functional,
but not yet used in production
- Add struct declaration grammar
- Add scoped block grammar
* Granite Renderer
- Add workaround when there is no clamp_to_border support
- Split up universal blend shader snippet
* Vulkan backend
- Add full method to create VulkanImage
- Refactor some class structures
- Add VulkanImageView
- Add VulkanMemoryAllocator to allocate memory for images/buffers
- Some other internal changes
* Some other internal changes
### Modern UI 3.11.1.4
#### NeoForge Extension 1.21.1
* Add ExtendedGuiGraphics that allows other mods to draw rounded rectangles in vanilla-based GUI
* Vanilla blur now follow vanilla menu blurriness option
* Add emoji shortcode suggestions
* Fix lifecycle bug, improve UI slider
* Fix game loading complete sound "DING" not working
* Fix tooltip title break not showing up on certain GPUs
* Update to Emoji 16.0
* Fix startup crash on dedicated server
* Fix crash in PojavLauncher
* Change the first font loading behavior to ensure bundled fonts are loaded
* Some other fixes, improvements and optimizations
#### Forge Extension 1.21.1
* Equivalent to NeoForge version
#### Fabric Extension 1.21.1
* Functionally equivalent to NeoForge version
#### Modern Text Engine 1.21.1
* Improve experience level rendering
* Optimize white texture and text effect rendering
* No longer register fonts in minecraft namespace
- Use `"font":"modernui:jetbrains-mono-medium"` to change font
* Set max allowed value for minPixelDensityForSDF to 10
* Use point sampling for A8 atlas by default as an optimization
- We prefer computeDeviceFontSize and allowSDFTextIn2D, if some mods use `RenderSystem.getModelViewMatrix()` to
scale, or either of the above two options is false, or Shaders are active, you can set linearSamplingA8Atlas to
true to get better quality
* Align text shadow to pixel grid to improve rendering, change default shadow offset to 0.5
* Further improve text rendering quality at any scale (such as for Mekanism, JourneyMap), you can disable this
by setting computeDeviceFontSize to false
* Rework obfuscated char rendering, improve quality, balance performance and compatibility
* Fix a bug in handling hover and click events with styleAtWidth() (which can cause single char after SPACE char
not clickable)
* Fix font index is not unsigned during layout
* Always create 256x256 font texture for bitmap font when using dedicated texture
* Use 32-bit int for bearing X and bearing Y, allow large metrics for bitmap fonts
#### Core Framework
* Allow to use MENU key to open/close context menu
* Add option to create mutable Bitmap from encoded data
* Add method to explicitly release Shader
* Add method to clear a rectangle of Bitmap to some color
* Add a number of methods to access/convert pixels in bulk
* Add Bitmap.getColor4f() and Bitmap.setColor4f() to access pixel value at high precision
* Add Bitmap.setFormat() and Bitmap.setPremultiplied() to reinterpret existing pixel data with a new type
* Add a large number of pixel formats for Bitmap, and add methods for converting between different pixel formats,
these new formats can also be used to create textures
* Add density for Image, allowing it to be scaled in ImageDrawable/ImageView/ImageSpan
* Replace some copy-on-read list with copy-on-write list
* Disable default scroll bar for AbsListView
* Not force skipping OpenGL error checks, always print GLCaps
* Add fallback method to compute font metrics
* Add method to create Bitmap by wrapping an existing address
* Remove dimension restriction on Bitmap creation
* Temporarily fix lifecycle never reaches RESUME state
* Many other optimizations and internal changes
#### Core Framework - Kotlin Extension
* No changes
#### Markdown Extension
* No changes
#### Arc3D Graphics Engine
* Change Shader and ColorFilter to sealed interface (and RefCounted)
* Add Pixmap.clear() to clear a rectangle of pixels
* Add low precision pixel load function
* Add half float support
* Add 16-bit per channel pixel format conversion
* Optimize pixel ops and loops
* Refactor color types and optimize pixel format conversion
* Rename rowStride to rowBytes, limit rowBytes to Int32.Max
* Add method for access/convert pixels in bulk
* Engine
- Update the initialization of image format capabilities
- Improve caps dump
- Add named methods to Swizzle
* OpenGL backend
- Workaround Intel driver bug that causes rendering broken
- Improve GLCaps initialization
- Some other internal changes
* Shader Compiler
- Add initializer list grammar
- Add vertex_id and instance_id builtin for OpenGL
- Update SPIR-V generator for sampler operations
- Add array stride decoration for all supported types for type matching
- Update descriptor set validation
- Initially add switch statement parsing
- Tons of updates on SPIR-V code generator, SPIR-V generation is now basically functional,
but not yet used in production
- Add struct declaration grammar
- Add scoped block grammar
* Granite Renderer
- Add workaround when there is no clamp_to_border support
- Split up universal blend shader snippet
* Vulkan backend
- Add full method to create VulkanImage
- Refactor some class structures
- Add VulkanImageView
- Add VulkanMemoryAllocator to allocate memory for images/buffers
- Some other internal changes
* Some other internal changes
### Modern UI 3.11.1.4
#### NeoForge Extension 1.21.1
* Add ExtendedGuiGraphics that allows other mods to draw rounded rectangles in vanilla-based GUI
* Vanilla blur now follow vanilla menu blurriness option
* Add emoji shortcode suggestions
* Fix lifecycle bug, improve UI slider
* Fix game loading complete sound "DING" not working
* Fix tooltip title break not showing up on certain GPUs
* Update to Emoji 16.0
* Fix startup crash on dedicated server
* Fix crash in PojavLauncher
* Change the first font loading behavior to ensure bundled fonts are loaded
* Some other fixes, improvements and optimizations
#### Forge Extension 1.21.1
* Equivalent to NeoForge version
#### Fabric Extension 1.21.1
* Functionally equivalent to NeoForge version
#### Modern Text Engine 1.21.1
* Improve experience level rendering
* Optimize white texture and text effect rendering
* No longer register fonts in minecraft namespace
- Use `"font":"modernui:jetbrains-mono-medium"` to change font
* Set max allowed value for minPixelDensityForSDF to 10
* Use point sampling for A8 atlas by default as an optimization
- We prefer computeDeviceFontSize and allowSDFTextIn2D, if some mods use `RenderSystem.getModelViewMatrix()` to
scale, or either of the above two options is false, or Shaders are active, you can set linearSamplingA8Atlas to
true to get better quality
* Align text shadow to pixel grid to improve rendering, change default shadow offset to 0.5
* Further improve text rendering quality at any scale (such as for Mekanism, JourneyMap), you can disable this
by setting computeDeviceFontSize to false
* Rework obfuscated char rendering, improve quality, balance performance and compatibility
* Fix a bug in handling hover and click events with styleAtWidth() (which can cause single char after SPACE char
not clickable)
* Fix font index is not unsigned during layout
* Always create 256x256 font texture for bitmap font when using dedicated texture
* Use 32-bit int for bearing X and bearing Y, allow large metrics for bitmap fonts
#### Core Framework
* Allow to use MENU key to open/close context menu
* Add option to create mutable Bitmap from encoded data
* Add method to explicitly release Shader
* Add method to clear a rectangle of Bitmap to some color
* Add a number of methods to access/convert pixels in bulk
* Add Bitmap.getColor4f() and Bitmap.setColor4f() to access pixel value at high precision
* Add Bitmap.setFormat() and Bitmap.setPremultiplied() to reinterpret existing pixel data with a new type
* Add a large number of pixel formats for Bitmap, and add methods for converting between different pixel formats,
these new formats can also be used to create textures
* Add density for Image, allowing it to be scaled in ImageDrawable/ImageView/ImageSpan
* Replace some copy-on-read list with copy-on-write list
* Disable default scroll bar for AbsListView
* Not force skipping OpenGL error checks, always print GLCaps
* Add fallback method to compute font metrics
* Add method to create Bitmap by wrapping an existing address
* Remove dimension restriction on Bitmap creation
* Temporarily fix lifecycle never reaches RESUME state
* Many other optimizations and internal changes
#### Core Framework - Kotlin Extension
* No changes
#### Markdown Extension
* No changes
#### Arc3D Graphics Engine
* Change Shader and ColorFilter to sealed interface (and RefCounted)
* Add Pixmap.clear() to clear a rectangle of pixels
* Add low precision pixel load function
* Add half float support
* Add 16-bit per channel pixel format conversion
* Optimize pixel ops and loops
* Refactor color types and optimize pixel format conversion
* Rename rowStride to rowBytes, limit rowBytes to Int32.Max
* Add method for access/convert pixels in bulk
* Engine
- Update the initialization of image format capabilities
- Improve caps dump
- Add named methods to Swizzle
* OpenGL backend
- Workaround Intel driver bug that causes rendering broken
- Improve GLCaps initialization
- Some other internal changes
* Shader Compiler
- Add initializer list grammar
- Add vertex_id and instance_id builtin for OpenGL
- Update SPIR-V generator for sampler operations
- Add array stride decoration for all supported types for type matching
- Update descriptor set validation
- Initially add switch statement parsing
- Tons of updates on SPIR-V code generator, SPIR-V generation is now basically functional,
but not yet used in production
- Add struct declaration grammar
- Add scoped block grammar
* Granite Renderer
- Add workaround when there is no clamp_to_border support
- Split up universal blend shader snippet
* Vulkan backend
- Add full method to create VulkanImage
- Refactor some class structures
- Add VulkanImageView
- Add VulkanMemoryAllocator to allocate memory for images/buffers
- Some other internal changes
* Some other internal changes
### Modern UI 3.11.1.4
#### NeoForge Extension 1.21.1
* Add ExtendedGuiGraphics that allows other mods to draw rounded rectangles in vanilla-based GUI
* Vanilla blur now follow vanilla menu blurriness option
* Add emoji shortcode suggestions
* Fix lifecycle bug, improve UI slider
* Fix game loading complete sound "DING" not working
* Fix tooltip title break not showing up on certain GPUs
* Update to Emoji 16.0
* Fix startup crash on dedicated server
* Fix crash in PojavLauncher
* Change the first font loading behavior to ensure bundled fonts are loaded
* Some other fixes, improvements and optimizations
#### Forge Extension 1.21.1
* Equivalent to NeoForge version
#### Fabric Extension 1.21.1
* Functionally equivalent to NeoForge version
#### Modern Text Engine 1.21.1
* Improve experience level rendering
* Optimize white texture and text effect rendering
* No longer register fonts in minecraft namespace
- Use `"font":"modernui:jetbrains-mono-medium"` to change font
* Set max allowed value for minPixelDensityForSDF to 10
* Use point sampling for A8 atlas by default as an optimization
- We prefer computeDeviceFontSize and allowSDFTextIn2D, if some mods use `RenderSystem.getModelViewMatrix()` to
scale, or either of the above two options is false, or Shaders are active, you can set linearSamplingA8Atlas to
true to get better quality
* Align text shadow to pixel grid to improve rendering, change default shadow offset to 0.5
* Further improve text rendering quality at any scale (such as for Mekanism, JourneyMap), you can disable this
by setting computeDeviceFontSize to false
* Rework obfuscated char rendering, improve quality, balance performance and compatibility
* Fix a bug in handling hover and click events with styleAtWidth() (which can cause single char after SPACE char
not clickable)
* Fix font index is not unsigned during layout
* Always create 256x256 font texture for bitmap font when using dedicated texture
* Use 32-bit int for bearing X and bearing Y, allow large metrics for bitmap fonts
#### Core Framework
* Allow to use MENU key to open/close context menu
* Add option to create mutable Bitmap from encoded data
* Add method to explicitly release Shader
* Add method to clear a rectangle of Bitmap to some color
* Add a number of methods to access/convert pixels in bulk
* Add Bitmap.getColor4f() and Bitmap.setColor4f() to access pixel value at high precision
* Add Bitmap.setFormat() and Bitmap.setPremultiplied() to reinterpret existing pixel data with a new type
* Add a large number of pixel formats for Bitmap, and add methods for converting between different pixel formats,
these new formats can also be used to create textures
* Add density for Image, allowing it to be scaled in ImageDrawable/ImageView/ImageSpan
* Replace some copy-on-read list with copy-on-write list
* Disable default scroll bar for AbsListView
* Not force skipping OpenGL error checks, always print GLCaps
* Add fallback method to compute font metrics
* Add method to create Bitmap by wrapping an existing address
* Remove dimension restriction on Bitmap creation
* Temporarily fix lifecycle never reaches RESUME state
* Many other optimizations and internal changes
#### Core Framework - Kotlin Extension
* No changes
#### Markdown Extension
* No changes
#### Arc3D Graphics Engine
* Change Shader and ColorFilter to sealed interface (and RefCounted)
* Add Pixmap.clear() to clear a rectangle of pixels
* Add low precision pixel load function
* Add half float support
* Add 16-bit per channel pixel format conversion
* Optimize pixel ops and loops
* Refactor color types and optimize pixel format conversion
* Rename rowStride to rowBytes, limit rowBytes to Int32.Max
* Add method for access/convert pixels in bulk
* Engine
- Update the initialization of image format capabilities
- Improve caps dump
- Add named methods to Swizzle
* OpenGL backend
- Workaround Intel driver bug that causes rendering broken
- Improve GLCaps initialization
- Some other internal changes
* Shader Compiler
- Add initializer list grammar
- Add vertex_id and instance_id builtin for OpenGL
- Update SPIR-V generator for sampler operations
- Add array stride decoration for all supported types for type matching
- Update descriptor set validation
- Initially add switch statement parsing
- Tons of updates on SPIR-V code generator, SPIR-V generation is now basically functional,
but not yet used in production
- Add struct declaration grammar
- Add scoped block grammar
* Granite Renderer
- Add workaround when there is no clamp_to_border support
- Split up universal blend shader snippet
* Vulkan backend
- Add full method to create VulkanImage
- Refactor some class structures
- Add VulkanImageView
- Add VulkanMemoryAllocator to allocate memory for images/buffers
- Some other internal changes
* Some other internal changes
### Modern UI 3.11.1.3
#### NeoForge Extension 1.20.6
* Add ExtendedGuiGraphics that allows other mods to draw rounded rectangles in vanilla-based GUI
* Vanilla blur now follow vanilla menu blurriness option
* Add emoji shortcode suggestions
* Fix lifecycle bug, improve UI slider
* Fix game loading complete sound "DING" not working
* Fix tooltip title break not showing up on certain GPUs
* Update to Emoji 16.0
* Fix startup crash on dedicated server
* Fix crash in PojavLauncher
* Some other fixes, improvements and optimizations
#### Forge Extension 1.20.6
* Equivalent to NeoForge version
#### Fabric Extension 1.20.6
* Functionally equivalent to NeoForge version
#### Modern Text Engine 1.20.6
* Improve experience level rendering
* Optimize white texture and text effect rendering
* No longer register fonts in minecraft namespace
- Use `"font":"modernui:jetbrains-mono-medium"` to change font
* Set max allowed value for minPixelDensityForSDF to 10
* Use point sampling for A8 atlas by default as an optimization
- We prefer computeDeviceFontSize and allowSDFTextIn2D, if some mods use `RenderSystem.getModelViewMatrix()` to
scale, or either of the above two options is false, or Shaders are active, you can set linearSamplingA8Atlas to
true to get better quality
* Align text shadow to pixel grid to improve rendering, change default shadow offset to 0.5
* Further improve text rendering quality at any scale (such as for Mekanism, JourneyMap), you can disable this
by setting computeDeviceFontSize to false
* Rework obfuscated char rendering, improve quality, balance performance and compatibility
* Fix a bug in handling hover and click events with styleAtWidth() (which can cause single char after SPACE char
not clickable)
* Fix font index is not unsigned during layout
* Always create 256x256 font texture for bitmap font when using dedicated texture
* Use 32-bit int for bearing X and bearing Y, allow large metrics for bitmap fonts
#### Core Framework
* Allow to use MENU key to open/close context menu
* Add option to create mutable Bitmap from encoded data
* Add method to explicitly release Shader
* Add method to clear a rectangle of Bitmap to some color
* Add a number of methods to access/convert pixels in bulk
* Add Bitmap.getColor4f() and Bitmap.setColor4f() to access pixel value at high precision
* Add Bitmap.setFormat() and Bitmap.setPremultiplied() to reinterpret existing pixel data with a new type
* Add a large number of pixel formats for Bitmap, and add methods for converting between different pixel formats,
these new formats can also be used to create textures
* Add density for Image, allowing it to be scaled in ImageDrawable/ImageView/ImageSpan
* Replace some copy-on-read list with copy-on-write list
* Disable default scroll bar for AbsListView
* Not force skipping OpenGL error checks, always print GLCaps
* Add fallback method to compute font metrics
* Add method to create Bitmap by wrapping an existing address
* Remove dimension restriction on Bitmap creation
* Temporarily fix lifecycle never reaches RESUME state
* Many other optimizations and internal changes
#### Core Framework - Kotlin Extension
* No changes
#### Markdown Extension
* No changes
#### Arc3D Graphics Engine
* Change Shader and ColorFilter to sealed interface (and RefCounted)
* Add Pixmap.clear() to clear a rectangle of pixels
* Add low precision pixel load function
* Add half float support
* Add 16-bit per channel pixel format conversion
* Optimize pixel ops and loops
* Refactor color types and optimize pixel format conversion
* Rename rowStride to rowBytes, limit rowBytes to Int32.Max
* Add method for access/convert pixels in bulk
* Engine
- Update the initialization of image format capabilities
- Improve caps dump
- Add named methods to Swizzle
* OpenGL backend
- Workaround Intel driver bug that causes rendering broken
- Improve GLCaps initialization
- Some other internal changes
* Shader Compiler
- Add initializer list grammar
- Add vertex_id and instance_id builtin for OpenGL
- Update SPIR-V generator for sampler operations
- Add array stride decoration for all supported types for type matching
- Update descriptor set validation
- Initially add switch statement parsing
- Tons of updates on SPIR-V code generator, SPIR-V generation is now basically functional,
but not yet used in production
- Add struct declaration grammar
- Add scoped block grammar
* Granite Renderer
- Add workaround when there is no clamp_to_border support
- Split up universal blend shader snippet
* Vulkan backend
- Add full method to create VulkanImage
- Refactor some class structures
- Add VulkanImageView
- Add VulkanMemoryAllocator to allocate memory for images/buffers
- Some other internal changes
* Some other internal changes
### Modern UI 3.11.1.3
#### NeoForge Extension 1.20.6
* Add ExtendedGuiGraphics that allows other mods to draw rounded rectangles in vanilla-based GUI
* Vanilla blur now follow vanilla menu blurriness option
* Add emoji shortcode suggestions
* Fix lifecycle bug, improve UI slider
* Fix game loading complete sound "DING" not working
* Fix tooltip title break not showing up on certain GPUs
* Update to Emoji 16.0
* Fix startup crash on dedicated server
* Fix crash in PojavLauncher
* Some other fixes, improvements and optimizations
#### Forge Extension 1.20.6
* Equivalent to NeoForge version
#### Fabric Extension 1.20.6
* Functionally equivalent to NeoForge version
#### Modern Text Engine 1.20.6
* Improve experience level rendering
* Optimize white texture and text effect rendering
* No longer register fonts in minecraft namespace
- Use `"font":"modernui:jetbrains-mono-medium"` to change font
* Set max allowed value for minPixelDensityForSDF to 10
* Use point sampling for A8 atlas by default as an optimization
- We prefer computeDeviceFontSize and allowSDFTextIn2D, if some mods use `RenderSystem.getModelViewMatrix()` to
scale, or either of the above two options is false, or Shaders are active, you can set linearSamplingA8Atlas to
true to get better quality
* Align text shadow to pixel grid to improve rendering, change default shadow offset to 0.5
* Further improve text rendering quality at any scale (such as for Mekanism, JourneyMap), you can disable this
by setting computeDeviceFontSize to false
* Rework obfuscated char rendering, improve quality, balance performance and compatibility
* Fix a bug in handling hover and click events with styleAtWidth() (which can cause single char after SPACE char
not clickable)
* Fix font index is not unsigned during layout
* Always create 256x256 font texture for bitmap font when using dedicated texture
* Use 32-bit int for bearing X and bearing Y, allow large metrics for bitmap fonts
#### Core Framework
* Allow to use MENU key to open/close context menu
* Add option to create mutable Bitmap from encoded data
* Add method to explicitly release Shader
* Add method to clear a rectangle of Bitmap to some color
* Add a number of methods to access/convert pixels in bulk
* Add Bitmap.getColor4f() and Bitmap.setColor4f() to access pixel value at high precision
* Add Bitmap.setFormat() and Bitmap.setPremultiplied() to reinterpret existing pixel data with a new type
* Add a large number of pixel formats for Bitmap, and add methods for converting between different pixel formats,
these new formats can also be used to create textures
* Add density for Image, allowing it to be scaled in ImageDrawable/ImageView/ImageSpan
* Replace some copy-on-read list with copy-on-write list
* Disable default scroll bar for AbsListView
* Not force skipping OpenGL error checks, always print GLCaps
* Add fallback method to compute font metrics
* Add method to create Bitmap by wrapping an existing address
* Remove dimension restriction on Bitmap creation
* Temporarily fix lifecycle never reaches RESUME state
* Many other optimizations and internal changes
#### Core Framework - Kotlin Extension
* No changes
#### Markdown Extension
* No changes
#### Arc3D Graphics Engine
* Change Shader and ColorFilter to sealed interface (and RefCounted)
* Add Pixmap.clear() to clear a rectangle of pixels
* Add low precision pixel load function
* Add half float support
* Add 16-bit per channel pixel format conversion
* Optimize pixel ops and loops
* Refactor color types and optimize pixel format conversion
* Rename rowStride to rowBytes, limit rowBytes to Int32.Max
* Add method for access/convert pixels in bulk
* Engine
- Update the initialization of image format capabilities
- Improve caps dump
- Add named methods to Swizzle
* OpenGL backend
- Workaround Intel driver bug that causes rendering broken
- Improve GLCaps initialization
- Some other internal changes
* Shader Compiler
- Add initializer list grammar
- Add vertex_id and instance_id builtin for OpenGL
- Update SPIR-V generator for sampler operations
- Add array stride decoration for all supported types for type matching
- Update descriptor set validation
- Initially add switch statement parsing
- Tons of updates on SPIR-V code generator, SPIR-V generation is now basically functional,
but not yet used in production
- Add struct declaration grammar
- Add scoped block grammar
* Granite Renderer
- Add workaround when there is no clamp_to_border support
- Split up universal blend shader snippet
* Vulkan backend
- Add full method to create VulkanImage
- Refactor some class structures
- Add VulkanImageView
- Add VulkanMemoryAllocator to allocate memory for images/buffers
- Some other internal changes
* Some other internal changes
### Modern UI 3.11.1.3
#### NeoForge Extension 1.20.6
* Add ExtendedGuiGraphics that allows other mods to draw rounded rectangles in vanilla-based GUI
* Vanilla blur now follow vanilla menu blurriness option
* Add emoji shortcode suggestions
* Fix lifecycle bug, improve UI slider
* Fix game loading complete sound "DING" not working
* Fix tooltip title break not showing up on certain GPUs
* Update to Emoji 16.0
* Fix startup crash on dedicated server
* Fix crash in PojavLauncher
* Some other fixes, improvements and optimizations
#### Forge Extension 1.20.6
* Equivalent to NeoForge version
#### Fabric Extension 1.20.6
* Functionally equivalent to NeoForge version
#### Modern Text Engine 1.20.6
* Improve experience level rendering
* Optimize white texture and text effect rendering
* No longer register fonts in minecraft namespace
- Use `"font":"modernui:jetbrains-mono-medium"` to change font
* Set max allowed value for minPixelDensityForSDF to 10
* Use point sampling for A8 atlas by default as an optimization
- We prefer computeDeviceFontSize and allowSDFTextIn2D, if some mods use `RenderSystem.getModelViewMatrix()` to
scale, or either of the above two options is false, or Shaders are active, you can set linearSamplingA8Atlas to
true to get better quality
* Align text shadow to pixel grid to improve rendering, change default shadow offset to 0.5
* Further improve text rendering quality at any scale (such as for Mekanism, JourneyMap), you can disable this
by setting computeDeviceFontSize to false
* Rework obfuscated char rendering, improve quality, balance performance and compatibility
* Fix a bug in handling hover and click events with styleAtWidth() (which can cause single char after SPACE char
not clickable)
* Fix font index is not unsigned during layout
* Always create 256x256 font texture for bitmap font when using dedicated texture
* Use 32-bit int for bearing X and bearing Y, allow large metrics for bitmap fonts
#### Core Framework
* Allow to use MENU key to open/close context menu
* Add option to create mutable Bitmap from encoded data
* Add method to explicitly release Shader
* Add method to clear a rectangle of Bitmap to some color
* Add a number of methods to access/convert pixels in bulk
* Add Bitmap.getColor4f() and Bitmap.setColor4f() to access pixel value at high precision
* Add Bitmap.setFormat() and Bitmap.setPremultiplied() to reinterpret existing pixel data with a new type
* Add a large number of pixel formats for Bitmap, and add methods for converting between different pixel formats,
these new formats can also be used to create textures
* Add density for Image, allowing it to be scaled in ImageDrawable/ImageView/ImageSpan
* Replace some copy-on-read list with copy-on-write list
* Disable default scroll bar for AbsListView
* Not force skipping OpenGL error checks, always print GLCaps
* Add fallback method to compute font metrics
* Add method to create Bitmap by wrapping an existing address
* Remove dimension restriction on Bitmap creation
* Temporarily fix lifecycle never reaches RESUME state
* Many other optimizations and internal changes
#### Core Framework - Kotlin Extension
* No changes
#### Markdown Extension
* No changes
#### Arc3D Graphics Engine
* Change Shader and ColorFilter to sealed interface (and RefCounted)
* Add Pixmap.clear() to clear a rectangle of pixels
* Add low precision pixel load function
* Add half float support
* Add 16-bit per channel pixel format conversion
* Optimize pixel ops and loops
* Refactor color types and optimize pixel format conversion
* Rename rowStride to rowBytes, limit rowBytes to Int32.Max
* Add method for access/convert pixels in bulk
* Engine
- Update the initialization of image format capabilities
- Improve caps dump
- Add named methods to Swizzle
* OpenGL backend
- Workaround Intel driver bug that causes rendering broken
- Improve GLCaps initialization
- Some other internal changes
* Shader Compiler
- Add initializer list grammar
- Add vertex_id and instance_id builtin for OpenGL
- Update SPIR-V generator for sampler operations
- Add array stride decoration for all supported types for type matching
- Update descriptor set validation
- Initially add switch statement parsing
- Tons of updates on SPIR-V code generator, SPIR-V generation is now basically functional,
but not yet used in production
- Add struct declaration grammar
- Add scoped block grammar
* Granite Renderer
- Add workaround when there is no clamp_to_border support
- Split up universal blend shader snippet
* Vulkan backend
- Add full method to create VulkanImage
- Refactor some class structures
- Add VulkanImageView
- Add VulkanMemoryAllocator to allocate memory for images/buffers
- Some other internal changes
* Some other internal changes
### Modern UI 3.11.1.2
#### NeoForge Extension 1.20.4
* Add ExtendedGuiGraphics that allows other mods to draw rounded rectangles in vanilla-based GUI
* Add emoji shortcode suggestions
* Fix lifecycle bug, improve UI slider
* Fix game loading complete sound "DING" not working
* Fix tooltip title break not showing up on certain GPUs
* Update to Emoji 16.0
* Fix startup crash on dedicated server
* Fix crash in PojavLauncher
* Some other fixes, improvements and optimizations
#### Forge Extension 1.20.4
* Equivalent to NeoForge version
#### Fabric Extension 1.20.4
* Functionally equivalent to NeoForge version
#### Modern Text Engine 1.20.4
* Improve experience level rendering
* Optimize white texture and text effect rendering
* No longer register fonts in minecraft namespace
- Use `"font":"modernui:jetbrains-mono-medium"` to change font
* Set max allowed value for minPixelDensityForSDF to 10
* Use point sampling for A8 atlas by default as an optimization
- We prefer computeDeviceFontSize and allowSDFTextIn2D, if some mods use `RenderSystem.getModelViewMatrix()` to
scale, or either of the above two options is false, or Shaders are active, you can set linearSamplingA8Atlas to
true to get better quality
* Align text shadow to pixel grid to improve rendering, change default shadow offset to 0.5
* Further improve text rendering quality at any scale (such as for Mekanism, JourneyMap), you can disable this
by setting computeDeviceFontSize to false
* Rework obfuscated char rendering, improve quality, balance performance and compatibility
* Fix a bug in handling hover and click events with styleAtWidth() (which can cause single char after SPACE char
not clickable)
* Fix font index is not unsigned during layout
* Always create 256x256 font texture for bitmap font when using dedicated texture
* Use 32-bit int for bearing X and bearing Y, allow large metrics for bitmap fonts
#### Core Framework
* Allow to use MENU key to open/close context menu
* Add option to create mutable Bitmap from encoded data
* Add method to explicitly release Shader
* Add method to clear a rectangle of Bitmap to some color
* Add a number of methods to access/convert pixels in bulk
* Add Bitmap.getColor4f() and Bitmap.setColor4f() to access pixel value at high precision
* Add Bitmap.setFormat() and Bitmap.setPremultiplied() to reinterpret existing pixel data with a new type
* Add a large number of pixel formats for Bitmap, and add methods for converting between different pixel formats,
these new formats can also be used to create textures
* Add density for Image, allowing it to be scaled in ImageDrawable/ImageView/ImageSpan
* Replace some copy-on-read list with copy-on-write list
* Disable default scroll bar for AbsListView
* Not force skipping OpenGL error checks, always print GLCaps
* Add fallback method to compute font metrics
* Add method to create Bitmap by wrapping an existing address
* Remove dimension restriction on Bitmap creation
* Temporarily fix lifecycle never reaches RESUME state
* Many other optimizations and internal changes
#### Core Framework - Kotlin Extension
* No changes
#### Markdown Extension
* No changes
#### Arc3D Graphics Engine
* Change Shader and ColorFilter to sealed interface (and RefCounted)
* Add Pixmap.clear() to clear a rectangle of pixels
* Add low precision pixel load function
* Add half float support
* Add 16-bit per channel pixel format conversion
* Optimize pixel ops and loops
* Refactor color types and optimize pixel format conversion
* Rename rowStride to rowBytes, limit rowBytes to Int32.Max
* Add method for access/convert pixels in bulk
* Engine
- Update the initialization of image format capabilities
- Improve caps dump
- Add named methods to Swizzle
* OpenGL backend
- Workaround Intel driver bug that causes rendering broken
- Improve GLCaps initialization
- Some other internal changes
* Shader Compiler
- Add initializer list grammar
- Add vertex_id and instance_id builtin for OpenGL
- Update SPIR-V generator for sampler operations
- Add array stride decoration for all supported types for type matching
- Update descriptor set validation
- Initially add switch statement parsing
- Tons of updates on SPIR-V code generator, SPIR-V generation is now basically functional,
but not yet used in production
- Add struct declaration grammar
- Add scoped block grammar
* Granite Renderer
- Add workaround when there is no clamp_to_border support
- Split up universal blend shader snippet
* Vulkan backend
- Add full method to create VulkanImage
- Refactor some class structures
- Add VulkanImageView
- Add VulkanMemoryAllocator to allocate memory for images/buffers
- Some other internal changes
* Some other internal changes
### Modern UI 3.11.1.2
#### NeoForge Extension 1.20.4
* Add ExtendedGuiGraphics that allows other mods to draw rounded rectangles in vanilla-based GUI
* Add emoji shortcode suggestions
* Fix lifecycle bug, improve UI slider
* Fix game loading complete sound "DING" not working
* Fix tooltip title break not showing up on certain GPUs
* Update to Emoji 16.0
* Fix startup crash on dedicated server
* Fix crash in PojavLauncher
* Some other fixes, improvements and optimizations
#### Forge Extension 1.20.4
* Equivalent to NeoForge version
#### Fabric Extension 1.20.4
* Functionally equivalent to NeoForge version
#### Modern Text Engine 1.20.4
* Improve experience level rendering
* Optimize white texture and text effect rendering
* No longer register fonts in minecraft namespace
- Use `"font":"modernui:jetbrains-mono-medium"` to change font
* Set max allowed value for minPixelDensityForSDF to 10
* Use point sampling for A8 atlas by default as an optimization
- We prefer computeDeviceFontSize and allowSDFTextIn2D, if some mods use `RenderSystem.getModelViewMatrix()` to
scale, or either of the above two options is false, or Shaders are active, you can set linearSamplingA8Atlas to
true to get better quality
* Align text shadow to pixel grid to improve rendering, change default shadow offset to 0.5
* Further improve text rendering quality at any scale (such as for Mekanism, JourneyMap), you can disable this
by setting computeDeviceFontSize to false
* Rework obfuscated char rendering, improve quality, balance performance and compatibility
* Fix a bug in handling hover and click events with styleAtWidth() (which can cause single char after SPACE char
not clickable)
* Fix font index is not unsigned during layout
* Always create 256x256 font texture for bitmap font when using dedicated texture
* Use 32-bit int for bearing X and bearing Y, allow large metrics for bitmap fonts
#### Core Framework
* Allow to use MENU key to open/close context menu
* Add option to create mutable Bitmap from encoded data
* Add method to explicitly release Shader
* Add method to clear a rectangle of Bitmap to some color
* Add a number of methods to access/convert pixels in bulk
* Add Bitmap.getColor4f() and Bitmap.setColor4f() to access pixel value at high precision
* Add Bitmap.setFormat() and Bitmap.setPremultiplied() to reinterpret existing pixel data with a new type
* Add a large number of pixel formats for Bitmap, and add methods for converting between different pixel formats,
these new formats can also be used to create textures
* Add density for Image, allowing it to be scaled in ImageDrawable/ImageView/ImageSpan
* Replace some copy-on-read list with copy-on-write list
* Disable default scroll bar for AbsListView
* Not force skipping OpenGL error checks, always print GLCaps
* Add fallback method to compute font metrics
* Add method to create Bitmap by wrapping an existing address
* Remove dimension restriction on Bitmap creation
* Temporarily fix lifecycle never reaches RESUME state
* Many other optimizations and internal changes
#### Core Framework - Kotlin Extension
* No changes
#### Markdown Extension
* No changes
#### Arc3D Graphics Engine
* Change Shader and ColorFilter to sealed interface (and RefCounted)
* Add Pixmap.clear() to clear a rectangle of pixels
* Add low precision pixel load function
* Add half float support
* Add 16-bit per channel pixel format conversion
* Optimize pixel ops and loops
* Refactor color types and optimize pixel format conversion
* Rename rowStride to rowBytes, limit rowBytes to Int32.Max
* Add method for access/convert pixels in bulk
* Engine
- Update the initialization of image format capabilities
- Improve caps dump
- Add named methods to Swizzle
* OpenGL backend
- Workaround Intel driver bug that causes rendering broken
- Improve GLCaps initialization
- Some other internal changes
* Shader Compiler
- Add initializer list grammar
- Add vertex_id and instance_id builtin for OpenGL
- Update SPIR-V generator for sampler operations
- Add array stride decoration for all supported types for type matching
- Update descriptor set validation
- Initially add switch statement parsing
- Tons of updates on SPIR-V code generator, SPIR-V generation is now basically functional,
but not yet used in production
- Add struct declaration grammar
- Add scoped block grammar
* Granite Renderer
- Add workaround when there is no clamp_to_border support
- Split up universal blend shader snippet
* Vulkan backend
- Add full method to create VulkanImage
- Refactor some class structures
- Add VulkanImageView
- Add VulkanMemoryAllocator to allocate memory for images/buffers
- Some other internal changes
* Some other internal changes
### Modern UI 3.11.1.2
#### NeoForge Extension 1.20.4
* Add ExtendedGuiGraphics that allows other mods to draw rounded rectangles in vanilla-based GUI
* Add emoji shortcode suggestions
* Fix lifecycle bug, improve UI slider
* Fix game loading complete sound "DING" not working
* Fix tooltip title break not showing up on certain GPUs
* Update to Emoji 16.0
* Fix startup crash on dedicated server
* Fix crash in PojavLauncher
* Some other fixes, improvements and optimizations
#### Forge Extension 1.20.4
* Equivalent to NeoForge version
#### Fabric Extension 1.20.4
* Functionally equivalent to NeoForge version
#### Modern Text Engine 1.20.4
* Improve experience level rendering
* Optimize white texture and text effect rendering
* No longer register fonts in minecraft namespace
- Use `"font":"modernui:jetbrains-mono-medium"` to change font
* Set max allowed value for minPixelDensityForSDF to 10
* Use point sampling for A8 atlas by default as an optimization
- We prefer computeDeviceFontSize and allowSDFTextIn2D, if some mods use `RenderSystem.getModelViewMatrix()` to
scale, or either of the above two options is false, or Shaders are active, you can set linearSamplingA8Atlas to
true to get better quality
* Align text shadow to pixel grid to improve rendering, change default shadow offset to 0.5
* Further improve text rendering quality at any scale (such as for Mekanism, JourneyMap), you can disable this
by setting computeDeviceFontSize to false
* Rework obfuscated char rendering, improve quality, balance performance and compatibility
* Fix a bug in handling hover and click events with styleAtWidth() (which can cause single char after SPACE char
not clickable)
* Fix font index is not unsigned during layout
* Always create 256x256 font texture for bitmap font when using dedicated texture
* Use 32-bit int for bearing X and bearing Y, allow large metrics for bitmap fonts
#### Core Framework
* Allow to use MENU key to open/close context menu
* Add option to create mutable Bitmap from encoded data
* Add method to explicitly release Shader
* Add method to clear a rectangle of Bitmap to some color
* Add a number of methods to access/convert pixels in bulk
* Add Bitmap.getColor4f() and Bitmap.setColor4f() to access pixel value at high precision
* Add Bitmap.setFormat() and Bitmap.setPremultiplied() to reinterpret existing pixel data with a new type
* Add a large number of pixel formats for Bitmap, and add methods for converting between different pixel formats,
these new formats can also be used to create textures
* Add density for Image, allowing it to be scaled in ImageDrawable/ImageView/ImageSpan
* Replace some copy-on-read list with copy-on-write list
* Disable default scroll bar for AbsListView
* Not force skipping OpenGL error checks, always print GLCaps
* Add fallback method to compute font metrics
* Add method to create Bitmap by wrapping an existing address
* Remove dimension restriction on Bitmap creation
* Temporarily fix lifecycle never reaches RESUME state
* Many other optimizations and internal changes
#### Core Framework - Kotlin Extension
* No changes
#### Markdown Extension
* No changes
#### Arc3D Graphics Engine
* Change Shader and ColorFilter to sealed interface (and RefCounted)
* Add Pixmap.clear() to clear a rectangle of pixels
* Add low precision pixel load function
* Add half float support
* Add 16-bit per channel pixel format conversion
* Optimize pixel ops and loops
* Refactor color types and optimize pixel format conversion
* Rename rowStride to rowBytes, limit rowBytes to Int32.Max
* Add method for access/convert pixels in bulk
* Engine
- Update the initialization of image format capabilities
- Improve caps dump
- Add named methods to Swizzle
* OpenGL backend
- Workaround Intel driver bug that causes rendering broken
- Improve GLCaps initialization
- Some other internal changes
* Shader Compiler
- Add initializer list grammar
- Add vertex_id and instance_id builtin for OpenGL
- Update SPIR-V generator for sampler operations
- Add array stride decoration for all supported types for type matching
- Update descriptor set validation
- Initially add switch statement parsing
- Tons of updates on SPIR-V code generator, SPIR-V generation is now basically functional,
but not yet used in production
- Add struct declaration grammar
- Add scoped block grammar
* Granite Renderer
- Add workaround when there is no clamp_to_border support
- Split up universal blend shader snippet
* Vulkan backend
- Add full method to create VulkanImage
- Refactor some class structures
- Add VulkanImageView
- Add VulkanMemoryAllocator to allocate memory for images/buffers
- Some other internal changes
* Some other internal changes
### Modern UI 3.11.1.1
#### Forge Extension 1.20.1 / NeoForge Extension 1.20.1
* Add ExtendedGuiGraphics that allows other mods to draw rounded rectangles in vanilla-based GUI
* Add emoji shortcode suggestions
* Fix lifecycle bug, improve UI slider
* Fix tooltip title break not showing up on certain GPUs
* Update to Emoji 16.0
* Fix startup crash on dedicated server
* Fix crash in PojavLauncher
* Some other fixes, improvements and optimizations
#### Fabric Extension 1.20.1
* Fix game loading complete sound "DING" not working in some cases
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.20.1
* Improve experience level rendering
* Optimize white texture and text effect rendering
* No longer register fonts in minecraft namespace
- Use `"font":"modernui:jetbrains-mono-medium"` to change font
* Set max allowed value for minPixelDensityForSDF to 10
* Use point sampling for A8 atlas by default as an optimization
- We prefer computeDeviceFontSize and allowSDFTextIn2D, if some mods use `RenderSystem.getModelViewMatrix()` to
scale, or either of the above two options is false, or Shaders are active, you can set linearSamplingA8Atlas to
true to get better quality
* Align text shadow to pixel grid to improve rendering, change default shadow offset to 0.5
* Further improve text rendering quality at any scale (such as for Mekanism, JourneyMap), you can disable this
by setting computeDeviceFontSize to false
* Rework obfuscated char rendering, improve quality, balance performance and compatibility
* Fix a bug in handling hover and click events with styleAtWidth() (which can cause single char after SPACE char
not clickable)
* Fix font index is not unsigned during layout
* Always create 256x256 font texture for bitmap font when using dedicated texture
* Use 32-bit int for bearing X and bearing Y, allow large metrics for bitmap fonts
#### Core Framework
* Allow to use MENU key to open/close context menu
* Add option to create mutable Bitmap from encoded data
* Add method to explicitly release Shader
* Add method to clear a rectangle of Bitmap to some color
* Add a number of methods to access/convert pixels in bulk
* Add Bitmap.getColor4f() and Bitmap.setColor4f() to access pixel value at high precision
* Add Bitmap.setFormat() and Bitmap.setPremultiplied() to reinterpret existing pixel data with a new type
* Add a large number of pixel formats for Bitmap, and add methods for converting between different pixel formats,
these new formats can also be used to create textures
* Add density for Image, allowing it to be scaled in ImageDrawable/ImageView/ImageSpan
* Replace some copy-on-read list with copy-on-write list
* Disable default scroll bar for AbsListView
* Not force skipping OpenGL error checks, always print GLCaps
* Add fallback method to compute font metrics
* Add method to create Bitmap by wrapping an existing address
* Remove dimension restriction on Bitmap creation
* Temporarily fix lifecycle never reaches RESUME state
* Many other optimizations and internal changes
#### Core Framework - Kotlin Extension
* No changes
#### Markdown Extension
* No changes
#### Arc3D Graphics Engine
* Change Shader and ColorFilter to sealed interface (and RefCounted)
* Add Pixmap.clear() to clear a rectangle of pixels
* Add low precision pixel load function
* Add half float support
* Add 16-bit per channel pixel format conversion
* Optimize pixel ops and loops
* Refactor color types and optimize pixel format conversion
* Rename rowStride to rowBytes, limit rowBytes to Int32.Max
* Add method for access/convert pixels in bulk
* Engine
- Update the initialization of image format capabilities
- Improve caps dump
- Add named methods to Swizzle
* OpenGL backend
- Workaround Intel driver bug that causes rendering broken
- Improve GLCaps initialization
- Some other internal changes
* Shader Compiler
- Add initializer list grammar
- Add vertex_id and instance_id builtin for OpenGL
- Update SPIR-V generator for sampler operations
- Add array stride decoration for all supported types for type matching
- Update descriptor set validation
- Initially add switch statement parsing
- Tons of updates on SPIR-V code generator, SPIR-V generation is now basically functional,
but not yet used in production
- Add struct declaration grammar
- Add scoped block grammar
* Granite Renderer
- Add workaround when there is no clamp_to_border support
- Split up universal blend shader snippet
* Vulkan backend
- Add full method to create VulkanImage
- Refactor some class structures
- Add VulkanImageView
- Add VulkanMemoryAllocator to allocate memory for images/buffers
- Some other internal changes
* Some other internal changes
### Modern UI 3.11.1.1
#### Forge Extension 1.20.1 / NeoForge Extension 1.20.1
* Add ExtendedGuiGraphics that allows other mods to draw rounded rectangles in vanilla-based GUI
* Add emoji shortcode suggestions
* Fix lifecycle bug, improve UI slider
* Fix tooltip title break not showing up on certain GPUs
* Update to Emoji 16.0
* Fix startup crash on dedicated server
* Fix crash in PojavLauncher
* Some other fixes, improvements and optimizations
#### Fabric Extension 1.20.1
* Fix game loading complete sound "DING" not working in some cases
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.20.1
* Improve experience level rendering
* Optimize white texture and text effect rendering
* No longer register fonts in minecraft namespace
- Use `"font":"modernui:jetbrains-mono-medium"` to change font
* Set max allowed value for minPixelDensityForSDF to 10
* Use point sampling for A8 atlas by default as an optimization
- We prefer computeDeviceFontSize and allowSDFTextIn2D, if some mods use `RenderSystem.getModelViewMatrix()` to
scale, or either of the above two options is false, or Shaders are active, you can set linearSamplingA8Atlas to
true to get better quality
* Align text shadow to pixel grid to improve rendering, change default shadow offset to 0.5
* Further improve text rendering quality at any scale (such as for Mekanism, JourneyMap), you can disable this
by setting computeDeviceFontSize to false
* Rework obfuscated char rendering, improve quality, balance performance and compatibility
* Fix a bug in handling hover and click events with styleAtWidth() (which can cause single char after SPACE char
not clickable)
* Fix font index is not unsigned during layout
* Always create 256x256 font texture for bitmap font when using dedicated texture
* Use 32-bit int for bearing X and bearing Y, allow large metrics for bitmap fonts
#### Core Framework
* Allow to use MENU key to open/close context menu
* Add option to create mutable Bitmap from encoded data
* Add method to explicitly release Shader
* Add method to clear a rectangle of Bitmap to some color
* Add a number of methods to access/convert pixels in bulk
* Add Bitmap.getColor4f() and Bitmap.setColor4f() to access pixel value at high precision
* Add Bitmap.setFormat() and Bitmap.setPremultiplied() to reinterpret existing pixel data with a new type
* Add a large number of pixel formats for Bitmap, and add methods for converting between different pixel formats,
these new formats can also be used to create textures
* Add density for Image, allowing it to be scaled in ImageDrawable/ImageView/ImageSpan
* Replace some copy-on-read list with copy-on-write list
* Disable default scroll bar for AbsListView
* Not force skipping OpenGL error checks, always print GLCaps
* Add fallback method to compute font metrics
* Add method to create Bitmap by wrapping an existing address
* Remove dimension restriction on Bitmap creation
* Temporarily fix lifecycle never reaches RESUME state
* Many other optimizations and internal changes
#### Core Framework - Kotlin Extension
* No changes
#### Markdown Extension
* No changes
#### Arc3D Graphics Engine
* Change Shader and ColorFilter to sealed interface (and RefCounted)
* Add Pixmap.clear() to clear a rectangle of pixels
* Add low precision pixel load function
* Add half float support
* Add 16-bit per channel pixel format conversion
* Optimize pixel ops and loops
* Refactor color types and optimize pixel format conversion
* Rename rowStride to rowBytes, limit rowBytes to Int32.Max
* Add method for access/convert pixels in bulk
* Engine
- Update the initialization of image format capabilities
- Improve caps dump
- Add named methods to Swizzle
* OpenGL backend
- Workaround Intel driver bug that causes rendering broken
- Improve GLCaps initialization
- Some other internal changes
* Shader Compiler
- Add initializer list grammar
- Add vertex_id and instance_id builtin for OpenGL
- Update SPIR-V generator for sampler operations
- Add array stride decoration for all supported types for type matching
- Update descriptor set validation
- Initially add switch statement parsing
- Tons of updates on SPIR-V code generator, SPIR-V generation is now basically functional,
but not yet used in production
- Add struct declaration grammar
- Add scoped block grammar
* Granite Renderer
- Add workaround when there is no clamp_to_border support
- Split up universal blend shader snippet
* Vulkan backend
- Add full method to create VulkanImage
- Refactor some class structures
- Add VulkanImageView
- Add VulkanMemoryAllocator to allocate memory for images/buffers
- Some other internal changes
* Some other internal changes
### Modern UI 3.11.0.4
#### NeoForge Extension 1.21.1
* Change default typeface/font loading behavior
* Add option to replace vanilla blur effect with Modern UI for optimization
* Allow setting blur radius to 0 to disable blur
* Add MinecraftSurfaceView to handle raw rendering calls
* Ensure that all (native/GPU) resources are closed when the game exits
* Slightly improve the Center UI
* Fix a random crash when opening/closing UI frequently
* Rework tooltip rendering
- Add white noise to shadow
- Add dithering to gradient colors
- Use L1 norm instead of L2 norm for coverage antialiasing
- Change shadow approximation method
- Change default border radius and shadow alpha
- Add new conditions for adding the extra space below tooltip title line
- If the first three lines of the tooltip have different styles, we consider the first line as the title
- Reduce the saturation of default tooltip colors
* Allow using arrow keys to manually scroll the tooltip
* Add small epsilon to text Z value for tooltip rendering to work around FP errors on some GPUs
* Optimize blur effect
- Use texelFetch instead of texture
- Remove the additional blit pass and render target because we work around a Minecraft bug
- Try to cache the shader program and temporary render target for blurring, and handle errors
- Apply blur effect to the screen background instead of the world, just like Minecraft 1.21
* Migrate to new rendering pipeline
#### Forge Extension 1.21.1
* Equivalent to NeoForge version
#### Fabric Extension 1.21.1
* Functionally equivalent to NeoForge version
#### Modern Text Engine 1.21.1
* Add compatibility for bitmap fonts with custom text shader
* Enable linear metrics and disable font hinting by default
* Add config to change the minimum pixel density for SDF text
* Fix some possible bugs on text rendering
* Optimize text rendering
- Add texture cleanup to FontResourceManager
- Simplify text layout rendering code
- Use Math.round for aligning pixels
- Fix glyph info for FontSet compatibility
* Rework and optimize bitmap font rendering
- Try to stitch bitmap font into atlas
- Try to discard bitmap fonts if they have negative metrics, transparent pixels, or huge metrics
- Saturate glyph metrics for bitmap font
- Fix hashCode and equals for correct de-duplication
* Adjust lod bias for normal text shader
* Adjust bitmap font to match vanilla behavior
- Adjust glyph advance calculation
* Adjust Unicode font loading behavior
- Any reference to vanilla Unicode font and UNIHEX font will redirect to current ModernUI default typeface list
instead of system fonts, except for Minecraft default font set
* Fix text layout bug when finding style transitions
* Allow caching the missing glyph to atlas
* Adopt full text rendering technology from core framework
* Fix line breaker that may output no lines and keep consistency with vanilla behavior
- This fix a bug with IBE Editor
* Fix text strike cache invalidation for FontSet compatibility
- This fix a bug with Create
* Add text layout dump in advanced options
* Add a command for debugging line breaker
* Add methods for debugging text engine
* Work around AMD driver bug before GCN 1
* Change the initial size of A8 font atlas to 2048x2048
* Fix crash when compacting font atlas
#### Core Framework
* Enable linear text by default, increase layout cache limit
* Delete render thread executor
* Delete old text rendering code
* Add GradientDrawable that draw shapes with gradient colors
* Update/fix ShapeDrawable with latest rendering pipeline
* Add set/get ColorFilter to Drawable and ImageView Add ImageView.setImageTintBlendMode
* Rework ImageDrawable.setSrcRect() method
* Update ImageDrawable with antialias, dither, filter, and tile modes
* Add setter/getter to change blend mode for edge effect
* Change default blend mode for EdgeEffect from SRC_OVER to SRC_ATOP
* Fix Matrix.mapRect()
* Fix EdgeEffect centerX
* Improve text rendering
* Add AngularGradient API and implementation
* Add RadialGradient API and implementation
* Add LinearGradient API and implementation
* Add GradientShader API and implementation
* Add new draw methods to Canvas class
* Add BlendModeColorFilter and make it work finally, default blend mode for ImageDrawable is SRC_IN
* Add ColorFilter class that can be installed on Paint
* Refactor Image class and fix Image.close() issue
* Refactor Paint class
* Add ImageShader class
* Add Shader class that can be installed on Paint
* Add TextView.setTextSize() that specifies a unit, default is sp
* Full migration to the new rendering pipeline, Arc3D Granite Renderer; delete old GLSurfaceCanvas
* Avoid re-layout on window minimized, since framebuffer is destroyed and size is 0
* Deprecate Canvas.saveLayer() for future layer compositor and render tree
#### Core Framework - Kotlin Extension
* No changes
#### Markdown Extension
* No changes
#### Arc3D Graphics Engine
* Remove old usage of Image.getSurfaceFlags
* Add Image.getUniqueID() and static methods to create raster images
* Add utility NoDrawCanvas NWayCanvas and PaintFilterCanvas
* Fix Matrix.mapRect() is not correct
* Fix compiler error
* Optimize text ops if subRunToDevice is translation-only and pipeline does not require local coords trivially
* Optimize matrix computation for text ops
* Replace Matrix4 in rendering code with Matrix
* Make Matrix4() construct an identity matrix, and Matrix4.identity() return a read-only identity matrix
* Fix TextBlobBuilder offsets not reset after build
* Add RoundRect flatten methods
* Improve NoPixelsDevice clip tracking, remove ConservativeClip
* Add DrawAtlas.purge() to free unused pages
* Add implementation for gradients in other interpolation color spaces and for all hue interpolation methods
* Allow DrawAtlas to perform an immediate compact
* Rename some classes and methods
* Change the default uniform buffer block size to 32KB
* Fix color array copy in Vertices::makeCopy
* Fix persistent mapping check in GLBuffer
* Temporarily enable RGB texture in OpenGL
* Try to share vertex array objects in OpenGL backend
* Expose resource cleanup API, also cleanup framebuffer cache and strike cache
* Review ResourceCache, fix some legacy issues
* Add support for alpha-only images, add missing Shaders shader implementation
* Purge framebuffers immediately after one attachment was destroyed
* Complete the compatibility with OpenGL 3.3 and OpenGL ES 3.0
* Improve texture and renderbuffer creation
* Deprecate old Device methods
* Fix OpenGL 3.3 and GLSL 330 compatibility
* Finalize BoundsManager, add samples
* Add plus_clamped, minus, and minus_clamped blend info
* Remove 01 coverage in non-aa case
* Add blend equation in GL backend
* Mark old code as deprecated
* Implement basic functionality for final blender, enable dual source blending
* Fully implement BakedTextBlob and TextBlobCache for text rendering
* Fix blend shader doesn't compile
* Add TextBlob as an immutable container for glyph rendering
* Rework FramebufferDesc, add FramebufferCache to manage framebuffers
* Basically implement texture copy task, implement Surface.onNewImageSnapshot()
* Add factory method to create Surface
* Implement Device management
* Invalidate atlases if RC.snap() failed
* Fix several threading issues for OpenGL backend
* Handle ColorFilter properly
* Add BlendModeShader
* Fix color space transformation on paint's solid color
* Add primitive color blending and color space transform
* Add blending with shader and paint's alpha
* Fix color space transformation on BlendModeColorFilter
* Add implementation of BlendModeShader and BlendModeColorFilter
* Remove Geometry interface
* Add Vertices class and Vertices step to drawVertices
* Add shader implementation for 42 blend modes
* Fix arg name for uniforms that start with no mangle prefix
* Add StaticBufferManager and Buffer-to-Buffer copy task
* Fix ImageUploadTask bug
* Implement remaining important Canvas methods
* Add and implement new Canvas methods in Device
* Fix depth is perspective-correct; the depth should be preserved, then multiply it by w.
* Fix bugs on arc shader with square end
* Finish methods to create and draw GlyphRuns
* Add method to set Matrix elements
* Fix Matrix4.hashCode() for negative zero
* Add Geometry.getBounds() to compute bounds
* Improve ClipStack to compute several bounds
* Fix stroke inflation radius computation for inner and outer stroke
* Optimize draw when it does not depend on dst
* Fix several issues on Device
* Implement the creation of AtlasSubRuns
* Add method to compute res scales if matrix has perspective
* Fix AnalyticSimpleBoxStep instance data type
* Add method to draw pie and chord, optimize shaders
* Add rendering with three cap types of stroke arcs initially
* Implement Atlas text op at low level, improve solid color fast path, trying to handle primitive color
* Fix ScalerContext_JDK does not return a reliable glyph bounds
* Fix DrawAtlas assertion and GlyphAtlasManager row stride
* Fix Strike and ScalerContext bugs, remove stroke cap in StrikeDesc
* Improve finite check and non-invertible matrix
* Add RendererProvider to manage GeometryRenderers
* Finish implementation of atlas management for draw ops and glyph atlas
* Calculate the Path byte size when generating Glyph in Strike
* Implement Strike, StrikeCache, and ScalerContext basically
* Add Paint.setPathEffect(), add missing javadoc in Font
* Add Path.transform(), add PathIterator.getFillRule()
* Add GPU dithering implementation (no texture lookup)
* Fix GLCaps.FormatInfo for RGB565
* Update Paint and related classes
* Make Blender and ColorFilter strictly ref-counted
* Add Shader.isConstant()
* Fix Canvas.drawCircle()
* Add Paint.setColor4f()
* Fix Paint.setStrokeWidth() and Paint.setStrokeMiter() for NaN values
* Remove Paint's SmoothWidth, MaskFilter and ImageFilter
* Add PathEffect skeleton class
* Fix several hashCode implementation for negative zeros
* Update Paint.nothingToDraw() for more blend modes
* Add more methods to RoundRect
* Update Surface, Canvas, and related classes
* Add Stroke, PathIterable, update PathStroker
* Optimize shaders
* Use short-circuit for transfer function
* Use texelFetch for cubic shader, remove invImageSize uniform
* Add perspective correction for local matrix shader
* Extract color space transform from image shaders
* Ensure subset sampling does not use mipmaps
* Implement bicubic and strict subset sampling
* Change AnalyticSimpleBoxStep to use L1 norm
* Fix bug on GLImageDesc.equals()
* Fix bug on uniform block layout
* Change Paint constants and SamplingOptions, adding classes for text rendering
* Done depth stencil work, fix several bugs
* Add flipY and unorm clamp for PixelUtils
* Implement LinearGradient, RadialGradient, AngularGradient
* Fix bugs on ImageShader.makeSubset()
* Fix bugs on premul & unpremul in some classes
* Improve ColorSpace transform, add PixelUtils.convertPixels()
* Add new ColorSpace transform shader
* Fix GLSampler TEXTURE_WRAP_R is not set, add validation for SamplerDesc
* Fix Matrix4.invert, add Matrix.toMatrix4, fix UniformDataGatherer for mat3
* Make Paint, PaintParams, and Draw classes closeable
* Fix TextureTracker; rename gradient shaders
* Optimize box shader
* Accumulated updates on fragment effects and shading pipeline
* Implement simple pixel upload using image-to-image copy
* Add new Shader and ColorFilter classes
* Rename PixelMap to Pixmap, PixelRef to Pixels
* Switch slow JNI to PixelUtils.copyImage() for array to off-heap copy
* Remove the offset parameter of Buffer.unmap()
* Finish AnalyticSimpleBoxStep
* Allow implicit conversion between numerics
* Add DepthStencilSettings and BoundsManager, limit the number of geometry steps
* Optimize vertex writer and uniform writer, optimize uniform data deduplication
* Basically complete the Granite Renderer
* Add geometry projection, solid color simplification
* Finish RenderPassTask execution Fix scissor origin, initial scissor setup
* Complete DrawPass's texture sampler binding
* Add TextureDataGatherer, texture sampler binding and tracker
* Add UniformDataGatherer and UniformDataCache
* Fix Matrix4.store()
* Add framebuffer creation and some tests
* Some work on new PipelineBuilder
* Update Buffer, GLBuffer, persistent mapping and so on
* Accumulative updates for new renderer
* Add method for updating clip draws
* Update ClipStack
* Improve vertex specification and buffer binding
* Rename the project from 'Arc 3D' to 'Arc3D'
* Commit all accumulative updates
* Change BlendMode.apply() to static methods
* Accumulative updates for the new pipeline
* Attempt to refactor pipeline
* Add more classes for new pipeline
* Add frexp & ldexp impl
* Some attempts on pipeline
* Refactor GPU Image, RenderTarget, SurfaceProxy classes; remove Texture
* Add Image and Framebuffer creation, add reusable framebuffers
* Refactor GpuResource class hierarchy
* Support GL_CONTEXT_LOST
* Tons of work on Engine and OpenGL backend, not listed
* Add pre-defined extensions to compile options
* A lot of work on abstraction between GL3 and GLES3
* Initially add GLInterface for both OpenGL & OpenGL ES support
* Add std140/std430 layout qualifiers, add include directive parsing
* Abandon usage of GLSL ARB extensions that core in later versions
* Fix GLCaps crash for some capabilities
* Fix some bugs in preprocessing
* Other improvements
* Add new preprocessing methods, allow sub-range source
* Add StringLiteral grammar, fix Whitespace grammar
* Add FatalError to terminate compiler
* Add identifier name length check (1024 at most)
* Add benchmark between Arc3D and shaderc (glslang)
* Update Lexer
* Add directive grammar
* Add 'using' grammar for type aliases
* Add newline token, fix block comment grammar
### Modern UI 3.11.0.4
#### NeoForge Extension 1.21.1
* Change default typeface/font loading behavior
* Add option to replace vanilla blur effect with Modern UI for optimization
* Allow setting blur radius to 0 to disable blur
* Add MinecraftSurfaceView to handle raw rendering calls
* Ensure that all (native/GPU) resources are closed when the game exits
* Slightly improve the Center UI
* Fix a random crash when opening/closing UI frequently
* Rework tooltip rendering
- Add white noise to shadow
- Add dithering to gradient colors
- Use L1 norm instead of L2 norm for coverage antialiasing
- Change shadow approximation method
- Change default border radius and shadow alpha
- Add new conditions for adding the extra space below tooltip title line
- If the first three lines of the tooltip have different styles, we consider the first line as the title
- Reduce the saturation of default tooltip colors
* Allow using arrow keys to manually scroll the tooltip
* Add small epsilon to text Z value for tooltip rendering to work around FP errors on some GPUs
* Optimize blur effect
- Use texelFetch instead of texture
- Remove the additional blit pass and render target because we work around a Minecraft bug
- Try to cache the shader program and temporary render target for blurring, and handle errors
- Apply blur effect to the screen background instead of the world, just like Minecraft 1.21
* Migrate to new rendering pipeline
#### Forge Extension 1.21.1
* Equivalent to NeoForge version
#### Fabric Extension 1.21.1
* Functionally equivalent to NeoForge version
#### Modern Text Engine 1.21.1
* Add compatibility for bitmap fonts with custom text shader
* Enable linear metrics and disable font hinting by default
* Add config to change the minimum pixel density for SDF text
* Fix some possible bugs on text rendering
* Optimize text rendering
- Add texture cleanup to FontResourceManager
- Simplify text layout rendering code
- Use Math.round for aligning pixels
- Fix glyph info for FontSet compatibility
* Rework and optimize bitmap font rendering
- Try to stitch bitmap font into atlas
- Try to discard bitmap fonts if they have negative metrics, transparent pixels, or huge metrics
- Saturate glyph metrics for bitmap font
- Fix hashCode and equals for correct de-duplication
* Adjust lod bias for normal text shader
* Adjust bitmap font to match vanilla behavior
- Adjust glyph advance calculation
* Adjust Unicode font loading behavior
- Any reference to vanilla Unicode font and UNIHEX font will redirect to current ModernUI default typeface list
instead of system fonts, except for Minecraft default font set
* Fix text layout bug when finding style transitions
* Allow caching the missing glyph to atlas
* Adopt full text rendering technology from core framework
* Fix line breaker that may output no lines and keep consistency with vanilla behavior
- This fix a bug with IBE Editor
* Fix text strike cache invalidation for FontSet compatibility
- This fix a bug with Create
* Add text layout dump in advanced options
* Add a command for debugging line breaker
* Add methods for debugging text engine
* Work around AMD driver bug before GCN 1
* Change the initial size of A8 font atlas to 2048x2048
* Fix crash when compacting font atlas
#### Core Framework
* Enable linear text by default, increase layout cache limit
* Delete render thread executor
* Delete old text rendering code
* Add GradientDrawable that draw shapes with gradient colors
* Update/fix ShapeDrawable with latest rendering pipeline
* Add set/get ColorFilter to Drawable and ImageView Add ImageView.setImageTintBlendMode
* Rework ImageDrawable.setSrcRect() method
* Update ImageDrawable with antialias, dither, filter, and tile modes
* Add setter/getter to change blend mode for edge effect
* Change default blend mode for EdgeEffect from SRC_OVER to SRC_ATOP
* Fix Matrix.mapRect()
* Fix EdgeEffect centerX
* Improve text rendering
* Add AngularGradient API and implementation
* Add RadialGradient API and implementation
* Add LinearGradient API and implementation
* Add GradientShader API and implementation
* Add new draw methods to Canvas class
* Add BlendModeColorFilter and make it work finally, default blend mode for ImageDrawable is SRC_IN
* Add ColorFilter class that can be installed on Paint
* Refactor Image class and fix Image.close() issue
* Refactor Paint class
* Add ImageShader class
* Add Shader class that can be installed on Paint
* Add TextView.setTextSize() that specifies a unit, default is sp
* Full migration to the new rendering pipeline, Arc3D Granite Renderer; delete old GLSurfaceCanvas
* Avoid re-layout on window minimized, since framebuffer is destroyed and size is 0
* Deprecate Canvas.saveLayer() for future layer compositor and render tree
#### Core Framework - Kotlin Extension
* No changes
#### Markdown Extension
* No changes
#### Arc3D Graphics Engine
* Remove old usage of Image.getSurfaceFlags
* Add Image.getUniqueID() and static methods to create raster images
* Add utility NoDrawCanvas NWayCanvas and PaintFilterCanvas
* Fix Matrix.mapRect() is not correct
* Fix compiler error
* Optimize text ops if subRunToDevice is translation-only and pipeline does not require local coords trivially
* Optimize matrix computation for text ops
* Replace Matrix4 in rendering code with Matrix
* Make Matrix4() construct an identity matrix, and Matrix4.identity() return a read-only identity matrix
* Fix TextBlobBuilder offsets not reset after build
* Add RoundRect flatten methods
* Improve NoPixelsDevice clip tracking, remove ConservativeClip
* Add DrawAtlas.purge() to free unused pages
* Add implementation for gradients in other interpolation color spaces and for all hue interpolation methods
* Allow DrawAtlas to perform an immediate compact
* Rename some classes and methods
* Change the default uniform buffer block size to 32KB
* Fix color array copy in Vertices::makeCopy
* Fix persistent mapping check in GLBuffer
* Temporarily enable RGB texture in OpenGL
* Try to share vertex array objects in OpenGL backend
* Expose resource cleanup API, also cleanup framebuffer cache and strike cache
* Review ResourceCache, fix some legacy issues
* Add support for alpha-only images, add missing Shaders shader implementation
* Purge framebuffers immediately after one attachment was destroyed
* Complete the compatibility with OpenGL 3.3 and OpenGL ES 3.0
* Improve texture and renderbuffer creation
* Deprecate old Device methods
* Fix OpenGL 3.3 and GLSL 330 compatibility
* Finalize BoundsManager, add samples
* Add plus_clamped, minus, and minus_clamped blend info
* Remove 01 coverage in non-aa case
* Add blend equation in GL backend
* Mark old code as deprecated
* Implement basic functionality for final blender, enable dual source blending
* Fully implement BakedTextBlob and TextBlobCache for text rendering
* Fix blend shader doesn't compile
* Add TextBlob as an immutable container for glyph rendering
* Rework FramebufferDesc, add FramebufferCache to manage framebuffers
* Basically implement texture copy task, implement Surface.onNewImageSnapshot()
* Add factory method to create Surface
* Implement Device management
* Invalidate atlases if RC.snap() failed
* Fix several threading issues for OpenGL backend
* Handle ColorFilter properly
* Add BlendModeShader
* Fix color space transformation on paint's solid color
* Add primitive color blending and color space transform
* Add blending with shader and paint's alpha
* Fix color space transformation on BlendModeColorFilter
* Add implementation of BlendModeShader and BlendModeColorFilter
* Remove Geometry interface
* Add Vertices class and Vertices step to drawVertices
* Add shader implementation for 42 blend modes
* Fix arg name for uniforms that start with no mangle prefix
* Add StaticBufferManager and Buffer-to-Buffer copy task
* Fix ImageUploadTask bug
* Implement remaining important Canvas methods
* Add and implement new Canvas methods in Device
* Fix depth is perspective-correct; the depth should be preserved, then multiply it by w.
* Fix bugs on arc shader with square end
* Finish methods to create and draw GlyphRuns
* Add method to set Matrix elements
* Fix Matrix4.hashCode() for negative zero
* Add Geometry.getBounds() to compute bounds
* Improve ClipStack to compute several bounds
* Fix stroke inflation radius computation for inner and outer stroke
* Optimize draw when it does not depend on dst
* Fix several issues on Device
* Implement the creation of AtlasSubRuns
* Add method to compute res scales if matrix has perspective
* Fix AnalyticSimpleBoxStep instance data type
* Add method to draw pie and chord, optimize shaders
* Add rendering with three cap types of stroke arcs initially
* Implement Atlas text op at low level, improve solid color fast path, trying to handle primitive color
* Fix ScalerContext_JDK does not return a reliable glyph bounds
* Fix DrawAtlas assertion and GlyphAtlasManager row stride
* Fix Strike and ScalerContext bugs, remove stroke cap in StrikeDesc
* Improve finite check and non-invertible matrix
* Add RendererProvider to manage GeometryRenderers
* Finish implementation of atlas management for draw ops and glyph atlas
* Calculate the Path byte size when generating Glyph in Strike
* Implement Strike, StrikeCache, and ScalerContext basically
* Add Paint.setPathEffect(), add missing javadoc in Font
* Add Path.transform(), add PathIterator.getFillRule()
* Add GPU dithering implementation (no texture lookup)
* Fix GLCaps.FormatInfo for RGB565
* Update Paint and related classes
* Make Blender and ColorFilter strictly ref-counted
* Add Shader.isConstant()
* Fix Canvas.drawCircle()
* Add Paint.setColor4f()
* Fix Paint.setStrokeWidth() and Paint.setStrokeMiter() for NaN values
* Remove Paint's SmoothWidth, MaskFilter and ImageFilter
* Add PathEffect skeleton class
* Fix several hashCode implementation for negative zeros
* Update Paint.nothingToDraw() for more blend modes
* Add more methods to RoundRect
* Update Surface, Canvas, and related classes
* Add Stroke, PathIterable, update PathStroker
* Optimize shaders
* Use short-circuit for transfer function
* Use texelFetch for cubic shader, remove invImageSize uniform
* Add perspective correction for local matrix shader
* Extract color space transform from image shaders
* Ensure subset sampling does not use mipmaps
* Implement bicubic and strict subset sampling
* Change AnalyticSimpleBoxStep to use L1 norm
* Fix bug on GLImageDesc.equals()
* Fix bug on uniform block layout
* Change Paint constants and SamplingOptions, adding classes for text rendering
* Done depth stencil work, fix several bugs
* Add flipY and unorm clamp for PixelUtils
* Implement LinearGradient, RadialGradient, AngularGradient
* Fix bugs on ImageShader.makeSubset()
* Fix bugs on premul & unpremul in some classes
* Improve ColorSpace transform, add PixelUtils.convertPixels()
* Add new ColorSpace transform shader
* Fix GLSampler TEXTURE_WRAP_R is not set, add validation for SamplerDesc
* Fix Matrix4.invert, add Matrix.toMatrix4, fix UniformDataGatherer for mat3
* Make Paint, PaintParams, and Draw classes closeable
* Fix TextureTracker; rename gradient shaders
* Optimize box shader
* Accumulated updates on fragment effects and shading pipeline
* Implement simple pixel upload using image-to-image copy
* Add new Shader and ColorFilter classes
* Rename PixelMap to Pixmap, PixelRef to Pixels
* Switch slow JNI to PixelUtils.copyImage() for array to off-heap copy
* Remove the offset parameter of Buffer.unmap()
* Finish AnalyticSimpleBoxStep
* Allow implicit conversion between numerics
* Add DepthStencilSettings and BoundsManager, limit the number of geometry steps
* Optimize vertex writer and uniform writer, optimize uniform data deduplication
* Basically complete the Granite Renderer
* Add geometry projection, solid color simplification
* Finish RenderPassTask execution Fix scissor origin, initial scissor setup
* Complete DrawPass's texture sampler binding
* Add TextureDataGatherer, texture sampler binding and tracker
* Add UniformDataGatherer and UniformDataCache
* Fix Matrix4.store()
* Add framebuffer creation and some tests
* Some work on new PipelineBuilder
* Update Buffer, GLBuffer, persistent mapping and so on
* Accumulative updates for new renderer
* Add method for updating clip draws
* Update ClipStack
* Improve vertex specification and buffer binding
* Rename the project from 'Arc 3D' to 'Arc3D'
* Commit all accumulative updates
* Change BlendMode.apply() to static methods
* Accumulative updates for the new pipeline
* Attempt to refactor pipeline
* Add more classes for new pipeline
* Add frexp & ldexp impl
* Some attempts on pipeline
* Refactor GPU Image, RenderTarget, SurfaceProxy classes; remove Texture
* Add Image and Framebuffer creation, add reusable framebuffers
* Refactor GpuResource class hierarchy
* Support GL_CONTEXT_LOST
* Tons of work on Engine and OpenGL backend, not listed
* Add pre-defined extensions to compile options
* A lot of work on abstraction between GL3 and GLES3
* Initially add GLInterface for both OpenGL & OpenGL ES support
* Add std140/std430 layout qualifiers, add include directive parsing
* Abandon usage of GLSL ARB extensions that core in later versions
* Fix GLCaps crash for some capabilities
* Fix some bugs in preprocessing
* Other improvements
* Add new preprocessing methods, allow sub-range source
* Add StringLiteral grammar, fix Whitespace grammar
* Add FatalError to terminate compiler
* Add identifier name length check (1024 at most)
* Add benchmark between Arc3D and shaderc (glslang)
* Update Lexer
* Add directive grammar
* Add 'using' grammar for type aliases
* Add newline token, fix block comment grammar
### Modern UI 3.11.0.4
#### NeoForge Extension 1.21.1
* Change default typeface/font loading behavior
* Add option to replace vanilla blur effect with Modern UI for optimization
* Allow setting blur radius to 0 to disable blur
* Add MinecraftSurfaceView to handle raw rendering calls
* Ensure that all (native/GPU) resources are closed when the game exits
* Slightly improve the Center UI
* Fix a random crash when opening/closing UI frequently
* Rework tooltip rendering
- Add white noise to shadow
- Add dithering to gradient colors
- Use L1 norm instead of L2 norm for coverage antialiasing
- Change shadow approximation method
- Change default border radius and shadow alpha
- Add new conditions for adding the extra space below tooltip title line
- If the first three lines of the tooltip have different styles, we consider the first line as the title
- Reduce the saturation of default tooltip colors
* Allow using arrow keys to manually scroll the tooltip
* Add small epsilon to text Z value for tooltip rendering to work around FP errors on some GPUs
* Optimize blur effect
- Use texelFetch instead of texture
- Remove the additional blit pass and render target because we work around a Minecraft bug
- Try to cache the shader program and temporary render target for blurring, and handle errors
- Apply blur effect to the screen background instead of the world, just like Minecraft 1.21
* Migrate to new rendering pipeline
#### Forge Extension 1.21.1
* Equivalent to NeoForge version
#### Fabric Extension 1.21.1
* Functionally equivalent to NeoForge version
#### Modern Text Engine 1.21.1
* Add compatibility for bitmap fonts with custom text shader
* Enable linear metrics and disable font hinting by default
* Add config to change the minimum pixel density for SDF text
* Fix some possible bugs on text rendering
* Optimize text rendering
- Add texture cleanup to FontResourceManager
- Simplify text layout rendering code
- Use Math.round for aligning pixels
- Fix glyph info for FontSet compatibility
* Rework and optimize bitmap font rendering
- Try to stitch bitmap font into atlas
- Try to discard bitmap fonts if they have negative metrics, transparent pixels, or huge metrics
- Saturate glyph metrics for bitmap font
- Fix hashCode and equals for correct de-duplication
* Adjust lod bias for normal text shader
* Adjust bitmap font to match vanilla behavior
- Adjust glyph advance calculation
* Adjust Unicode font loading behavior
- Any reference to vanilla Unicode font and UNIHEX font will redirect to current ModernUI default typeface list
instead of system fonts, except for Minecraft default font set
* Fix text layout bug when finding style transitions
* Allow caching the missing glyph to atlas
* Adopt full text rendering technology from core framework
* Fix line breaker that may output no lines and keep consistency with vanilla behavior
- This fix a bug with IBE Editor
* Fix text strike cache invalidation for FontSet compatibility
- This fix a bug with Create
* Add text layout dump in advanced options
* Add a command for debugging line breaker
* Add methods for debugging text engine
* Work around AMD driver bug before GCN 1
* Change the initial size of A8 font atlas to 2048x2048
* Fix crash when compacting font atlas
#### Core Framework
* Enable linear text by default, increase layout cache limit
* Delete render thread executor
* Delete old text rendering code
* Add GradientDrawable that draw shapes with gradient colors
* Update/fix ShapeDrawable with latest rendering pipeline
* Add set/get ColorFilter to Drawable and ImageView Add ImageView.setImageTintBlendMode
* Rework ImageDrawable.setSrcRect() method
* Update ImageDrawable with antialias, dither, filter, and tile modes
* Add setter/getter to change blend mode for edge effect
* Change default blend mode for EdgeEffect from SRC_OVER to SRC_ATOP
* Fix Matrix.mapRect()
* Fix EdgeEffect centerX
* Improve text rendering
* Add AngularGradient API and implementation
* Add RadialGradient API and implementation
* Add LinearGradient API and implementation
* Add GradientShader API and implementation
* Add new draw methods to Canvas class
* Add BlendModeColorFilter and make it work finally, default blend mode for ImageDrawable is SRC_IN
* Add ColorFilter class that can be installed on Paint
* Refactor Image class and fix Image.close() issue
* Refactor Paint class
* Add ImageShader class
* Add Shader class that can be installed on Paint
* Add TextView.setTextSize() that specifies a unit, default is sp
* Full migration to the new rendering pipeline, Arc3D Granite Renderer; delete old GLSurfaceCanvas
* Avoid re-layout on window minimized, since framebuffer is destroyed and size is 0
* Deprecate Canvas.saveLayer() for future layer compositor and render tree
#### Core Framework - Kotlin Extension
* No changes
#### Markdown Extension
* No changes
#### Arc3D Graphics Engine
* Remove old usage of Image.getSurfaceFlags
* Add Image.getUniqueID() and static methods to create raster images
* Add utility NoDrawCanvas NWayCanvas and PaintFilterCanvas
* Fix Matrix.mapRect() is not correct
* Fix compiler error
* Optimize text ops if subRunToDevice is translation-only and pipeline does not require local coords trivially
* Optimize matrix computation for text ops
* Replace Matrix4 in rendering code with Matrix
* Make Matrix4() construct an identity matrix, and Matrix4.identity() return a read-only identity matrix
* Fix TextBlobBuilder offsets not reset after build
* Add RoundRect flatten methods
* Improve NoPixelsDevice clip tracking, remove ConservativeClip
* Add DrawAtlas.purge() to free unused pages
* Add implementation for gradients in other interpolation color spaces and for all hue interpolation methods
* Allow DrawAtlas to perform an immediate compact
* Rename some classes and methods
* Change the default uniform buffer block size to 32KB
* Fix color array copy in Vertices::makeCopy
* Fix persistent mapping check in GLBuffer
* Temporarily enable RGB texture in OpenGL
* Try to share vertex array objects in OpenGL backend
* Expose resource cleanup API, also cleanup framebuffer cache and strike cache
* Review ResourceCache, fix some legacy issues
* Add support for alpha-only images, add missing Shaders shader implementation
* Purge framebuffers immediately after one attachment was destroyed
* Complete the compatibility with OpenGL 3.3 and OpenGL ES 3.0
* Improve texture and renderbuffer creation
* Deprecate old Device methods
* Fix OpenGL 3.3 and GLSL 330 compatibility
* Finalize BoundsManager, add samples
* Add plus_clamped, minus, and minus_clamped blend info
* Remove 01 coverage in non-aa case
* Add blend equation in GL backend
* Mark old code as deprecated
* Implement basic functionality for final blender, enable dual source blending
* Fully implement BakedTextBlob and TextBlobCache for text rendering
* Fix blend shader doesn't compile
* Add TextBlob as an immutable container for glyph rendering
* Rework FramebufferDesc, add FramebufferCache to manage framebuffers
* Basically implement texture copy task, implement Surface.onNewImageSnapshot()
* Add factory method to create Surface
* Implement Device management
* Invalidate atlases if RC.snap() failed
* Fix several threading issues for OpenGL backend
* Handle ColorFilter properly
* Add BlendModeShader
* Fix color space transformation on paint's solid color
* Add primitive color blending and color space transform
* Add blending with shader and paint's alpha
* Fix color space transformation on BlendModeColorFilter
* Add implementation of BlendModeShader and BlendModeColorFilter
* Remove Geometry interface
* Add Vertices class and Vertices step to drawVertices
* Add shader implementation for 42 blend modes
* Fix arg name for uniforms that start with no mangle prefix
* Add StaticBufferManager and Buffer-to-Buffer copy task
* Fix ImageUploadTask bug
* Implement remaining important Canvas methods
* Add and implement new Canvas methods in Device
* Fix depth is perspective-correct; the depth should be preserved, then multiply it by w.
* Fix bugs on arc shader with square end
* Finish methods to create and draw GlyphRuns
* Add method to set Matrix elements
* Fix Matrix4.hashCode() for negative zero
* Add Geometry.getBounds() to compute bounds
* Improve ClipStack to compute several bounds
* Fix stroke inflation radius computation for inner and outer stroke
* Optimize draw when it does not depend on dst
* Fix several issues on Device
* Implement the creation of AtlasSubRuns
* Add method to compute res scales if matrix has perspective
* Fix AnalyticSimpleBoxStep instance data type
* Add method to draw pie and chord, optimize shaders
* Add rendering with three cap types of stroke arcs initially
* Implement Atlas text op at low level, improve solid color fast path, trying to handle primitive color
* Fix ScalerContext_JDK does not return a reliable glyph bounds
* Fix DrawAtlas assertion and GlyphAtlasManager row stride
* Fix Strike and ScalerContext bugs, remove stroke cap in StrikeDesc
* Improve finite check and non-invertible matrix
* Add RendererProvider to manage GeometryRenderers
* Finish implementation of atlas management for draw ops and glyph atlas
* Calculate the Path byte size when generating Glyph in Strike
* Implement Strike, StrikeCache, and ScalerContext basically
* Add Paint.setPathEffect(), add missing javadoc in Font
* Add Path.transform(), add PathIterator.getFillRule()
* Add GPU dithering implementation (no texture lookup)
* Fix GLCaps.FormatInfo for RGB565
* Update Paint and related classes
* Make Blender and ColorFilter strictly ref-counted
* Add Shader.isConstant()
* Fix Canvas.drawCircle()
* Add Paint.setColor4f()
* Fix Paint.setStrokeWidth() and Paint.setStrokeMiter() for NaN values
* Remove Paint's SmoothWidth, MaskFilter and ImageFilter
* Add PathEffect skeleton class
* Fix several hashCode implementation for negative zeros
* Update Paint.nothingToDraw() for more blend modes
* Add more methods to RoundRect
* Update Surface, Canvas, and related classes
* Add Stroke, PathIterable, update PathStroker
* Optimize shaders
* Use short-circuit for transfer function
* Use texelFetch for cubic shader, remove invImageSize uniform
* Add perspective correction for local matrix shader
* Extract color space transform from image shaders
* Ensure subset sampling does not use mipmaps
* Implement bicubic and strict subset sampling
* Change AnalyticSimpleBoxStep to use L1 norm
* Fix bug on GLImageDesc.equals()
* Fix bug on uniform block layout
* Change Paint constants and SamplingOptions, adding classes for text rendering
* Done depth stencil work, fix several bugs
* Add flipY and unorm clamp for PixelUtils
* Implement LinearGradient, RadialGradient, AngularGradient
* Fix bugs on ImageShader.makeSubset()
* Fix bugs on premul & unpremul in some classes
* Improve ColorSpace transform, add PixelUtils.convertPixels()
* Add new ColorSpace transform shader
* Fix GLSampler TEXTURE_WRAP_R is not set, add validation for SamplerDesc
* Fix Matrix4.invert, add Matrix.toMatrix4, fix UniformDataGatherer for mat3
* Make Paint, PaintParams, and Draw classes closeable
* Fix TextureTracker; rename gradient shaders
* Optimize box shader
* Accumulated updates on fragment effects and shading pipeline
* Implement simple pixel upload using image-to-image copy
* Add new Shader and ColorFilter classes
* Rename PixelMap to Pixmap, PixelRef to Pixels
* Switch slow JNI to PixelUtils.copyImage() for array to off-heap copy
* Remove the offset parameter of Buffer.unmap()
* Finish AnalyticSimpleBoxStep
* Allow implicit conversion between numerics
* Add DepthStencilSettings and BoundsManager, limit the number of geometry steps
* Optimize vertex writer and uniform writer, optimize uniform data deduplication
* Basically complete the Granite Renderer
* Add geometry projection, solid color simplification
* Finish RenderPassTask execution Fix scissor origin, initial scissor setup
* Complete DrawPass's texture sampler binding
* Add TextureDataGatherer, texture sampler binding and tracker
* Add UniformDataGatherer and UniformDataCache
* Fix Matrix4.store()
* Add framebuffer creation and some tests
* Some work on new PipelineBuilder
* Update Buffer, GLBuffer, persistent mapping and so on
* Accumulative updates for new renderer
* Add method for updating clip draws
* Update ClipStack
* Improve vertex specification and buffer binding
* Rename the project from 'Arc 3D' to 'Arc3D'
* Commit all accumulative updates
* Change BlendMode.apply() to static methods
* Accumulative updates for the new pipeline
* Attempt to refactor pipeline
* Add more classes for new pipeline
* Add frexp & ldexp impl
* Some attempts on pipeline
* Refactor GPU Image, RenderTarget, SurfaceProxy classes; remove Texture
* Add Image and Framebuffer creation, add reusable framebuffers
* Refactor GpuResource class hierarchy
* Support GL_CONTEXT_LOST
* Tons of work on Engine and OpenGL backend, not listed
* Add pre-defined extensions to compile options
* A lot of work on abstraction between GL3 and GLES3
* Initially add GLInterface for both OpenGL & OpenGL ES support
* Add std140/std430 layout qualifiers, add include directive parsing
* Abandon usage of GLSL ARB extensions that core in later versions
* Fix GLCaps crash for some capabilities
* Fix some bugs in preprocessing
* Other improvements
* Add new preprocessing methods, allow sub-range source
* Add StringLiteral grammar, fix Whitespace grammar
* Add FatalError to terminate compiler
* Add identifier name length check (1024 at most)
* Add benchmark between Arc3D and shaderc (glslang)
* Update Lexer
* Add directive grammar
* Add 'using' grammar for type aliases
* Add newline token, fix block comment grammar
### Modern UI 3.11.0.3
#### NeoForge Extension 1.20.6
* Change default typeface/font loading behavior
* Add option to replace vanilla blur effect with Modern UI for optimization
* Allow setting blur radius to 0 to disable blur
* Add MinecraftSurfaceView to handle raw rendering calls
* Ensure that all (native/GPU) resources are closed when the game exits
* Slightly improve the Center UI
* Fix a random crash when opening/closing UI frequently
* Rework tooltip rendering
- Add white noise to shadow
- Add dithering to gradient colors
- Use L1 norm instead of L2 norm for coverage antialiasing
- Change shadow approximation method
- Change default border radius and shadow alpha
- Add new conditions for adding the extra space below tooltip title line
- If the first three lines of the tooltip have different styles, we consider the first line as the title
- Reduce the saturation of default tooltip colors
* Allow using arrow keys to manually scroll the tooltip
* Add small epsilon to text Z value for tooltip rendering to work around FP errors on some GPUs
* Optimize blur effect
- Use texelFetch instead of texture
- Remove the additional blit pass and render target because we work around a Minecraft bug
- Try to cache the shader program and temporary render target for blurring, and handle errors
- Apply blur effect to the screen background instead of the world, just like Minecraft 1.21
* Migrate to new rendering pipeline
#### Forge Extension 1.20.6
* Equivalent to NeoForge version
#### Fabric Extension 1.20.6
* Functionally equivalent to NeoForge version
#### Modern Text Engine 1.20.6
* Add compatibility for bitmap fonts with custom text shader
* Enable linear metrics and disable font hinting by default
* Add config to change the minimum pixel density for SDF text
* Fix some possible bugs on text rendering
* Optimize text rendering
- Add texture cleanup to FontResourceManager
- Simplify text layout rendering code
- Use Math.round for aligning pixels
- Fix glyph info for FontSet compatibility
* Rework and optimize bitmap font rendering
- Try to stitch bitmap font into atlas
- Try to discard bitmap fonts if they have negative metrics, transparent pixels, or huge metrics
- Saturate glyph metrics for bitmap font
- Fix hashCode and equals for correct de-duplication
* Adjust lod bias for normal text shader
* Adjust bitmap font to match vanilla behavior
- Adjust glyph advance calculation
* Adjust Unicode font loading behavior
- Any reference to vanilla Unicode font and UNIHEX font will redirect to current ModernUI default typeface list
instead of system fonts, except for Minecraft default font set
* Fix text layout bug when finding style transitions
* Allow caching the missing glyph to atlas
* Adopt full text rendering technology from core framework
* Fix line breaker that may output no lines and keep consistency with vanilla behavior
- This fix a bug with IBE Editor
* Fix text strike cache invalidation for FontSet compatibility
- This fix a bug with Create
* Add text layout dump in advanced options
* Add a command for debugging line breaker
* Add methods for debugging text engine
* Work around AMD driver bug before GCN 1
* Change the initial size of A8 font atlas to 2048x2048
* Fix crash when compacting font atlas
#### Core Framework
* Enable linear text by default, increase layout cache limit
* Delete render thread executor
* Delete old text rendering code
* Add GradientDrawable that draw shapes with gradient colors
* Update/fix ShapeDrawable with latest rendering pipeline
* Add set/get ColorFilter to Drawable and ImageView Add ImageView.setImageTintBlendMode
* Rework ImageDrawable.setSrcRect() method
* Update ImageDrawable with antialias, dither, filter, and tile modes
* Add setter/getter to change blend mode for edge effect
* Change default blend mode for EdgeEffect from SRC_OVER to SRC_ATOP
* Fix Matrix.mapRect()
* Fix EdgeEffect centerX
* Improve text rendering
* Add AngularGradient API and implementation
* Add RadialGradient API and implementation
* Add LinearGradient API and implementation
* Add GradientShader API and implementation
* Add new draw methods to Canvas class
* Add BlendModeColorFilter and make it work finally, default blend mode for ImageDrawable is SRC_IN
* Add ColorFilter class that can be installed on Paint
* Refactor Image class and fix Image.close() issue
* Refactor Paint class
* Add ImageShader class
* Add Shader class that can be installed on Paint
* Add TextView.setTextSize() that specifies a unit, default is sp
* Full migration to the new rendering pipeline, Arc3D Granite Renderer; delete old GLSurfaceCanvas
* Avoid re-layout on window minimized, since framebuffer is destroyed and size is 0
* Deprecate Canvas.saveLayer() for future layer compositor and render tree
#### Core Framework - Kotlin Extension
* No changes
#### Markdown Extension
* No changes
#### Arc3D Graphics Engine
* Remove old usage of Image.getSurfaceFlags
* Add Image.getUniqueID() and static methods to create raster images
* Add utility NoDrawCanvas NWayCanvas and PaintFilterCanvas
* Fix Matrix.mapRect() is not correct
* Fix compiler error
* Optimize text ops if subRunToDevice is translation-only and pipeline does not require local coords trivially
* Optimize matrix computation for text ops
* Replace Matrix4 in rendering code with Matrix
* Make Matrix4() construct an identity matrix, and Matrix4.identity() return a read-only identity matrix
* Fix TextBlobBuilder offsets not reset after build
* Add RoundRect flatten methods
* Improve NoPixelsDevice clip tracking, remove ConservativeClip
* Add DrawAtlas.purge() to free unused pages
* Add implementation for gradients in other interpolation color spaces and for all hue interpolation methods
* Allow DrawAtlas to perform an immediate compact
* Rename some classes and methods
* Change the default uniform buffer block size to 32KB
* Fix color array copy in Vertices::makeCopy
* Fix persistent mapping check in GLBuffer
* Temporarily enable RGB texture in OpenGL
* Try to share vertex array objects in OpenGL backend
* Expose resource cleanup API, also cleanup framebuffer cache and strike cache
* Review ResourceCache, fix some legacy issues
* Add support for alpha-only images, add missing Shaders shader implementation
* Purge framebuffers immediately after one attachment was destroyed
* Complete the compatibility with OpenGL 3.3 and OpenGL ES 3.0
* Improve texture and renderbuffer creation
* Deprecate old Device methods
* Fix OpenGL 3.3 and GLSL 330 compatibility
* Finalize BoundsManager, add samples
* Add plus_clamped, minus, and minus_clamped blend info
* Remove 01 coverage in non-aa case
* Add blend equation in GL backend
* Mark old code as deprecated
* Implement basic functionality for final blender, enable dual source blending
* Fully implement BakedTextBlob and TextBlobCache for text rendering
* Fix blend shader doesn't compile
* Add TextBlob as an immutable container for glyph rendering
* Rework FramebufferDesc, add FramebufferCache to manage framebuffers
* Basically implement texture copy task, implement Surface.onNewImageSnapshot()
* Add factory method to create Surface
* Implement Device management
* Invalidate atlases if RC.snap() failed
* Fix several threading issues for OpenGL backend
* Handle ColorFilter properly
* Add BlendModeShader
* Fix color space transformation on paint's solid color
* Add primitive color blending and color space transform
* Add blending with shader and paint's alpha
* Fix color space transformation on BlendModeColorFilter
* Add implementation of BlendModeShader and BlendModeColorFilter
* Remove Geometry interface
* Add Vertices class and Vertices step to drawVertices
* Add shader implementation for 42 blend modes
* Fix arg name for uniforms that start with no mangle prefix
* Add StaticBufferManager and Buffer-to-Buffer copy task
* Fix ImageUploadTask bug
* Implement remaining important Canvas methods
* Add and implement new Canvas methods in Device
* Fix depth is perspective-correct; the depth should be preserved, then multiply it by w.
* Fix bugs on arc shader with square end
* Finish methods to create and draw GlyphRuns
* Add method to set Matrix elements
* Fix Matrix4.hashCode() for negative zero
* Add Geometry.getBounds() to compute bounds
* Improve ClipStack to compute several bounds
* Fix stroke inflation radius computation for inner and outer stroke
* Optimize draw when it does not depend on dst
* Fix several issues on Device
* Implement the creation of AtlasSubRuns
* Add method to compute res scales if matrix has perspective
* Fix AnalyticSimpleBoxStep instance data type
* Add method to draw pie and chord, optimize shaders
* Add rendering with three cap types of stroke arcs initially
* Implement Atlas text op at low level, improve solid color fast path, trying to handle primitive color
* Fix ScalerContext_JDK does not return a reliable glyph bounds
* Fix DrawAtlas assertion and GlyphAtlasManager row stride
* Fix Strike and ScalerContext bugs, remove stroke cap in StrikeDesc
* Improve finite check and non-invertible matrix
* Add RendererProvider to manage GeometryRenderers
* Finish implementation of atlas management for draw ops and glyph atlas
* Calculate the Path byte size when generating Glyph in Strike
* Implement Strike, StrikeCache, and ScalerContext basically
* Add Paint.setPathEffect(), add missing javadoc in Font
* Add Path.transform(), add PathIterator.getFillRule()
* Add GPU dithering implementation (no texture lookup)
* Fix GLCaps.FormatInfo for RGB565
* Update Paint and related classes
* Make Blender and ColorFilter strictly ref-counted
* Add Shader.isConstant()
* Fix Canvas.drawCircle()
* Add Paint.setColor4f()
* Fix Paint.setStrokeWidth() and Paint.setStrokeMiter() for NaN values
* Remove Paint's SmoothWidth, MaskFilter and ImageFilter
* Add PathEffect skeleton class
* Fix several hashCode implementation for negative zeros
* Update Paint.nothingToDraw() for more blend modes
* Add more methods to RoundRect
* Update Surface, Canvas, and related classes
* Add Stroke, PathIterable, update PathStroker
* Optimize shaders
* Use short-circuit for transfer function
* Use texelFetch for cubic shader, remove invImageSize uniform
* Add perspective correction for local matrix shader
* Extract color space transform from image shaders
* Ensure subset sampling does not use mipmaps
* Implement bicubic and strict subset sampling
* Change AnalyticSimpleBoxStep to use L1 norm
* Fix bug on GLImageDesc.equals()
* Fix bug on uniform block layout
* Change Paint constants and SamplingOptions, adding classes for text rendering
* Done depth stencil work, fix several bugs
* Add flipY and unorm clamp for PixelUtils
* Implement LinearGradient, RadialGradient, AngularGradient
* Fix bugs on ImageShader.makeSubset()
* Fix bugs on premul & unpremul in some classes
* Improve ColorSpace transform, add PixelUtils.convertPixels()
* Add new ColorSpace transform shader
* Fix GLSampler TEXTURE_WRAP_R is not set, add validation for SamplerDesc
* Fix Matrix4.invert, add Matrix.toMatrix4, fix UniformDataGatherer for mat3
* Make Paint, PaintParams, and Draw classes closeable
* Fix TextureTracker; rename gradient shaders
* Optimize box shader
* Accumulated updates on fragment effects and shading pipeline
* Implement simple pixel upload using image-to-image copy
* Add new Shader and ColorFilter classes
* Rename PixelMap to Pixmap, PixelRef to Pixels
* Switch slow JNI to PixelUtils.copyImage() for array to off-heap copy
* Remove the offset parameter of Buffer.unmap()
* Finish AnalyticSimpleBoxStep
* Allow implicit conversion between numerics
* Add DepthStencilSettings and BoundsManager, limit the number of geometry steps
* Optimize vertex writer and uniform writer, optimize uniform data deduplication
* Basically complete the Granite Renderer
* Add geometry projection, solid color simplification
* Finish RenderPassTask execution Fix scissor origin, initial scissor setup
* Complete DrawPass's texture sampler binding
* Add TextureDataGatherer, texture sampler binding and tracker
* Add UniformDataGatherer and UniformDataCache
* Fix Matrix4.store()
* Add framebuffer creation and some tests
* Some work on new PipelineBuilder
* Update Buffer, GLBuffer, persistent mapping and so on
* Accumulative updates for new renderer
* Add method for updating clip draws
* Update ClipStack
* Improve vertex specification and buffer binding
* Rename the project from 'Arc 3D' to 'Arc3D'
* Commit all accumulative updates
* Change BlendMode.apply() to static methods
* Accumulative updates for the new pipeline
* Attempt to refactor pipeline
* Add more classes for new pipeline
* Add frexp & ldexp impl
* Some attempts on pipeline
* Refactor GPU Image, RenderTarget, SurfaceProxy classes; remove Texture
* Add Image and Framebuffer creation, add reusable framebuffers
* Refactor GpuResource class hierarchy
* Support GL_CONTEXT_LOST
* Tons of work on Engine and OpenGL backend, not listed
* Add pre-defined extensions to compile options
* A lot of work on abstraction between GL3 and GLES3
* Initially add GLInterface for both OpenGL & OpenGL ES support
* Add std140/std430 layout qualifiers, add include directive parsing
* Abandon usage of GLSL ARB extensions that core in later versions
* Fix GLCaps crash for some capabilities
* Fix some bugs in preprocessing
* Other improvements
* Add new preprocessing methods, allow sub-range source
* Add StringLiteral grammar, fix Whitespace grammar
* Add FatalError to terminate compiler
* Add identifier name length check (1024 at most)
* Add benchmark between Arc3D and shaderc (glslang)
* Update Lexer
* Add directive grammar
* Add 'using' grammar for type aliases
* Add newline token, fix block comment grammar
### Modern UI 3.11.0.3
#### NeoForge Extension 1.20.6
* Change default typeface/font loading behavior
* Add option to replace vanilla blur effect with Modern UI for optimization
* Allow setting blur radius to 0 to disable blur
* Add MinecraftSurfaceView to handle raw rendering calls
* Ensure that all (native/GPU) resources are closed when the game exits
* Slightly improve the Center UI
* Fix a random crash when opening/closing UI frequently
* Rework tooltip rendering
- Add white noise to shadow
- Add dithering to gradient colors
- Use L1 norm instead of L2 norm for coverage antialiasing
- Change shadow approximation method
- Change default border radius and shadow alpha
- Add new conditions for adding the extra space below tooltip title line
- If the first three lines of the tooltip have different styles, we consider the first line as the title
- Reduce the saturation of default tooltip colors
* Allow using arrow keys to manually scroll the tooltip
* Add small epsilon to text Z value for tooltip rendering to work around FP errors on some GPUs
* Optimize blur effect
- Use texelFetch instead of texture
- Remove the additional blit pass and render target because we work around a Minecraft bug
- Try to cache the shader program and temporary render target for blurring, and handle errors
- Apply blur effect to the screen background instead of the world, just like Minecraft 1.21
* Migrate to new rendering pipeline
#### Forge Extension 1.20.6
* Equivalent to NeoForge version
#### Fabric Extension 1.20.6
* Functionally equivalent to NeoForge version
#### Modern Text Engine 1.20.6
* Add compatibility for bitmap fonts with custom text shader
* Enable linear metrics and disable font hinting by default
* Add config to change the minimum pixel density for SDF text
* Fix some possible bugs on text rendering
* Optimize text rendering
- Add texture cleanup to FontResourceManager
- Simplify text layout rendering code
- Use Math.round for aligning pixels
- Fix glyph info for FontSet compatibility
* Rework and optimize bitmap font rendering
- Try to stitch bitmap font into atlas
- Try to discard bitmap fonts if they have negative metrics, transparent pixels, or huge metrics
- Saturate glyph metrics for bitmap font
- Fix hashCode and equals for correct de-duplication
* Adjust lod bias for normal text shader
* Adjust bitmap font to match vanilla behavior
- Adjust glyph advance calculation
* Adjust Unicode font loading behavior
- Any reference to vanilla Unicode font and UNIHEX font will redirect to current ModernUI default typeface list
instead of system fonts, except for Minecraft default font set
* Fix text layout bug when finding style transitions
* Allow caching the missing glyph to atlas
* Adopt full text rendering technology from core framework
* Fix line breaker that may output no lines and keep consistency with vanilla behavior
- This fix a bug with IBE Editor
* Fix text strike cache invalidation for FontSet compatibility
- This fix a bug with Create
* Add text layout dump in advanced options
* Add a command for debugging line breaker
* Add methods for debugging text engine
* Work around AMD driver bug before GCN 1
* Change the initial size of A8 font atlas to 2048x2048
* Fix crash when compacting font atlas
#### Core Framework
* Enable linear text by default, increase layout cache limit
* Delete render thread executor
* Delete old text rendering code
* Add GradientDrawable that draw shapes with gradient colors
* Update/fix ShapeDrawable with latest rendering pipeline
* Add set/get ColorFilter to Drawable and ImageView Add ImageView.setImageTintBlendMode
* Rework ImageDrawable.setSrcRect() method
* Update ImageDrawable with antialias, dither, filter, and tile modes
* Add setter/getter to change blend mode for edge effect
* Change default blend mode for EdgeEffect from SRC_OVER to SRC_ATOP
* Fix Matrix.mapRect()
* Fix EdgeEffect centerX
* Improve text rendering
* Add AngularGradient API and implementation
* Add RadialGradient API and implementation
* Add LinearGradient API and implementation
* Add GradientShader API and implementation
* Add new draw methods to Canvas class
* Add BlendModeColorFilter and make it work finally, default blend mode for ImageDrawable is SRC_IN
* Add ColorFilter class that can be installed on Paint
* Refactor Image class and fix Image.close() issue
* Refactor Paint class
* Add ImageShader class
* Add Shader class that can be installed on Paint
* Add TextView.setTextSize() that specifies a unit, default is sp
* Full migration to the new rendering pipeline, Arc3D Granite Renderer; delete old GLSurfaceCanvas
* Avoid re-layout on window minimized, since framebuffer is destroyed and size is 0
* Deprecate Canvas.saveLayer() for future layer compositor and render tree
#### Core Framework - Kotlin Extension
* No changes
#### Markdown Extension
* No changes
#### Arc3D Graphics Engine
* Remove old usage of Image.getSurfaceFlags
* Add Image.getUniqueID() and static methods to create raster images
* Add utility NoDrawCanvas NWayCanvas and PaintFilterCanvas
* Fix Matrix.mapRect() is not correct
* Fix compiler error
* Optimize text ops if subRunToDevice is translation-only and pipeline does not require local coords trivially
* Optimize matrix computation for text ops
* Replace Matrix4 in rendering code with Matrix
* Make Matrix4() construct an identity matrix, and Matrix4.identity() return a read-only identity matrix
* Fix TextBlobBuilder offsets not reset after build
* Add RoundRect flatten methods
* Improve NoPixelsDevice clip tracking, remove ConservativeClip
* Add DrawAtlas.purge() to free unused pages
* Add implementation for gradients in other interpolation color spaces and for all hue interpolation methods
* Allow DrawAtlas to perform an immediate compact
* Rename some classes and methods
* Change the default uniform buffer block size to 32KB
* Fix color array copy in Vertices::makeCopy
* Fix persistent mapping check in GLBuffer
* Temporarily enable RGB texture in OpenGL
* Try to share vertex array objects in OpenGL backend
* Expose resource cleanup API, also cleanup framebuffer cache and strike cache
* Review ResourceCache, fix some legacy issues
* Add support for alpha-only images, add missing Shaders shader implementation
* Purge framebuffers immediately after one attachment was destroyed
* Complete the compatibility with OpenGL 3.3 and OpenGL ES 3.0
* Improve texture and renderbuffer creation
* Deprecate old Device methods
* Fix OpenGL 3.3 and GLSL 330 compatibility
* Finalize BoundsManager, add samples
* Add plus_clamped, minus, and minus_clamped blend info
* Remove 01 coverage in non-aa case
* Add blend equation in GL backend
* Mark old code as deprecated
* Implement basic functionality for final blender, enable dual source blending
* Fully implement BakedTextBlob and TextBlobCache for text rendering
* Fix blend shader doesn't compile
* Add TextBlob as an immutable container for glyph rendering
* Rework FramebufferDesc, add FramebufferCache to manage framebuffers
* Basically implement texture copy task, implement Surface.onNewImageSnapshot()
* Add factory method to create Surface
* Implement Device management
* Invalidate atlases if RC.snap() failed
* Fix several threading issues for OpenGL backend
* Handle ColorFilter properly
* Add BlendModeShader
* Fix color space transformation on paint's solid color
* Add primitive color blending and color space transform
* Add blending with shader and paint's alpha
* Fix color space transformation on BlendModeColorFilter
* Add implementation of BlendModeShader and BlendModeColorFilter
* Remove Geometry interface
* Add Vertices class and Vertices step to drawVertices
* Add shader implementation for 42 blend modes
* Fix arg name for uniforms that start with no mangle prefix
* Add StaticBufferManager and Buffer-to-Buffer copy task
* Fix ImageUploadTask bug
* Implement remaining important Canvas methods
* Add and implement new Canvas methods in Device
* Fix depth is perspective-correct; the depth should be preserved, then multiply it by w.
* Fix bugs on arc shader with square end
* Finish methods to create and draw GlyphRuns
* Add method to set Matrix elements
* Fix Matrix4.hashCode() for negative zero
* Add Geometry.getBounds() to compute bounds
* Improve ClipStack to compute several bounds
* Fix stroke inflation radius computation for inner and outer stroke
* Optimize draw when it does not depend on dst
* Fix several issues on Device
* Implement the creation of AtlasSubRuns
* Add method to compute res scales if matrix has perspective
* Fix AnalyticSimpleBoxStep instance data type
* Add method to draw pie and chord, optimize shaders
* Add rendering with three cap types of stroke arcs initially
* Implement Atlas text op at low level, improve solid color fast path, trying to handle primitive color
* Fix ScalerContext_JDK does not return a reliable glyph bounds
* Fix DrawAtlas assertion and GlyphAtlasManager row stride
* Fix Strike and ScalerContext bugs, remove stroke cap in StrikeDesc
* Improve finite check and non-invertible matrix
* Add RendererProvider to manage GeometryRenderers
* Finish implementation of atlas management for draw ops and glyph atlas
* Calculate the Path byte size when generating Glyph in Strike
* Implement Strike, StrikeCache, and ScalerContext basically
* Add Paint.setPathEffect(), add missing javadoc in Font
* Add Path.transform(), add PathIterator.getFillRule()
* Add GPU dithering implementation (no texture lookup)
* Fix GLCaps.FormatInfo for RGB565
* Update Paint and related classes
* Make Blender and ColorFilter strictly ref-counted
* Add Shader.isConstant()
* Fix Canvas.drawCircle()
* Add Paint.setColor4f()
* Fix Paint.setStrokeWidth() and Paint.setStrokeMiter() for NaN values
* Remove Paint's SmoothWidth, MaskFilter and ImageFilter
* Add PathEffect skeleton class
* Fix several hashCode implementation for negative zeros
* Update Paint.nothingToDraw() for more blend modes
* Add more methods to RoundRect
* Update Surface, Canvas, and related classes
* Add Stroke, PathIterable, update PathStroker
* Optimize shaders
* Use short-circuit for transfer function
* Use texelFetch for cubic shader, remove invImageSize uniform
* Add perspective correction for local matrix shader
* Extract color space transform from image shaders
* Ensure subset sampling does not use mipmaps
* Implement bicubic and strict subset sampling
* Change AnalyticSimpleBoxStep to use L1 norm
* Fix bug on GLImageDesc.equals()
* Fix bug on uniform block layout
* Change Paint constants and SamplingOptions, adding classes for text rendering
* Done depth stencil work, fix several bugs
* Add flipY and unorm clamp for PixelUtils
* Implement LinearGradient, RadialGradient, AngularGradient
* Fix bugs on ImageShader.makeSubset()
* Fix bugs on premul & unpremul in some classes
* Improve ColorSpace transform, add PixelUtils.convertPixels()
* Add new ColorSpace transform shader
* Fix GLSampler TEXTURE_WRAP_R is not set, add validation for SamplerDesc
* Fix Matrix4.invert, add Matrix.toMatrix4, fix UniformDataGatherer for mat3
* Make Paint, PaintParams, and Draw classes closeable
* Fix TextureTracker; rename gradient shaders
* Optimize box shader
* Accumulated updates on fragment effects and shading pipeline
* Implement simple pixel upload using image-to-image copy
* Add new Shader and ColorFilter classes
* Rename PixelMap to Pixmap, PixelRef to Pixels
* Switch slow JNI to PixelUtils.copyImage() for array to off-heap copy
* Remove the offset parameter of Buffer.unmap()
* Finish AnalyticSimpleBoxStep
* Allow implicit conversion between numerics
* Add DepthStencilSettings and BoundsManager, limit the number of geometry steps
* Optimize vertex writer and uniform writer, optimize uniform data deduplication
* Basically complete the Granite Renderer
* Add geometry projection, solid color simplification
* Finish RenderPassTask execution Fix scissor origin, initial scissor setup
* Complete DrawPass's texture sampler binding
* Add TextureDataGatherer, texture sampler binding and tracker
* Add UniformDataGatherer and UniformDataCache
* Fix Matrix4.store()
* Add framebuffer creation and some tests
* Some work on new PipelineBuilder
* Update Buffer, GLBuffer, persistent mapping and so on
* Accumulative updates for new renderer
* Add method for updating clip draws
* Update ClipStack
* Improve vertex specification and buffer binding
* Rename the project from 'Arc 3D' to 'Arc3D'
* Commit all accumulative updates
* Change BlendMode.apply() to static methods
* Accumulative updates for the new pipeline
* Attempt to refactor pipeline
* Add more classes for new pipeline
* Add frexp & ldexp impl
* Some attempts on pipeline
* Refactor GPU Image, RenderTarget, SurfaceProxy classes; remove Texture
* Add Image and Framebuffer creation, add reusable framebuffers
* Refactor GpuResource class hierarchy
* Support GL_CONTEXT_LOST
* Tons of work on Engine and OpenGL backend, not listed
* Add pre-defined extensions to compile options
* A lot of work on abstraction between GL3 and GLES3
* Initially add GLInterface for both OpenGL & OpenGL ES support
* Add std140/std430 layout qualifiers, add include directive parsing
* Abandon usage of GLSL ARB extensions that core in later versions
* Fix GLCaps crash for some capabilities
* Fix some bugs in preprocessing
* Other improvements
* Add new preprocessing methods, allow sub-range source
* Add StringLiteral grammar, fix Whitespace grammar
* Add FatalError to terminate compiler
* Add identifier name length check (1024 at most)
* Add benchmark between Arc3D and shaderc (glslang)
* Update Lexer
* Add directive grammar
* Add 'using' grammar for type aliases
* Add newline token, fix block comment grammar
### Modern UI 3.11.0.3
#### NeoForge Extension 1.20.6
* Change default typeface/font loading behavior
* Add option to replace vanilla blur effect with Modern UI for optimization
* Allow setting blur radius to 0 to disable blur
* Add MinecraftSurfaceView to handle raw rendering calls
* Ensure that all (native/GPU) resources are closed when the game exits
* Slightly improve the Center UI
* Fix a random crash when opening/closing UI frequently
* Rework tooltip rendering
- Add white noise to shadow
- Add dithering to gradient colors
- Use L1 norm instead of L2 norm for coverage antialiasing
- Change shadow approximation method
- Change default border radius and shadow alpha
- Add new conditions for adding the extra space below tooltip title line
- If the first three lines of the tooltip have different styles, we consider the first line as the title
- Reduce the saturation of default tooltip colors
* Allow using arrow keys to manually scroll the tooltip
* Add small epsilon to text Z value for tooltip rendering to work around FP errors on some GPUs
* Optimize blur effect
- Use texelFetch instead of texture
- Remove the additional blit pass and render target because we work around a Minecraft bug
- Try to cache the shader program and temporary render target for blurring, and handle errors
- Apply blur effect to the screen background instead of the world, just like Minecraft 1.21
* Migrate to new rendering pipeline
#### Forge Extension 1.20.6
* Equivalent to NeoForge version
#### Fabric Extension 1.20.6
* Functionally equivalent to NeoForge version
#### Modern Text Engine 1.20.6
* Add compatibility for bitmap fonts with custom text shader
* Enable linear metrics and disable font hinting by default
* Add config to change the minimum pixel density for SDF text
* Fix some possible bugs on text rendering
* Optimize text rendering
- Add texture cleanup to FontResourceManager
- Simplify text layout rendering code
- Use Math.round for aligning pixels
- Fix glyph info for FontSet compatibility
* Rework and optimize bitmap font rendering
- Try to stitch bitmap font into atlas
- Try to discard bitmap fonts if they have negative metrics, transparent pixels, or huge metrics
- Saturate glyph metrics for bitmap font
- Fix hashCode and equals for correct de-duplication
* Adjust lod bias for normal text shader
* Adjust bitmap font to match vanilla behavior
- Adjust glyph advance calculation
* Adjust Unicode font loading behavior
- Any reference to vanilla Unicode font and UNIHEX font will redirect to current ModernUI default typeface list
instead of system fonts, except for Minecraft default font set
* Fix text layout bug when finding style transitions
* Allow caching the missing glyph to atlas
* Adopt full text rendering technology from core framework
* Fix line breaker that may output no lines and keep consistency with vanilla behavior
- This fix a bug with IBE Editor
* Fix text strike cache invalidation for FontSet compatibility
- This fix a bug with Create
* Add text layout dump in advanced options
* Add a command for debugging line breaker
* Add methods for debugging text engine
* Work around AMD driver bug before GCN 1
* Change the initial size of A8 font atlas to 2048x2048
* Fix crash when compacting font atlas
#### Core Framework
* Enable linear text by default, increase layout cache limit
* Delete render thread executor
* Delete old text rendering code
* Add GradientDrawable that draw shapes with gradient colors
* Update/fix ShapeDrawable with latest rendering pipeline
* Add set/get ColorFilter to Drawable and ImageView Add ImageView.setImageTintBlendMode
* Rework ImageDrawable.setSrcRect() method
* Update ImageDrawable with antialias, dither, filter, and tile modes
* Add setter/getter to change blend mode for edge effect
* Change default blend mode for EdgeEffect from SRC_OVER to SRC_ATOP
* Fix Matrix.mapRect()
* Fix EdgeEffect centerX
* Improve text rendering
* Add AngularGradient API and implementation
* Add RadialGradient API and implementation
* Add LinearGradient API and implementation
* Add GradientShader API and implementation
* Add new draw methods to Canvas class
* Add BlendModeColorFilter and make it work finally, default blend mode for ImageDrawable is SRC_IN
* Add ColorFilter class that can be installed on Paint
* Refactor Image class and fix Image.close() issue
* Refactor Paint class
* Add ImageShader class
* Add Shader class that can be installed on Paint
* Add TextView.setTextSize() that specifies a unit, default is sp
* Full migration to the new rendering pipeline, Arc3D Granite Renderer; delete old GLSurfaceCanvas
* Avoid re-layout on window minimized, since framebuffer is destroyed and size is 0
* Deprecate Canvas.saveLayer() for future layer compositor and render tree
#### Core Framework - Kotlin Extension
* No changes
#### Markdown Extension
* No changes
#### Arc3D Graphics Engine
* Remove old usage of Image.getSurfaceFlags
* Add Image.getUniqueID() and static methods to create raster images
* Add utility NoDrawCanvas NWayCanvas and PaintFilterCanvas
* Fix Matrix.mapRect() is not correct
* Fix compiler error
* Optimize text ops if subRunToDevice is translation-only and pipeline does not require local coords trivially
* Optimize matrix computation for text ops
* Replace Matrix4 in rendering code with Matrix
* Make Matrix4() construct an identity matrix, and Matrix4.identity() return a read-only identity matrix
* Fix TextBlobBuilder offsets not reset after build
* Add RoundRect flatten methods
* Improve NoPixelsDevice clip tracking, remove ConservativeClip
* Add DrawAtlas.purge() to free unused pages
* Add implementation for gradients in other interpolation color spaces and for all hue interpolation methods
* Allow DrawAtlas to perform an immediate compact
* Rename some classes and methods
* Change the default uniform buffer block size to 32KB
* Fix color array copy in Vertices::makeCopy
* Fix persistent mapping check in GLBuffer
* Temporarily enable RGB texture in OpenGL
* Try to share vertex array objects in OpenGL backend
* Expose resource cleanup API, also cleanup framebuffer cache and strike cache
* Review ResourceCache, fix some legacy issues
* Add support for alpha-only images, add missing Shaders shader implementation
* Purge framebuffers immediately after one attachment was destroyed
* Complete the compatibility with OpenGL 3.3 and OpenGL ES 3.0
* Improve texture and renderbuffer creation
* Deprecate old Device methods
* Fix OpenGL 3.3 and GLSL 330 compatibility
* Finalize BoundsManager, add samples
* Add plus_clamped, minus, and minus_clamped blend info
* Remove 01 coverage in non-aa case
* Add blend equation in GL backend
* Mark old code as deprecated
* Implement basic functionality for final blender, enable dual source blending
* Fully implement BakedTextBlob and TextBlobCache for text rendering
* Fix blend shader doesn't compile
* Add TextBlob as an immutable container for glyph rendering
* Rework FramebufferDesc, add FramebufferCache to manage framebuffers
* Basically implement texture copy task, implement Surface.onNewImageSnapshot()
* Add factory method to create Surface
* Implement Device management
* Invalidate atlases if RC.snap() failed
* Fix several threading issues for OpenGL backend
* Handle ColorFilter properly
* Add BlendModeShader
* Fix color space transformation on paint's solid color
* Add primitive color blending and color space transform
* Add blending with shader and paint's alpha
* Fix color space transformation on BlendModeColorFilter
* Add implementation of BlendModeShader and BlendModeColorFilter
* Remove Geometry interface
* Add Vertices class and Vertices step to drawVertices
* Add shader implementation for 42 blend modes
* Fix arg name for uniforms that start with no mangle prefix
* Add StaticBufferManager and Buffer-to-Buffer copy task
* Fix ImageUploadTask bug
* Implement remaining important Canvas methods
* Add and implement new Canvas methods in Device
* Fix depth is perspective-correct; the depth should be preserved, then multiply it by w.
* Fix bugs on arc shader with square end
* Finish methods to create and draw GlyphRuns
* Add method to set Matrix elements
* Fix Matrix4.hashCode() for negative zero
* Add Geometry.getBounds() to compute bounds
* Improve ClipStack to compute several bounds
* Fix stroke inflation radius computation for inner and outer stroke
* Optimize draw when it does not depend on dst
* Fix several issues on Device
* Implement the creation of AtlasSubRuns
* Add method to compute res scales if matrix has perspective
* Fix AnalyticSimpleBoxStep instance data type
* Add method to draw pie and chord, optimize shaders
* Add rendering with three cap types of stroke arcs initially
* Implement Atlas text op at low level, improve solid color fast path, trying to handle primitive color
* Fix ScalerContext_JDK does not return a reliable glyph bounds
* Fix DrawAtlas assertion and GlyphAtlasManager row stride
* Fix Strike and ScalerContext bugs, remove stroke cap in StrikeDesc
* Improve finite check and non-invertible matrix
* Add RendererProvider to manage GeometryRenderers
* Finish implementation of atlas management for draw ops and glyph atlas
* Calculate the Path byte size when generating Glyph in Strike
* Implement Strike, StrikeCache, and ScalerContext basically
* Add Paint.setPathEffect(), add missing javadoc in Font
* Add Path.transform(), add PathIterator.getFillRule()
* Add GPU dithering implementation (no texture lookup)
* Fix GLCaps.FormatInfo for RGB565
* Update Paint and related classes
* Make Blender and ColorFilter strictly ref-counted
* Add Shader.isConstant()
* Fix Canvas.drawCircle()
* Add Paint.setColor4f()
* Fix Paint.setStrokeWidth() and Paint.setStrokeMiter() for NaN values
* Remove Paint's SmoothWidth, MaskFilter and ImageFilter
* Add PathEffect skeleton class
* Fix several hashCode implementation for negative zeros
* Update Paint.nothingToDraw() for more blend modes
* Add more methods to RoundRect
* Update Surface, Canvas, and related classes
* Add Stroke, PathIterable, update PathStroker
* Optimize shaders
* Use short-circuit for transfer function
* Use texelFetch for cubic shader, remove invImageSize uniform
* Add perspective correction for local matrix shader
* Extract color space transform from image shaders
* Ensure subset sampling does not use mipmaps
* Implement bicubic and strict subset sampling
* Change AnalyticSimpleBoxStep to use L1 norm
* Fix bug on GLImageDesc.equals()
* Fix bug on uniform block layout
* Change Paint constants and SamplingOptions, adding classes for text rendering
* Done depth stencil work, fix several bugs
* Add flipY and unorm clamp for PixelUtils
* Implement LinearGradient, RadialGradient, AngularGradient
* Fix bugs on ImageShader.makeSubset()
* Fix bugs on premul & unpremul in some classes
* Improve ColorSpace transform, add PixelUtils.convertPixels()
* Add new ColorSpace transform shader
* Fix GLSampler TEXTURE_WRAP_R is not set, add validation for SamplerDesc
* Fix Matrix4.invert, add Matrix.toMatrix4, fix UniformDataGatherer for mat3
* Make Paint, PaintParams, and Draw classes closeable
* Fix TextureTracker; rename gradient shaders
* Optimize box shader
* Accumulated updates on fragment effects and shading pipeline
* Implement simple pixel upload using image-to-image copy
* Add new Shader and ColorFilter classes
* Rename PixelMap to Pixmap, PixelRef to Pixels
* Switch slow JNI to PixelUtils.copyImage() for array to off-heap copy
* Remove the offset parameter of Buffer.unmap()
* Finish AnalyticSimpleBoxStep
* Allow implicit conversion between numerics
* Add DepthStencilSettings and BoundsManager, limit the number of geometry steps
* Optimize vertex writer and uniform writer, optimize uniform data deduplication
* Basically complete the Granite Renderer
* Add geometry projection, solid color simplification
* Finish RenderPassTask execution Fix scissor origin, initial scissor setup
* Complete DrawPass's texture sampler binding
* Add TextureDataGatherer, texture sampler binding and tracker
* Add UniformDataGatherer and UniformDataCache
* Fix Matrix4.store()
* Add framebuffer creation and some tests
* Some work on new PipelineBuilder
* Update Buffer, GLBuffer, persistent mapping and so on
* Accumulative updates for new renderer
* Add method for updating clip draws
* Update ClipStack
* Improve vertex specification and buffer binding
* Rename the project from 'Arc 3D' to 'Arc3D'
* Commit all accumulative updates
* Change BlendMode.apply() to static methods
* Accumulative updates for the new pipeline
* Attempt to refactor pipeline
* Add more classes for new pipeline
* Add frexp & ldexp impl
* Some attempts on pipeline
* Refactor GPU Image, RenderTarget, SurfaceProxy classes; remove Texture
* Add Image and Framebuffer creation, add reusable framebuffers
* Refactor GpuResource class hierarchy
* Support GL_CONTEXT_LOST
* Tons of work on Engine and OpenGL backend, not listed
* Add pre-defined extensions to compile options
* A lot of work on abstraction between GL3 and GLES3
* Initially add GLInterface for both OpenGL & OpenGL ES support
* Add std140/std430 layout qualifiers, add include directive parsing
* Abandon usage of GLSL ARB extensions that core in later versions
* Fix GLCaps crash for some capabilities
* Fix some bugs in preprocessing
* Other improvements
* Add new preprocessing methods, allow sub-range source
* Add StringLiteral grammar, fix Whitespace grammar
* Add FatalError to terminate compiler
* Add identifier name length check (1024 at most)
* Add benchmark between Arc3D and shaderc (glslang)
* Update Lexer
* Add directive grammar
* Add 'using' grammar for type aliases
* Add newline token, fix block comment grammar
### Modern UI 3.11.0.2
#### NeoForge Extension 1.20.4
* Add MinecraftSurfaceView to handle raw rendering calls
* Ensure that all (native/GPU) resources are closed when the game exits
* Slightly improve the Center UI
* Fix a random crash when opening/closing UI frequently
* Rework tooltip rendering
- Add white noise to shadow
- Add dithering to gradient colors
- Use L1 norm instead of L2 norm for coverage antialiasing
- Change shadow approximation method
- Change default border radius and shadow alpha
- Add new conditions for adding the extra space below tooltip title line
- If the first three lines of the tooltip have different styles, we consider the first line as the title
- Reduce the saturation of default tooltip colors
* Allow using arrow keys to manually scroll the tooltip
* Add small epsilon to text Z value for tooltip rendering to work around FP errors on some GPUs
* Optimize blur effect
- Use texelFetch instead of texture
- Remove the additional blit pass and render target because we work around a Minecraft bug
- Try to cache the shader program and temporary render target for blurring, and handle errors
- Apply blur effect to the screen background instead of the world, just like Minecraft 1.21
* Migrate to new rendering pipeline
#### Forge Extension 1.20.4
* Equivalent to NeoForge version
#### Fabric Extension 1.20.4
* Functionally equivalent to NeoForge version
#### Modern Text Engine 1.20.4
* Add compatibility for bitmap fonts with custom text shader
* Enable linear metrics and disable font hinting by default
* Add config to change the minimum pixel density for SDF text
* Fix some possible bugs on text rendering
* Optimize text rendering
- Add texture cleanup to FontResourceManager
- Simplify text layout rendering code
- Use Math.round for aligning pixels
- Fix glyph info for FontSet compatibility
* Rework and optimize bitmap font rendering
- Try to stitch bitmap font into atlas
- Try to discard bitmap fonts if they have negative metrics, transparent pixels, or huge metrics
- Saturate glyph metrics for bitmap font
- Fix hashCode and equals for correct de-duplication
* Adjust lod bias for normal text shader
* Adjust bitmap font to match vanilla behavior
- Adjust glyph advance calculation
* Adjust Unicode font loading behavior
- Any reference to vanilla Unicode font and UNIHEX font will redirect to current ModernUI default typeface list
instead of system fonts, except for Minecraft default font set
* Fix text layout bug when finding style transitions
* Allow caching the missing glyph to atlas
* Adopt full text rendering technology from core framework
* Fix line breaker that may output no lines and keep consistency with vanilla behavior
- This fix a bug with IBE Editor
* Fix text strike cache invalidation for FontSet compatibility
- This fix a bug with Create
* Add text layout dump in advanced options
* Add a command for debugging line breaker
* Add methods for debugging text engine
#### Core Framework
* Enable linear text by default, increase layout cache limit
* Delete render thread executor
* Delete old text rendering code
* Add GradientDrawable that draw shapes with gradient colors
* Update/fix ShapeDrawable with latest rendering pipeline
* Add set/get ColorFilter to Drawable and ImageView Add ImageView.setImageTintBlendMode
* Rework ImageDrawable.setSrcRect() method
* Update ImageDrawable with antialias, dither, filter, and tile modes
* Add setter/getter to change blend mode for edge effect
* Change default blend mode for EdgeEffect from SRC_OVER to SRC_ATOP
* Fix Matrix.mapRect()
* Fix EdgeEffect centerX
* Improve text rendering
* Add AngularGradient API and implementation
* Add RadialGradient API and implementation
* Add LinearGradient API and implementation
* Add GradientShader API and implementation
* Add new draw methods to Canvas class
* Add BlendModeColorFilter and make it work finally, default blend mode for ImageDrawable is SRC_IN
* Add ColorFilter class that can be installed on Paint
* Refactor Image class and fix Image.close() issue
* Refactor Paint class
* Add ImageShader class
* Add Shader class that can be installed on Paint
* Add TextView.setTextSize() that specifies a unit, default is sp
* Full migration to the new rendering pipeline, Arc3D Granite Renderer; delete old GLSurfaceCanvas
* Avoid re-layout on window minimized, since framebuffer is destroyed and size is 0
* Deprecate Canvas.saveLayer() for future layer compositor and render tree
#### Core Framework - Kotlin Extension
* No changes
#### Markdown Extension
* No changes
#### Arc3D Graphics Engine
* Remove old usage of Image.getSurfaceFlags
* Add Image.getUniqueID() and static methods to create raster images
* Add utility NoDrawCanvas NWayCanvas and PaintFilterCanvas
* Fix Matrix.mapRect() is not correct
* Fix compiler error
* Optimize text ops if subRunToDevice is translation-only and pipeline does not require local coords trivially
* Optimize matrix computation for text ops
* Replace Matrix4 in rendering code with Matrix
* Make Matrix4() construct an identity matrix, and Matrix4.identity() return a read-only identity matrix
* Fix TextBlobBuilder offsets not reset after build
* Add RoundRect flatten methods
* Improve NoPixelsDevice clip tracking, remove ConservativeClip
* Add DrawAtlas.purge() to free unused pages
* Add implementation for gradients in other interpolation color spaces and for all hue interpolation methods
* Allow DrawAtlas to perform an immediate compact
* Rename some classes and methods
* Change the default uniform buffer block size to 32KB
* Fix color array copy in Vertices::makeCopy
* Fix persistent mapping check in GLBuffer
* Temporarily enable RGB texture in OpenGL
* Try to share vertex array objects in OpenGL backend
* Expose resource cleanup API, also cleanup framebuffer cache and strike cache
* Review ResourceCache, fix some legacy issues
* Add support for alpha-only images, add missing Shaders shader implementation
* Purge framebuffers immediately after one attachment was destroyed
* Complete the compatibility with OpenGL 3.3 and OpenGL ES 3.0
* Improve texture and renderbuffer creation
* Deprecate old Device methods
* Fix OpenGL 3.3 and GLSL 330 compatibility
* Finalize BoundsManager, add samples
* Add plus_clamped, minus, and minus_clamped blend info
* Remove 01 coverage in non-aa case
* Add blend equation in GL backend
* Mark old code as deprecated
* Implement basic functionality for final blender, enable dual source blending
* Fully implement BakedTextBlob and TextBlobCache for text rendering
* Fix blend shader doesn't compile
* Add TextBlob as an immutable container for glyph rendering
* Rework FramebufferDesc, add FramebufferCache to manage framebuffers
* Basically implement texture copy task, implement Surface.onNewImageSnapshot()
* Add factory method to create Surface
* Implement Device management
* Invalidate atlases if RC.snap() failed
* Fix several threading issues for OpenGL backend
* Handle ColorFilter properly
* Add BlendModeShader
* Fix color space transformation on paint's solid color
* Add primitive color blending and color space transform
* Add blending with shader and paint's alpha
* Fix color space transformation on BlendModeColorFilter
* Add implementation of BlendModeShader and BlendModeColorFilter
* Remove Geometry interface
* Add Vertices class and Vertices step to drawVertices
* Add shader implementation for 42 blend modes
* Fix arg name for uniforms that start with no mangle prefix
* Add StaticBufferManager and Buffer-to-Buffer copy task
* Fix ImageUploadTask bug
* Implement remaining important Canvas methods
* Add and implement new Canvas methods in Device
* Fix depth is perspective-correct; the depth should be preserved, then multiply it by w.
* Fix bugs on arc shader with square end
* Finish methods to create and draw GlyphRuns
* Add method to set Matrix elements
* Fix Matrix4.hashCode() for negative zero
* Add Geometry.getBounds() to compute bounds
* Improve ClipStack to compute several bounds
* Fix stroke inflation radius computation for inner and outer stroke
* Optimize draw when it does not depend on dst
* Fix several issues on Device
* Implement the creation of AtlasSubRuns
* Add method to compute res scales if matrix has perspective
* Fix AnalyticSimpleBoxStep instance data type
* Add method to draw pie and chord, optimize shaders
* Add rendering with three cap types of stroke arcs initially
* Implement Atlas text op at low level, improve solid color fast path, trying to handle primitive color
* Fix ScalerContext_JDK does not return a reliable glyph bounds
* Fix DrawAtlas assertion and GlyphAtlasManager row stride
* Fix Strike and ScalerContext bugs, remove stroke cap in StrikeDesc
* Improve finite check and non-invertible matrix
* Add RendererProvider to manage GeometryRenderers
* Finish implementation of atlas management for draw ops and glyph atlas
* Calculate the Path byte size when generating Glyph in Strike
* Implement Strike, StrikeCache, and ScalerContext basically
* Add Paint.setPathEffect(), add missing javadoc in Font
* Add Path.transform(), add PathIterator.getFillRule()
* Add GPU dithering implementation (no texture lookup)
* Fix GLCaps.FormatInfo for RGB565
* Update Paint and related classes
* Make Blender and ColorFilter strictly ref-counted
* Add Shader.isConstant()
* Fix Canvas.drawCircle()
* Add Paint.setColor4f()
* Fix Paint.setStrokeWidth() and Paint.setStrokeMiter() for NaN values
* Remove Paint's SmoothWidth, MaskFilter and ImageFilter
* Add PathEffect skeleton class
* Fix several hashCode implementation for negative zeros
* Update Paint.nothingToDraw() for more blend modes
* Add more methods to RoundRect
* Update Surface, Canvas, and related classes
* Add Stroke, PathIterable, update PathStroker
* Optimize shaders
* Use short-circuit for transfer function
* Use texelFetch for cubic shader, remove invImageSize uniform
* Add perspective correction for local matrix shader
* Extract color space transform from image shaders
* Ensure subset sampling does not use mipmaps
* Implement bicubic and strict subset sampling
* Change AnalyticSimpleBoxStep to use L1 norm
* Fix bug on GLImageDesc.equals()
* Fix bug on uniform block layout
* Change Paint constants and SamplingOptions, adding classes for text rendering
* Done depth stencil work, fix several bugs
* Add flipY and unorm clamp for PixelUtils
* Implement LinearGradient, RadialGradient, AngularGradient
* Fix bugs on ImageShader.makeSubset()
* Fix bugs on premul & unpremul in some classes
* Improve ColorSpace transform, add PixelUtils.convertPixels()
* Add new ColorSpace transform shader
* Fix GLSampler TEXTURE_WRAP_R is not set, add validation for SamplerDesc
* Fix Matrix4.invert, add Matrix.toMatrix4, fix UniformDataGatherer for mat3
* Make Paint, PaintParams, and Draw classes closeable
* Fix TextureTracker; rename gradient shaders
* Optimize box shader
* Accumulated updates on fragment effects and shading pipeline
* Implement simple pixel upload using image-to-image copy
* Add new Shader and ColorFilter classes
* Rename PixelMap to Pixmap, PixelRef to Pixels
* Switch slow JNI to PixelUtils.copyImage() for array to off-heap copy
* Remove the offset parameter of Buffer.unmap()
* Finish AnalyticSimpleBoxStep
* Allow implicit conversion between numerics
* Add DepthStencilSettings and BoundsManager, limit the number of geometry steps
* Optimize vertex writer and uniform writer, optimize uniform data deduplication
* Basically complete the Granite Renderer
* Add geometry projection, solid color simplification
* Finish RenderPassTask execution Fix scissor origin, initial scissor setup
* Complete DrawPass's texture sampler binding
* Add TextureDataGatherer, texture sampler binding and tracker
* Add UniformDataGatherer and UniformDataCache
* Fix Matrix4.store()
* Add framebuffer creation and some tests
* Some work on new PipelineBuilder
* Update Buffer, GLBuffer, persistent mapping and so on
* Accumulative updates for new renderer
* Add method for updating clip draws
* Update ClipStack
* Improve vertex specification and buffer binding
* Rename the project from 'Arc 3D' to 'Arc3D'
* Commit all accumulative updates
* Change BlendMode.apply() to static methods
* Accumulative updates for the new pipeline
* Attempt to refactor pipeline
* Add more classes for new pipeline
* Add frexp & ldexp impl
* Some attempts on pipeline
* Refactor GPU Image, RenderTarget, SurfaceProxy classes; remove Texture
* Add Image and Framebuffer creation, add reusable framebuffers
* Refactor GpuResource class hierarchy
* Support GL_CONTEXT_LOST
* Tons of work on Engine and OpenGL backend, not listed
* Add pre-defined extensions to compile options
* A lot of work on abstraction between GL3 and GLES3
* Initially add GLInterface for both OpenGL & OpenGL ES support
* Add std140/std430 layout qualifiers, add include directive parsing
* Abandon usage of GLSL ARB extensions that core in later versions
* Fix GLCaps crash for some capabilities
* Fix some bugs in preprocessing
* Other improvements
* Add new preprocessing methods, allow sub-range source
* Add StringLiteral grammar, fix Whitespace grammar
* Add FatalError to terminate compiler
* Add identifier name length check (1024 at most)
* Add benchmark between Arc3D and shaderc (glslang)
* Update Lexer
* Add directive grammar
* Add 'using' grammar for type aliases
* Add newline token, fix block comment grammar
### Modern UI 3.11.0.2
#### NeoForge Extension 1.20.4
* Add MinecraftSurfaceView to handle raw rendering calls
* Ensure that all (native/GPU) resources are closed when the game exits
* Slightly improve the Center UI
* Fix a random crash when opening/closing UI frequently
* Rework tooltip rendering
- Add white noise to shadow
- Add dithering to gradient colors
- Use L1 norm instead of L2 norm for coverage antialiasing
- Change shadow approximation method
- Change default border radius and shadow alpha
- Add new conditions for adding the extra space below tooltip title line
- If the first three lines of the tooltip have different styles, we consider the first line as the title
- Reduce the saturation of default tooltip colors
* Allow using arrow keys to manually scroll the tooltip
* Add small epsilon to text Z value for tooltip rendering to work around FP errors on some GPUs
* Optimize blur effect
- Use texelFetch instead of texture
- Remove the additional blit pass and render target because we work around a Minecraft bug
- Try to cache the shader program and temporary render target for blurring, and handle errors
- Apply blur effect to the screen background instead of the world, just like Minecraft 1.21
* Migrate to new rendering pipeline
#### Forge Extension 1.20.4
* Equivalent to NeoForge version
#### Fabric Extension 1.20.4
* Functionally equivalent to NeoForge version
#### Modern Text Engine 1.20.4
* Add compatibility for bitmap fonts with custom text shader
* Enable linear metrics and disable font hinting by default
* Add config to change the minimum pixel density for SDF text
* Fix some possible bugs on text rendering
* Optimize text rendering
- Add texture cleanup to FontResourceManager
- Simplify text layout rendering code
- Use Math.round for aligning pixels
- Fix glyph info for FontSet compatibility
* Rework and optimize bitmap font rendering
- Try to stitch bitmap font into atlas
- Try to discard bitmap fonts if they have negative metrics, transparent pixels, or huge metrics
- Saturate glyph metrics for bitmap font
- Fix hashCode and equals for correct de-duplication
* Adjust lod bias for normal text shader
* Adjust bitmap font to match vanilla behavior
- Adjust glyph advance calculation
* Adjust Unicode font loading behavior
- Any reference to vanilla Unicode font and UNIHEX font will redirect to current ModernUI default typeface list
instead of system fonts, except for Minecraft default font set
* Fix text layout bug when finding style transitions
* Allow caching the missing glyph to atlas
* Adopt full text rendering technology from core framework
* Fix line breaker that may output no lines and keep consistency with vanilla behavior
- This fix a bug with IBE Editor
* Fix text strike cache invalidation for FontSet compatibility
- This fix a bug with Create
* Add text layout dump in advanced options
* Add a command for debugging line breaker
* Add methods for debugging text engine
#### Core Framework
* Enable linear text by default, increase layout cache limit
* Delete render thread executor
* Delete old text rendering code
* Add GradientDrawable that draw shapes with gradient colors
* Update/fix ShapeDrawable with latest rendering pipeline
* Add set/get ColorFilter to Drawable and ImageView Add ImageView.setImageTintBlendMode
* Rework ImageDrawable.setSrcRect() method
* Update ImageDrawable with antialias, dither, filter, and tile modes
* Add setter/getter to change blend mode for edge effect
* Change default blend mode for EdgeEffect from SRC_OVER to SRC_ATOP
* Fix Matrix.mapRect()
* Fix EdgeEffect centerX
* Improve text rendering
* Add AngularGradient API and implementation
* Add RadialGradient API and implementation
* Add LinearGradient API and implementation
* Add GradientShader API and implementation
* Add new draw methods to Canvas class
* Add BlendModeColorFilter and make it work finally, default blend mode for ImageDrawable is SRC_IN
* Add ColorFilter class that can be installed on Paint
* Refactor Image class and fix Image.close() issue
* Refactor Paint class
* Add ImageShader class
* Add Shader class that can be installed on Paint
* Add TextView.setTextSize() that specifies a unit, default is sp
* Full migration to the new rendering pipeline, Arc3D Granite Renderer; delete old GLSurfaceCanvas
* Avoid re-layout on window minimized, since framebuffer is destroyed and size is 0
* Deprecate Canvas.saveLayer() for future layer compositor and render tree
#### Core Framework - Kotlin Extension
* No changes
#### Markdown Extension
* No changes
#### Arc3D Graphics Engine
* Remove old usage of Image.getSurfaceFlags
* Add Image.getUniqueID() and static methods to create raster images
* Add utility NoDrawCanvas NWayCanvas and PaintFilterCanvas
* Fix Matrix.mapRect() is not correct
* Fix compiler error
* Optimize text ops if subRunToDevice is translation-only and pipeline does not require local coords trivially
* Optimize matrix computation for text ops
* Replace Matrix4 in rendering code with Matrix
* Make Matrix4() construct an identity matrix, and Matrix4.identity() return a read-only identity matrix
* Fix TextBlobBuilder offsets not reset after build
* Add RoundRect flatten methods
* Improve NoPixelsDevice clip tracking, remove ConservativeClip
* Add DrawAtlas.purge() to free unused pages
* Add implementation for gradients in other interpolation color spaces and for all hue interpolation methods
* Allow DrawAtlas to perform an immediate compact
* Rename some classes and methods
* Change the default uniform buffer block size to 32KB
* Fix color array copy in Vertices::makeCopy
* Fix persistent mapping check in GLBuffer
* Temporarily enable RGB texture in OpenGL
* Try to share vertex array objects in OpenGL backend
* Expose resource cleanup API, also cleanup framebuffer cache and strike cache
* Review ResourceCache, fix some legacy issues
* Add support for alpha-only images, add missing Shaders shader implementation
* Purge framebuffers immediately after one attachment was destroyed
* Complete the compatibility with OpenGL 3.3 and OpenGL ES 3.0
* Improve texture and renderbuffer creation
* Deprecate old Device methods
* Fix OpenGL 3.3 and GLSL 330 compatibility
* Finalize BoundsManager, add samples
* Add plus_clamped, minus, and minus_clamped blend info
* Remove 01 coverage in non-aa case
* Add blend equation in GL backend
* Mark old code as deprecated
* Implement basic functionality for final blender, enable dual source blending
* Fully implement BakedTextBlob and TextBlobCache for text rendering
* Fix blend shader doesn't compile
* Add TextBlob as an immutable container for glyph rendering
* Rework FramebufferDesc, add FramebufferCache to manage framebuffers
* Basically implement texture copy task, implement Surface.onNewImageSnapshot()
* Add factory method to create Surface
* Implement Device management
* Invalidate atlases if RC.snap() failed
* Fix several threading issues for OpenGL backend
* Handle ColorFilter properly
* Add BlendModeShader
* Fix color space transformation on paint's solid color
* Add primitive color blending and color space transform
* Add blending with shader and paint's alpha
* Fix color space transformation on BlendModeColorFilter
* Add implementation of BlendModeShader and BlendModeColorFilter
* Remove Geometry interface
* Add Vertices class and Vertices step to drawVertices
* Add shader implementation for 42 blend modes
* Fix arg name for uniforms that start with no mangle prefix
* Add StaticBufferManager and Buffer-to-Buffer copy task
* Fix ImageUploadTask bug
* Implement remaining important Canvas methods
* Add and implement new Canvas methods in Device
* Fix depth is perspective-correct; the depth should be preserved, then multiply it by w.
* Fix bugs on arc shader with square end
* Finish methods to create and draw GlyphRuns
* Add method to set Matrix elements
* Fix Matrix4.hashCode() for negative zero
* Add Geometry.getBounds() to compute bounds
* Improve ClipStack to compute several bounds
* Fix stroke inflation radius computation for inner and outer stroke
* Optimize draw when it does not depend on dst
* Fix several issues on Device
* Implement the creation of AtlasSubRuns
* Add method to compute res scales if matrix has perspective
* Fix AnalyticSimpleBoxStep instance data type
* Add method to draw pie and chord, optimize shaders
* Add rendering with three cap types of stroke arcs initially
* Implement Atlas text op at low level, improve solid color fast path, trying to handle primitive color
* Fix ScalerContext_JDK does not return a reliable glyph bounds
* Fix DrawAtlas assertion and GlyphAtlasManager row stride
* Fix Strike and ScalerContext bugs, remove stroke cap in StrikeDesc
* Improve finite check and non-invertible matrix
* Add RendererProvider to manage GeometryRenderers
* Finish implementation of atlas management for draw ops and glyph atlas
* Calculate the Path byte size when generating Glyph in Strike
* Implement Strike, StrikeCache, and ScalerContext basically
* Add Paint.setPathEffect(), add missing javadoc in Font
* Add Path.transform(), add PathIterator.getFillRule()
* Add GPU dithering implementation (no texture lookup)
* Fix GLCaps.FormatInfo for RGB565
* Update Paint and related classes
* Make Blender and ColorFilter strictly ref-counted
* Add Shader.isConstant()
* Fix Canvas.drawCircle()
* Add Paint.setColor4f()
* Fix Paint.setStrokeWidth() and Paint.setStrokeMiter() for NaN values
* Remove Paint's SmoothWidth, MaskFilter and ImageFilter
* Add PathEffect skeleton class
* Fix several hashCode implementation for negative zeros
* Update Paint.nothingToDraw() for more blend modes
* Add more methods to RoundRect
* Update Surface, Canvas, and related classes
* Add Stroke, PathIterable, update PathStroker
* Optimize shaders
* Use short-circuit for transfer function
* Use texelFetch for cubic shader, remove invImageSize uniform
* Add perspective correction for local matrix shader
* Extract color space transform from image shaders
* Ensure subset sampling does not use mipmaps
* Implement bicubic and strict subset sampling
* Change AnalyticSimpleBoxStep to use L1 norm
* Fix bug on GLImageDesc.equals()
* Fix bug on uniform block layout
* Change Paint constants and SamplingOptions, adding classes for text rendering
* Done depth stencil work, fix several bugs
* Add flipY and unorm clamp for PixelUtils
* Implement LinearGradient, RadialGradient, AngularGradient
* Fix bugs on ImageShader.makeSubset()
* Fix bugs on premul & unpremul in some classes
* Improve ColorSpace transform, add PixelUtils.convertPixels()
* Add new ColorSpace transform shader
* Fix GLSampler TEXTURE_WRAP_R is not set, add validation for SamplerDesc
* Fix Matrix4.invert, add Matrix.toMatrix4, fix UniformDataGatherer for mat3
* Make Paint, PaintParams, and Draw classes closeable
* Fix TextureTracker; rename gradient shaders
* Optimize box shader
* Accumulated updates on fragment effects and shading pipeline
* Implement simple pixel upload using image-to-image copy
* Add new Shader and ColorFilter classes
* Rename PixelMap to Pixmap, PixelRef to Pixels
* Switch slow JNI to PixelUtils.copyImage() for array to off-heap copy
* Remove the offset parameter of Buffer.unmap()
* Finish AnalyticSimpleBoxStep
* Allow implicit conversion between numerics
* Add DepthStencilSettings and BoundsManager, limit the number of geometry steps
* Optimize vertex writer and uniform writer, optimize uniform data deduplication
* Basically complete the Granite Renderer
* Add geometry projection, solid color simplification
* Finish RenderPassTask execution Fix scissor origin, initial scissor setup
* Complete DrawPass's texture sampler binding
* Add TextureDataGatherer, texture sampler binding and tracker
* Add UniformDataGatherer and UniformDataCache
* Fix Matrix4.store()
* Add framebuffer creation and some tests
* Some work on new PipelineBuilder
* Update Buffer, GLBuffer, persistent mapping and so on
* Accumulative updates for new renderer
* Add method for updating clip draws
* Update ClipStack
* Improve vertex specification and buffer binding
* Rename the project from 'Arc 3D' to 'Arc3D'
* Commit all accumulative updates
* Change BlendMode.apply() to static methods
* Accumulative updates for the new pipeline
* Attempt to refactor pipeline
* Add more classes for new pipeline
* Add frexp & ldexp impl
* Some attempts on pipeline
* Refactor GPU Image, RenderTarget, SurfaceProxy classes; remove Texture
* Add Image and Framebuffer creation, add reusable framebuffers
* Refactor GpuResource class hierarchy
* Support GL_CONTEXT_LOST
* Tons of work on Engine and OpenGL backend, not listed
* Add pre-defined extensions to compile options
* A lot of work on abstraction between GL3 and GLES3
* Initially add GLInterface for both OpenGL & OpenGL ES support
* Add std140/std430 layout qualifiers, add include directive parsing
* Abandon usage of GLSL ARB extensions that core in later versions
* Fix GLCaps crash for some capabilities
* Fix some bugs in preprocessing
* Other improvements
* Add new preprocessing methods, allow sub-range source
* Add StringLiteral grammar, fix Whitespace grammar
* Add FatalError to terminate compiler
* Add identifier name length check (1024 at most)
* Add benchmark between Arc3D and shaderc (glslang)
* Update Lexer
* Add directive grammar
* Add 'using' grammar for type aliases
* Add newline token, fix block comment grammar
### Modern UI 3.11.0.2
#### NeoForge Extension 1.20.4
* Add MinecraftSurfaceView to handle raw rendering calls
* Ensure that all (native/GPU) resources are closed when the game exits
* Slightly improve the Center UI
* Fix a random crash when opening/closing UI frequently
* Rework tooltip rendering
- Add white noise to shadow
- Add dithering to gradient colors
- Use L1 norm instead of L2 norm for coverage antialiasing
- Change shadow approximation method
- Change default border radius and shadow alpha
- Add new conditions for adding the extra space below tooltip title line
- If the first three lines of the tooltip have different styles, we consider the first line as the title
- Reduce the saturation of default tooltip colors
* Allow using arrow keys to manually scroll the tooltip
* Add small epsilon to text Z value for tooltip rendering to work around FP errors on some GPUs
* Optimize blur effect
- Use texelFetch instead of texture
- Remove the additional blit pass and render target because we work around a Minecraft bug
- Try to cache the shader program and temporary render target for blurring, and handle errors
- Apply blur effect to the screen background instead of the world, just like Minecraft 1.21
* Migrate to new rendering pipeline
#### Forge Extension 1.20.4
* Equivalent to NeoForge version
#### Fabric Extension 1.20.4
* Functionally equivalent to NeoForge version
#### Modern Text Engine 1.20.4
* Add compatibility for bitmap fonts with custom text shader
* Enable linear metrics and disable font hinting by default
* Add config to change the minimum pixel density for SDF text
* Fix some possible bugs on text rendering
* Optimize text rendering
- Add texture cleanup to FontResourceManager
- Simplify text layout rendering code
- Use Math.round for aligning pixels
- Fix glyph info for FontSet compatibility
* Rework and optimize bitmap font rendering
- Try to stitch bitmap font into atlas
- Try to discard bitmap fonts if they have negative metrics, transparent pixels, or huge metrics
- Saturate glyph metrics for bitmap font
- Fix hashCode and equals for correct de-duplication
* Adjust lod bias for normal text shader
* Adjust bitmap font to match vanilla behavior
- Adjust glyph advance calculation
* Adjust Unicode font loading behavior
- Any reference to vanilla Unicode font and UNIHEX font will redirect to current ModernUI default typeface list
instead of system fonts, except for Minecraft default font set
* Fix text layout bug when finding style transitions
* Allow caching the missing glyph to atlas
* Adopt full text rendering technology from core framework
* Fix line breaker that may output no lines and keep consistency with vanilla behavior
- This fix a bug with IBE Editor
* Fix text strike cache invalidation for FontSet compatibility
- This fix a bug with Create
* Add text layout dump in advanced options
* Add a command for debugging line breaker
* Add methods for debugging text engine
#### Core Framework
* Enable linear text by default, increase layout cache limit
* Delete render thread executor
* Delete old text rendering code
* Add GradientDrawable that draw shapes with gradient colors
* Update/fix ShapeDrawable with latest rendering pipeline
* Add set/get ColorFilter to Drawable and ImageView Add ImageView.setImageTintBlendMode
* Rework ImageDrawable.setSrcRect() method
* Update ImageDrawable with antialias, dither, filter, and tile modes
* Add setter/getter to change blend mode for edge effect
* Change default blend mode for EdgeEffect from SRC_OVER to SRC_ATOP
* Fix Matrix.mapRect()
* Fix EdgeEffect centerX
* Improve text rendering
* Add AngularGradient API and implementation
* Add RadialGradient API and implementation
* Add LinearGradient API and implementation
* Add GradientShader API and implementation
* Add new draw methods to Canvas class
* Add BlendModeColorFilter and make it work finally, default blend mode for ImageDrawable is SRC_IN
* Add ColorFilter class that can be installed on Paint
* Refactor Image class and fix Image.close() issue
* Refactor Paint class
* Add ImageShader class
* Add Shader class that can be installed on Paint
* Add TextView.setTextSize() that specifies a unit, default is sp
* Full migration to the new rendering pipeline, Arc3D Granite Renderer; delete old GLSurfaceCanvas
* Avoid re-layout on window minimized, since framebuffer is destroyed and size is 0
* Deprecate Canvas.saveLayer() for future layer compositor and render tree
#### Core Framework - Kotlin Extension
* No changes
#### Markdown Extension
* No changes
#### Arc3D Graphics Engine
* Remove old usage of Image.getSurfaceFlags
* Add Image.getUniqueID() and static methods to create raster images
* Add utility NoDrawCanvas NWayCanvas and PaintFilterCanvas
* Fix Matrix.mapRect() is not correct
* Fix compiler error
* Optimize text ops if subRunToDevice is translation-only and pipeline does not require local coords trivially
* Optimize matrix computation for text ops
* Replace Matrix4 in rendering code with Matrix
* Make Matrix4() construct an identity matrix, and Matrix4.identity() return a read-only identity matrix
* Fix TextBlobBuilder offsets not reset after build
* Add RoundRect flatten methods
* Improve NoPixelsDevice clip tracking, remove ConservativeClip
* Add DrawAtlas.purge() to free unused pages
* Add implementation for gradients in other interpolation color spaces and for all hue interpolation methods
* Allow DrawAtlas to perform an immediate compact
* Rename some classes and methods
* Change the default uniform buffer block size to 32KB
* Fix color array copy in Vertices::makeCopy
* Fix persistent mapping check in GLBuffer
* Temporarily enable RGB texture in OpenGL
* Try to share vertex array objects in OpenGL backend
* Expose resource cleanup API, also cleanup framebuffer cache and strike cache
* Review ResourceCache, fix some legacy issues
* Add support for alpha-only images, add missing Shaders shader implementation
* Purge framebuffers immediately after one attachment was destroyed
* Complete the compatibility with OpenGL 3.3 and OpenGL ES 3.0
* Improve texture and renderbuffer creation
* Deprecate old Device methods
* Fix OpenGL 3.3 and GLSL 330 compatibility
* Finalize BoundsManager, add samples
* Add plus_clamped, minus, and minus_clamped blend info
* Remove 01 coverage in non-aa case
* Add blend equation in GL backend
* Mark old code as deprecated
* Implement basic functionality for final blender, enable dual source blending
* Fully implement BakedTextBlob and TextBlobCache for text rendering
* Fix blend shader doesn't compile
* Add TextBlob as an immutable container for glyph rendering
* Rework FramebufferDesc, add FramebufferCache to manage framebuffers
* Basically implement texture copy task, implement Surface.onNewImageSnapshot()
* Add factory method to create Surface
* Implement Device management
* Invalidate atlases if RC.snap() failed
* Fix several threading issues for OpenGL backend
* Handle ColorFilter properly
* Add BlendModeShader
* Fix color space transformation on paint's solid color
* Add primitive color blending and color space transform
* Add blending with shader and paint's alpha
* Fix color space transformation on BlendModeColorFilter
* Add implementation of BlendModeShader and BlendModeColorFilter
* Remove Geometry interface
* Add Vertices class and Vertices step to drawVertices
* Add shader implementation for 42 blend modes
* Fix arg name for uniforms that start with no mangle prefix
* Add StaticBufferManager and Buffer-to-Buffer copy task
* Fix ImageUploadTask bug
* Implement remaining important Canvas methods
* Add and implement new Canvas methods in Device
* Fix depth is perspective-correct; the depth should be preserved, then multiply it by w.
* Fix bugs on arc shader with square end
* Finish methods to create and draw GlyphRuns
* Add method to set Matrix elements
* Fix Matrix4.hashCode() for negative zero
* Add Geometry.getBounds() to compute bounds
* Improve ClipStack to compute several bounds
* Fix stroke inflation radius computation for inner and outer stroke
* Optimize draw when it does not depend on dst
* Fix several issues on Device
* Implement the creation of AtlasSubRuns
* Add method to compute res scales if matrix has perspective
* Fix AnalyticSimpleBoxStep instance data type
* Add method to draw pie and chord, optimize shaders
* Add rendering with three cap types of stroke arcs initially
* Implement Atlas text op at low level, improve solid color fast path, trying to handle primitive color
* Fix ScalerContext_JDK does not return a reliable glyph bounds
* Fix DrawAtlas assertion and GlyphAtlasManager row stride
* Fix Strike and ScalerContext bugs, remove stroke cap in StrikeDesc
* Improve finite check and non-invertible matrix
* Add RendererProvider to manage GeometryRenderers
* Finish implementation of atlas management for draw ops and glyph atlas
* Calculate the Path byte size when generating Glyph in Strike
* Implement Strike, StrikeCache, and ScalerContext basically
* Add Paint.setPathEffect(), add missing javadoc in Font
* Add Path.transform(), add PathIterator.getFillRule()
* Add GPU dithering implementation (no texture lookup)
* Fix GLCaps.FormatInfo for RGB565
* Update Paint and related classes
* Make Blender and ColorFilter strictly ref-counted
* Add Shader.isConstant()
* Fix Canvas.drawCircle()
* Add Paint.setColor4f()
* Fix Paint.setStrokeWidth() and Paint.setStrokeMiter() for NaN values
* Remove Paint's SmoothWidth, MaskFilter and ImageFilter
* Add PathEffect skeleton class
* Fix several hashCode implementation for negative zeros
* Update Paint.nothingToDraw() for more blend modes
* Add more methods to RoundRect
* Update Surface, Canvas, and related classes
* Add Stroke, PathIterable, update PathStroker
* Optimize shaders
* Use short-circuit for transfer function
* Use texelFetch for cubic shader, remove invImageSize uniform
* Add perspective correction for local matrix shader
* Extract color space transform from image shaders
* Ensure subset sampling does not use mipmaps
* Implement bicubic and strict subset sampling
* Change AnalyticSimpleBoxStep to use L1 norm
* Fix bug on GLImageDesc.equals()
* Fix bug on uniform block layout
* Change Paint constants and SamplingOptions, adding classes for text rendering
* Done depth stencil work, fix several bugs
* Add flipY and unorm clamp for PixelUtils
* Implement LinearGradient, RadialGradient, AngularGradient
* Fix bugs on ImageShader.makeSubset()
* Fix bugs on premul & unpremul in some classes
* Improve ColorSpace transform, add PixelUtils.convertPixels()
* Add new ColorSpace transform shader
* Fix GLSampler TEXTURE_WRAP_R is not set, add validation for SamplerDesc
* Fix Matrix4.invert, add Matrix.toMatrix4, fix UniformDataGatherer for mat3
* Make Paint, PaintParams, and Draw classes closeable
* Fix TextureTracker; rename gradient shaders
* Optimize box shader
* Accumulated updates on fragment effects and shading pipeline
* Implement simple pixel upload using image-to-image copy
* Add new Shader and ColorFilter classes
* Rename PixelMap to Pixmap, PixelRef to Pixels
* Switch slow JNI to PixelUtils.copyImage() for array to off-heap copy
* Remove the offset parameter of Buffer.unmap()
* Finish AnalyticSimpleBoxStep
* Allow implicit conversion between numerics
* Add DepthStencilSettings and BoundsManager, limit the number of geometry steps
* Optimize vertex writer and uniform writer, optimize uniform data deduplication
* Basically complete the Granite Renderer
* Add geometry projection, solid color simplification
* Finish RenderPassTask execution Fix scissor origin, initial scissor setup
* Complete DrawPass's texture sampler binding
* Add TextureDataGatherer, texture sampler binding and tracker
* Add UniformDataGatherer and UniformDataCache
* Fix Matrix4.store()
* Add framebuffer creation and some tests
* Some work on new PipelineBuilder
* Update Buffer, GLBuffer, persistent mapping and so on
* Accumulative updates for new renderer
* Add method for updating clip draws
* Update ClipStack
* Improve vertex specification and buffer binding
* Rename the project from 'Arc 3D' to 'Arc3D'
* Commit all accumulative updates
* Change BlendMode.apply() to static methods
* Accumulative updates for the new pipeline
* Attempt to refactor pipeline
* Add more classes for new pipeline
* Add frexp & ldexp impl
* Some attempts on pipeline
* Refactor GPU Image, RenderTarget, SurfaceProxy classes; remove Texture
* Add Image and Framebuffer creation, add reusable framebuffers
* Refactor GpuResource class hierarchy
* Support GL_CONTEXT_LOST
* Tons of work on Engine and OpenGL backend, not listed
* Add pre-defined extensions to compile options
* A lot of work on abstraction between GL3 and GLES3
* Initially add GLInterface for both OpenGL & OpenGL ES support
* Add std140/std430 layout qualifiers, add include directive parsing
* Abandon usage of GLSL ARB extensions that core in later versions
* Fix GLCaps crash for some capabilities
* Fix some bugs in preprocessing
* Other improvements
* Add new preprocessing methods, allow sub-range source
* Add StringLiteral grammar, fix Whitespace grammar
* Add FatalError to terminate compiler
* Add identifier name length check (1024 at most)
* Add benchmark between Arc3D and shaderc (glslang)
* Update Lexer
* Add directive grammar
* Add 'using' grammar for type aliases
* Add newline token, fix block comment grammar
### Modern UI 3.11.0.1
#### Forge Extension 1.20.1 / NeoForge Extension 1.20.1
* Add MinecraftSurfaceView to handle raw rendering calls
* Ensure that all (native/GPU) resources are closed when the game exits
* Slightly improve the Center UI
* Fix a random crash when opening/closing UI frequently
* Rework tooltip rendering
- Add white noise to shadow
- Add dithering to gradient colors
- Use L1 norm instead of L2 norm for coverage antialiasing
- Change shadow approximation method
- Change default border radius and shadow alpha
- Add new conditions for adding the extra space below tooltip title line
- If the first three lines of the tooltip have different styles, we consider the first line as the title
- Reduce the saturation of default tooltip colors
* Allow using arrow keys to manually scroll the tooltip
* Add small epsilon to text Z value for tooltip rendering to work around FP errors on some GPUs
* Optimize blur effect
- Use texelFetch instead of texture
- Remove the additional blit pass and render target because we work around a Minecraft bug
- Try to cache the shader program and temporary render target for blurring, and handle errors
- Apply blur effect to the screen background instead of the world, just like Minecraft 1.20.6
* Migrate to new rendering pipeline
#### Fabric Extension 1.20.1
* Add support for Minecraft 1.20
* Fix key binding not working in some cases
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.20.1
* Add compatibility for bitmap fonts with custom text shader
* Enable linear metrics and disable font hinting by default
* Add config to change the minimum pixel density for SDF text
* Fix some possible bugs on text rendering
* Optimize text rendering
- Add texture cleanup to FontResourceManager
- Simplify text layout rendering code
- Use Math.round for aligning pixels
- Fix glyph info for FontSet compatibility
* Rework and optimize bitmap font rendering
- Try to stitch bitmap font into atlas
- Try to discard bitmap fonts if they have negative metrics, transparent pixels, or huge metrics
- Saturate glyph metrics for bitmap font
- Fix hashCode and equals for correct de-duplication
* Adjust lod bias for normal text shader
* Adjust bitmap font to match vanilla behavior
- Adjust glyph advance calculation
* Adjust Unicode font loading behavior
- Any reference to vanilla Unicode font and UNIHEX font will redirect to current ModernUI default typeface list
instead of system fonts, except for Minecraft default font set
* Fix text layout bug when finding style transitions
* Allow caching the missing glyph to atlas
* Adopt full text rendering technology from core framework
* Fix line breaker that may output no lines and keep consistency with vanilla behavior
- This fix a bug with IBE Editor
* Fix text strike cache invalidation for FontSet compatibility
- This fix a bug with Create
* Add text layout dump in advanced options
* Add a command for debugging line breaker
* Add methods for debugging text engine
#### Core Framework
* Enable linear text by default, increase layout cache limit
* Delete render thread executor
* Delete old text rendering code
* Add GradientDrawable that draw shapes with gradient colors
* Update/fix ShapeDrawable with latest rendering pipeline
* Add set/get ColorFilter to Drawable and ImageView Add ImageView.setImageTintBlendMode
* Rework ImageDrawable.setSrcRect() method
* Update ImageDrawable with antialias, dither, filter, and tile modes
* Add setter/getter to change blend mode for edge effect
* Change default blend mode for EdgeEffect from SRC_OVER to SRC_ATOP
* Fix Matrix.mapRect()
* Fix EdgeEffect centerX
* Improve text rendering
* Add AngularGradient API and implementation
* Add RadialGradient API and implementation
* Add LinearGradient API and implementation
* Add GradientShader API and implementation
* Add new draw methods to Canvas class
* Add BlendModeColorFilter and make it work finally, default blend mode for ImageDrawable is SRC_IN
* Add ColorFilter class that can be installed on Paint
* Refactor Image class and fix Image.close() issue
* Refactor Paint class
* Add ImageShader class
* Add Shader class that can be installed on Paint
* Add TextView.setTextSize() that specifies a unit, default is sp
* Full migration to the new rendering pipeline, Arc3D Granite Renderer; delete old GLSurfaceCanvas
* Avoid re-layout on window minimized, since framebuffer is destroyed and size is 0
* Deprecate Canvas.saveLayer() for future layer compositor and render tree
#### Core Framework - Kotlin Extension
* No changes
#### Markdown Extension
* No changes
#### Arc3D Graphics Engine
* Remove old usage of Image.getSurfaceFlags
* Add Image.getUniqueID() and static methods to create raster images
* Add utility NoDrawCanvas NWayCanvas and PaintFilterCanvas
* Fix Matrix.mapRect() is not correct
* Fix compiler error
* Optimize text ops if subRunToDevice is translation-only and pipeline does not require local coords trivially
* Optimize matrix computation for text ops
* Replace Matrix4 in rendering code with Matrix
* Make Matrix4() construct an identity matrix, and Matrix4.identity() return a read-only identity matrix
* Fix TextBlobBuilder offsets not reset after build
* Add RoundRect flatten methods
* Improve NoPixelsDevice clip tracking, remove ConservativeClip
* Add DrawAtlas.purge() to free unused pages
* Add implementation for gradients in other interpolation color spaces and for all hue interpolation methods
* Allow DrawAtlas to perform an immediate compact
* Rename some classes and methods
* Change the default uniform buffer block size to 32KB
* Fix color array copy in Vertices::makeCopy
* Fix persistent mapping check in GLBuffer
* Temporarily enable RGB texture in OpenGL
* Try to share vertex array objects in OpenGL backend
* Expose resource cleanup API, also cleanup framebuffer cache and strike cache
* Review ResourceCache, fix some legacy issues
* Add support for alpha-only images, add missing Shaders shader implementation
* Purge framebuffers immediately after one attachment was destroyed
* Complete the compatibility with OpenGL 3.3 and OpenGL ES 3.0
* Improve texture and renderbuffer creation
* Deprecate old Device methods
* Fix OpenGL 3.3 and GLSL 330 compatibility
* Finalize BoundsManager, add samples
* Add plus_clamped, minus, and minus_clamped blend info
* Remove 01 coverage in non-aa case
* Add blend equation in GL backend
* Mark old code as deprecated
* Implement basic functionality for final blender, enable dual source blending
* Fully implement BakedTextBlob and TextBlobCache for text rendering
* Fix blend shader doesn't compile
* Add TextBlob as an immutable container for glyph rendering
* Rework FramebufferDesc, add FramebufferCache to manage framebuffers
* Basically implement texture copy task, implement Surface.onNewImageSnapshot()
* Add factory method to create Surface
* Implement Device management
* Invalidate atlases if RC.snap() failed
* Fix several threading issues for OpenGL backend
* Handle ColorFilter properly
* Add BlendModeShader
* Fix color space transformation on paint's solid color
* Add primitive color blending and color space transform
* Add blending with shader and paint's alpha
* Fix color space transformation on BlendModeColorFilter
* Add implementation of BlendModeShader and BlendModeColorFilter
* Remove Geometry interface
* Add Vertices class and Vertices step to drawVertices
* Add shader implementation for 42 blend modes
* Fix arg name for uniforms that start with no mangle prefix
* Add StaticBufferManager and Buffer-to-Buffer copy task
* Fix ImageUploadTask bug
* Implement remaining important Canvas methods
* Add and implement new Canvas methods in Device
* Fix depth is perspective-correct; the depth should be preserved, then multiply it by w.
* Fix bugs on arc shader with square end
* Finish methods to create and draw GlyphRuns
* Add method to set Matrix elements
* Fix Matrix4.hashCode() for negative zero
* Add Geometry.getBounds() to compute bounds
* Improve ClipStack to compute several bounds
* Fix stroke inflation radius computation for inner and outer stroke
* Optimize draw when it does not depend on dst
* Fix several issues on Device
* Implement the creation of AtlasSubRuns
* Add method to compute res scales if matrix has perspective
* Fix AnalyticSimpleBoxStep instance data type
* Add method to draw pie and chord, optimize shaders
* Add rendering with three cap types of stroke arcs initially
* Implement Atlas text op at low level, improve solid color fast path, trying to handle primitive color
* Fix ScalerContext_JDK does not return a reliable glyph bounds
* Fix DrawAtlas assertion and GlyphAtlasManager row stride
* Fix Strike and ScalerContext bugs, remove stroke cap in StrikeDesc
* Improve finite check and non-invertible matrix
* Add RendererProvider to manage GeometryRenderers
* Finish implementation of atlas management for draw ops and glyph atlas
* Calculate the Path byte size when generating Glyph in Strike
* Implement Strike, StrikeCache, and ScalerContext basically
* Add Paint.setPathEffect(), add missing javadoc in Font
* Add Path.transform(), add PathIterator.getFillRule()
* Add GPU dithering implementation (no texture lookup)
* Fix GLCaps.FormatInfo for RGB565
* Update Paint and related classes
* Make Blender and ColorFilter strictly ref-counted
* Add Shader.isConstant()
* Fix Canvas.drawCircle()
* Add Paint.setColor4f()
* Fix Paint.setStrokeWidth() and Paint.setStrokeMiter() for NaN values
* Remove Paint's SmoothWidth, MaskFilter and ImageFilter
* Add PathEffect skeleton class
* Fix several hashCode implementation for negative zeros
* Update Paint.nothingToDraw() for more blend modes
* Add more methods to RoundRect
* Update Surface, Canvas, and related classes
* Add Stroke, PathIterable, update PathStroker
* Optimize shaders
* Use short-circuit for transfer function
* Use texelFetch for cubic shader, remove invImageSize uniform
* Add perspective correction for local matrix shader
* Extract color space transform from image shaders
* Ensure subset sampling does not use mipmaps
* Implement bicubic and strict subset sampling
* Change AnalyticSimpleBoxStep to use L1 norm
* Fix bug on GLImageDesc.equals()
* Fix bug on uniform block layout
* Change Paint constants and SamplingOptions, adding classes for text rendering
* Done depth stencil work, fix several bugs
* Add flipY and unorm clamp for PixelUtils
* Implement LinearGradient, RadialGradient, AngularGradient
* Fix bugs on ImageShader.makeSubset()
* Fix bugs on premul & unpremul in some classes
* Improve ColorSpace transform, add PixelUtils.convertPixels()
* Add new ColorSpace transform shader
* Fix GLSampler TEXTURE_WRAP_R is not set, add validation for SamplerDesc
* Fix Matrix4.invert, add Matrix.toMatrix4, fix UniformDataGatherer for mat3
* Make Paint, PaintParams, and Draw classes closeable
* Fix TextureTracker; rename gradient shaders
* Optimize box shader
* Accumulated updates on fragment effects and shading pipeline
* Implement simple pixel upload using image-to-image copy
* Add new Shader and ColorFilter classes
* Rename PixelMap to Pixmap, PixelRef to Pixels
* Switch slow JNI to PixelUtils.copyImage() for array to off-heap copy
* Remove the offset parameter of Buffer.unmap()
* Finish AnalyticSimpleBoxStep
* Allow implicit conversion between numerics
* Add DepthStencilSettings and BoundsManager, limit the number of geometry steps
* Optimize vertex writer and uniform writer, optimize uniform data deduplication
* Basically complete the Granite Renderer
* Add geometry projection, solid color simplification
* Finish RenderPassTask execution Fix scissor origin, initial scissor setup
* Complete DrawPass's texture sampler binding
* Add TextureDataGatherer, texture sampler binding and tracker
* Add UniformDataGatherer and UniformDataCache
* Fix Matrix4.store()
* Add framebuffer creation and some tests
* Some work on new PipelineBuilder
* Update Buffer, GLBuffer, persistent mapping and so on
* Accumulative updates for new renderer
* Add method for updating clip draws
* Update ClipStack
* Improve vertex specification and buffer binding
* Rename the project from 'Arc 3D' to 'Arc3D'
* Commit all accumulative updates
* Change BlendMode.apply() to static methods
* Accumulative updates for the new pipeline
* Attempt to refactor pipeline
* Add more classes for new pipeline
* Add frexp & ldexp impl
* Some attempts on pipeline
* Refactor GPU Image, RenderTarget, SurfaceProxy classes; remove Texture
* Add Image and Framebuffer creation, add reusable framebuffers
* Refactor GpuResource class hierarchy
* Support GL_CONTEXT_LOST
* Tons of work on Engine and OpenGL backend, not listed
* Add pre-defined extensions to compile options
* A lot of work on abstraction between GL3 and GLES3
* Initially add GLInterface for both OpenGL & OpenGL ES support
* Add std140/std430 layout qualifiers, add include directive parsing
* Abandon usage of GLSL ARB extensions that core in later versions
* Fix GLCaps crash for some capabilities
* Fix some bugs in preprocessing
* Other improvements
* Add new preprocessing methods, allow sub-range source
* Add StringLiteral grammar, fix Whitespace grammar
* Add FatalError to terminate compiler
* Add identifier name length check (1024 at most)
* Add benchmark between Arc3D and shaderc (glslang)
* Update Lexer
* Add directive grammar
* Add 'using' grammar for type aliases
* Add newline token, fix block comment grammar
### Modern UI 3.11.0.1
#### Forge Extension 1.20.1 / NeoForge Extension 1.20.1
* Add MinecraftSurfaceView to handle raw rendering calls
* Ensure that all (native/GPU) resources are closed when the game exits
* Slightly improve the Center UI
* Fix a random crash when opening/closing UI frequently
* Rework tooltip rendering
- Add white noise to shadow
- Add dithering to gradient colors
- Use L1 norm instead of L2 norm for coverage antialiasing
- Change shadow approximation method
- Change default border radius and shadow alpha
- Add new conditions for adding the extra space below tooltip title line
- If the first three lines of the tooltip have different styles, we consider the first line as the title
- Reduce the saturation of default tooltip colors
* Allow using arrow keys to manually scroll the tooltip
* Add small epsilon to text Z value for tooltip rendering to work around FP errors on some GPUs
* Optimize blur effect
- Use texelFetch instead of texture
- Remove the additional blit pass and render target because we work around a Minecraft bug
- Try to cache the shader program and temporary render target for blurring, and handle errors
- Apply blur effect to the screen background instead of the world, just like Minecraft 1.20.6
* Migrate to new rendering pipeline
#### Fabric Extension 1.20.1
* Add support for Minecraft 1.20
* Fix key binding not working in some cases
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.20.1
* Add compatibility for bitmap fonts with custom text shader
* Enable linear metrics and disable font hinting by default
* Add config to change the minimum pixel density for SDF text
* Fix some possible bugs on text rendering
* Optimize text rendering
- Add texture cleanup to FontResourceManager
- Simplify text layout rendering code
- Use Math.round for aligning pixels
- Fix glyph info for FontSet compatibility
* Rework and optimize bitmap font rendering
- Try to stitch bitmap font into atlas
- Try to discard bitmap fonts if they have negative metrics, transparent pixels, or huge metrics
- Saturate glyph metrics for bitmap font
- Fix hashCode and equals for correct de-duplication
* Adjust lod bias for normal text shader
* Adjust bitmap font to match vanilla behavior
- Adjust glyph advance calculation
* Adjust Unicode font loading behavior
- Any reference to vanilla Unicode font and UNIHEX font will redirect to current ModernUI default typeface list
instead of system fonts, except for Minecraft default font set
* Fix text layout bug when finding style transitions
* Allow caching the missing glyph to atlas
* Adopt full text rendering technology from core framework
* Fix line breaker that may output no lines and keep consistency with vanilla behavior
- This fix a bug with IBE Editor
* Fix text strike cache invalidation for FontSet compatibility
- This fix a bug with Create
* Add text layout dump in advanced options
* Add a command for debugging line breaker
* Add methods for debugging text engine
#### Core Framework
* Enable linear text by default, increase layout cache limit
* Delete render thread executor
* Delete old text rendering code
* Add GradientDrawable that draw shapes with gradient colors
* Update/fix ShapeDrawable with latest rendering pipeline
* Add set/get ColorFilter to Drawable and ImageView Add ImageView.setImageTintBlendMode
* Rework ImageDrawable.setSrcRect() method
* Update ImageDrawable with antialias, dither, filter, and tile modes
* Add setter/getter to change blend mode for edge effect
* Change default blend mode for EdgeEffect from SRC_OVER to SRC_ATOP
* Fix Matrix.mapRect()
* Fix EdgeEffect centerX
* Improve text rendering
* Add AngularGradient API and implementation
* Add RadialGradient API and implementation
* Add LinearGradient API and implementation
* Add GradientShader API and implementation
* Add new draw methods to Canvas class
* Add BlendModeColorFilter and make it work finally, default blend mode for ImageDrawable is SRC_IN
* Add ColorFilter class that can be installed on Paint
* Refactor Image class and fix Image.close() issue
* Refactor Paint class
* Add ImageShader class
* Add Shader class that can be installed on Paint
* Add TextView.setTextSize() that specifies a unit, default is sp
* Full migration to the new rendering pipeline, Arc3D Granite Renderer; delete old GLSurfaceCanvas
* Avoid re-layout on window minimized, since framebuffer is destroyed and size is 0
* Deprecate Canvas.saveLayer() for future layer compositor and render tree
#### Core Framework - Kotlin Extension
* No changes
#### Markdown Extension
* No changes
#### Arc3D Graphics Engine
* Remove old usage of Image.getSurfaceFlags
* Add Image.getUniqueID() and static methods to create raster images
* Add utility NoDrawCanvas NWayCanvas and PaintFilterCanvas
* Fix Matrix.mapRect() is not correct
* Fix compiler error
* Optimize text ops if subRunToDevice is translation-only and pipeline does not require local coords trivially
* Optimize matrix computation for text ops
* Replace Matrix4 in rendering code with Matrix
* Make Matrix4() construct an identity matrix, and Matrix4.identity() return a read-only identity matrix
* Fix TextBlobBuilder offsets not reset after build
* Add RoundRect flatten methods
* Improve NoPixelsDevice clip tracking, remove ConservativeClip
* Add DrawAtlas.purge() to free unused pages
* Add implementation for gradients in other interpolation color spaces and for all hue interpolation methods
* Allow DrawAtlas to perform an immediate compact
* Rename some classes and methods
* Change the default uniform buffer block size to 32KB
* Fix color array copy in Vertices::makeCopy
* Fix persistent mapping check in GLBuffer
* Temporarily enable RGB texture in OpenGL
* Try to share vertex array objects in OpenGL backend
* Expose resource cleanup API, also cleanup framebuffer cache and strike cache
* Review ResourceCache, fix some legacy issues
* Add support for alpha-only images, add missing Shaders shader implementation
* Purge framebuffers immediately after one attachment was destroyed
* Complete the compatibility with OpenGL 3.3 and OpenGL ES 3.0
* Improve texture and renderbuffer creation
* Deprecate old Device methods
* Fix OpenGL 3.3 and GLSL 330 compatibility
* Finalize BoundsManager, add samples
* Add plus_clamped, minus, and minus_clamped blend info
* Remove 01 coverage in non-aa case
* Add blend equation in GL backend
* Mark old code as deprecated
* Implement basic functionality for final blender, enable dual source blending
* Fully implement BakedTextBlob and TextBlobCache for text rendering
* Fix blend shader doesn't compile
* Add TextBlob as an immutable container for glyph rendering
* Rework FramebufferDesc, add FramebufferCache to manage framebuffers
* Basically implement texture copy task, implement Surface.onNewImageSnapshot()
* Add factory method to create Surface
* Implement Device management
* Invalidate atlases if RC.snap() failed
* Fix several threading issues for OpenGL backend
* Handle ColorFilter properly
* Add BlendModeShader
* Fix color space transformation on paint's solid color
* Add primitive color blending and color space transform
* Add blending with shader and paint's alpha
* Fix color space transformation on BlendModeColorFilter
* Add implementation of BlendModeShader and BlendModeColorFilter
* Remove Geometry interface
* Add Vertices class and Vertices step to drawVertices
* Add shader implementation for 42 blend modes
* Fix arg name for uniforms that start with no mangle prefix
* Add StaticBufferManager and Buffer-to-Buffer copy task
* Fix ImageUploadTask bug
* Implement remaining important Canvas methods
* Add and implement new Canvas methods in Device
* Fix depth is perspective-correct; the depth should be preserved, then multiply it by w.
* Fix bugs on arc shader with square end
* Finish methods to create and draw GlyphRuns
* Add method to set Matrix elements
* Fix Matrix4.hashCode() for negative zero
* Add Geometry.getBounds() to compute bounds
* Improve ClipStack to compute several bounds
* Fix stroke inflation radius computation for inner and outer stroke
* Optimize draw when it does not depend on dst
* Fix several issues on Device
* Implement the creation of AtlasSubRuns
* Add method to compute res scales if matrix has perspective
* Fix AnalyticSimpleBoxStep instance data type
* Add method to draw pie and chord, optimize shaders
* Add rendering with three cap types of stroke arcs initially
* Implement Atlas text op at low level, improve solid color fast path, trying to handle primitive color
* Fix ScalerContext_JDK does not return a reliable glyph bounds
* Fix DrawAtlas assertion and GlyphAtlasManager row stride
* Fix Strike and ScalerContext bugs, remove stroke cap in StrikeDesc
* Improve finite check and non-invertible matrix
* Add RendererProvider to manage GeometryRenderers
* Finish implementation of atlas management for draw ops and glyph atlas
* Calculate the Path byte size when generating Glyph in Strike
* Implement Strike, StrikeCache, and ScalerContext basically
* Add Paint.setPathEffect(), add missing javadoc in Font
* Add Path.transform(), add PathIterator.getFillRule()
* Add GPU dithering implementation (no texture lookup)
* Fix GLCaps.FormatInfo for RGB565
* Update Paint and related classes
* Make Blender and ColorFilter strictly ref-counted
* Add Shader.isConstant()
* Fix Canvas.drawCircle()
* Add Paint.setColor4f()
* Fix Paint.setStrokeWidth() and Paint.setStrokeMiter() for NaN values
* Remove Paint's SmoothWidth, MaskFilter and ImageFilter
* Add PathEffect skeleton class
* Fix several hashCode implementation for negative zeros
* Update Paint.nothingToDraw() for more blend modes
* Add more methods to RoundRect
* Update Surface, Canvas, and related classes
* Add Stroke, PathIterable, update PathStroker
* Optimize shaders
* Use short-circuit for transfer function
* Use texelFetch for cubic shader, remove invImageSize uniform
* Add perspective correction for local matrix shader
* Extract color space transform from image shaders
* Ensure subset sampling does not use mipmaps
* Implement bicubic and strict subset sampling
* Change AnalyticSimpleBoxStep to use L1 norm
* Fix bug on GLImageDesc.equals()
* Fix bug on uniform block layout
* Change Paint constants and SamplingOptions, adding classes for text rendering
* Done depth stencil work, fix several bugs
* Add flipY and unorm clamp for PixelUtils
* Implement LinearGradient, RadialGradient, AngularGradient
* Fix bugs on ImageShader.makeSubset()
* Fix bugs on premul & unpremul in some classes
* Improve ColorSpace transform, add PixelUtils.convertPixels()
* Add new ColorSpace transform shader
* Fix GLSampler TEXTURE_WRAP_R is not set, add validation for SamplerDesc
* Fix Matrix4.invert, add Matrix.toMatrix4, fix UniformDataGatherer for mat3
* Make Paint, PaintParams, and Draw classes closeable
* Fix TextureTracker; rename gradient shaders
* Optimize box shader
* Accumulated updates on fragment effects and shading pipeline
* Implement simple pixel upload using image-to-image copy
* Add new Shader and ColorFilter classes
* Rename PixelMap to Pixmap, PixelRef to Pixels
* Switch slow JNI to PixelUtils.copyImage() for array to off-heap copy
* Remove the offset parameter of Buffer.unmap()
* Finish AnalyticSimpleBoxStep
* Allow implicit conversion between numerics
* Add DepthStencilSettings and BoundsManager, limit the number of geometry steps
* Optimize vertex writer and uniform writer, optimize uniform data deduplication
* Basically complete the Granite Renderer
* Add geometry projection, solid color simplification
* Finish RenderPassTask execution Fix scissor origin, initial scissor setup
* Complete DrawPass's texture sampler binding
* Add TextureDataGatherer, texture sampler binding and tracker
* Add UniformDataGatherer and UniformDataCache
* Fix Matrix4.store()
* Add framebuffer creation and some tests
* Some work on new PipelineBuilder
* Update Buffer, GLBuffer, persistent mapping and so on
* Accumulative updates for new renderer
* Add method for updating clip draws
* Update ClipStack
* Improve vertex specification and buffer binding
* Rename the project from 'Arc 3D' to 'Arc3D'
* Commit all accumulative updates
* Change BlendMode.apply() to static methods
* Accumulative updates for the new pipeline
* Attempt to refactor pipeline
* Add more classes for new pipeline
* Add frexp & ldexp impl
* Some attempts on pipeline
* Refactor GPU Image, RenderTarget, SurfaceProxy classes; remove Texture
* Add Image and Framebuffer creation, add reusable framebuffers
* Refactor GpuResource class hierarchy
* Support GL_CONTEXT_LOST
* Tons of work on Engine and OpenGL backend, not listed
* Add pre-defined extensions to compile options
* A lot of work on abstraction between GL3 and GLES3
* Initially add GLInterface for both OpenGL & OpenGL ES support
* Add std140/std430 layout qualifiers, add include directive parsing
* Abandon usage of GLSL ARB extensions that core in later versions
* Fix GLCaps crash for some capabilities
* Fix some bugs in preprocessing
* Other improvements
* Add new preprocessing methods, allow sub-range source
* Add StringLiteral grammar, fix Whitespace grammar
* Add FatalError to terminate compiler
* Add identifier name length check (1024 at most)
* Add benchmark between Arc3D and shaderc (glslang)
* Update Lexer
* Add directive grammar
* Add 'using' grammar for type aliases
* Add newline token, fix block comment grammar
### Modern UI 3.10.1.5
#### NeoForge Extension 1.20.4
* Do not use new word breaker in command mode
* Add preferences navigation to mods config button
* Improve PreferencesFragment
* Add API to allow back to previous screen, allow passing a ScreenCallback
* Add API to create MuiScreen
* Add Segoe UI Symbol to default fallback list
* Fix issue with TrueType Collection registration
* Add font registration config to register additional fonts
* Add modifiers to ACTION_SCROLL event
* Add showing layout bounds
* Add adaptive tooltip colors
* Renew tooltip rendering
- Create rendertype_modern_tooltip shader
- Interpolate color bilinearly in sRGB space
- Better shadow effect, add shadow opacity
- Add corner radius config
- Adjust auto scrolling velocity
- Fix bugs on exact positioning with some mods
* Fix a rare crash on config reloading due to thread-safety
* Apply blur effect only to screens that have default background (configurable)
* Do not use Overwrite for calculateScale
* Fix startup crash on server and datagen
* Fix EditBox deletion undo not working
* Refactor project structure and bootstrap
#### Forge Extension 1.20.4
* Remove ScreenCallback capability
* Others are equivalent to NeoForge version
#### Fabric Extension 1.20.4
* Fix tooltip compatibility with Sodium
* Others are functionally equivalent to NeoForge version
#### Modern Text Engine 1.20.4
* Change logging level for font loading, enhance onFontRegistered thread-safety
* Add new default font behaviors and rule set, allowing regexes to match fonts
* Adjust text renderer alpha threshold from 1 to 2 (0-255)
* Fix only a very small set of characters can be used for obfuscated rendering
* Use Latin1 for FastCharSet
* Fix a rare crash on text engine due to batch rendering and display mode changes
#### Core Framework 3.10.1
* Update typecast checks, add ArrayMap.forEach
* Make FontFamily.createFamily throw Exception
* Add FontFamily.createFamilies for TrueType Collection
* Add HorizontalScrollView, update ScrollView
* Add debug layout to show layout bounds
* Optimize Color.parseColor
* Add Animatable and Animatable2
* Add some missing javadoc
* Use UTF-16 for TextUtils read/write
* Add TextPaint.baselineShift and Subscript/SuperscriptSpan
* Disable pooling of Message objects
* Build against a copy of Arc3D, instead of composite build
* Add Canvas.shear / skew, deprecate Canvas.getMatrix
* Add TextUtils.concat and TextUtils.join methods
* Make use of Java 20 float/half convert instruction
* Add CharBuffer support for TextUtils.getChars()
#### Core Framework - Kotlin Extension 3.10.1
* No changes
#### Markdown 3.10.1
* No changes
#### Arc 3D Graphics Engine 3.10.1
* Add 3D shearing transform methods
* Improve GL_TEXTURE_SWIZZLE_RGBA compatibility
* Tons of updates on DSL shader compiler, including new grammar parsing and SPIR-V generation, no detailed information provided
### Modern UI 3.10.1.5
#### NeoForge Extension 1.20.4
* Do not use new word breaker in command mode
* Add preferences navigation to mods config button
* Improve PreferencesFragment
* Add API to allow back to previous screen, allow passing a ScreenCallback
* Add API to create MuiScreen
* Add Segoe UI Symbol to default fallback list
* Fix issue with TrueType Collection registration
* Add font registration config to register additional fonts
* Add modifiers to ACTION_SCROLL event
* Add showing layout bounds
* Add adaptive tooltip colors
* Renew tooltip rendering
- Create rendertype_modern_tooltip shader
- Interpolate color bilinearly in sRGB space
- Better shadow effect, add shadow opacity
- Add corner radius config
- Adjust auto scrolling velocity
- Fix bugs on exact positioning with some mods
* Fix a rare crash on config reloading due to thread-safety
* Apply blur effect only to screens that have default background (configurable)
* Do not use Overwrite for calculateScale
* Fix startup crash on server and datagen
* Fix EditBox deletion undo not working
* Refactor project structure and bootstrap
#### Forge Extension 1.20.4
* Remove ScreenCallback capability
* Others are equivalent to NeoForge version
#### Fabric Extension 1.20.4
* Fix tooltip compatibility with Sodium
* Others are functionally equivalent to NeoForge version
#### Modern Text Engine 1.20.4
* Change logging level for font loading, enhance onFontRegistered thread-safety
* Add new default font behaviors and rule set, allowing regexes to match fonts
* Adjust text renderer alpha threshold from 1 to 2 (0-255)
* Fix only a very small set of characters can be used for obfuscated rendering
* Use Latin1 for FastCharSet
* Fix a rare crash on text engine due to batch rendering and display mode changes
#### Core Framework 3.10.1
* Update typecast checks, add ArrayMap.forEach
* Make FontFamily.createFamily throw Exception
* Add FontFamily.createFamilies for TrueType Collection
* Add HorizontalScrollView, update ScrollView
* Add debug layout to show layout bounds
* Optimize Color.parseColor
* Add Animatable and Animatable2
* Add some missing javadoc
* Use UTF-16 for TextUtils read/write
* Add TextPaint.baselineShift and Subscript/SuperscriptSpan
* Disable pooling of Message objects
* Build against a copy of Arc3D, instead of composite build
* Add Canvas.shear / skew, deprecate Canvas.getMatrix
* Add TextUtils.concat and TextUtils.join methods
* Make use of Java 20 float/half convert instruction
* Add CharBuffer support for TextUtils.getChars()
#### Core Framework - Kotlin Extension 3.10.1
* No changes
#### Markdown 3.10.1
* No changes
#### Arc 3D Graphics Engine 3.10.1
* Add 3D shearing transform methods
* Improve GL_TEXTURE_SWIZZLE_RGBA compatibility
* Tons of updates on DSL shader compiler, including new grammar parsing and SPIR-V generation, no detailed information provided
### Modern UI 3.10.1.5
#### NeoForge Extension 1.20.4
* Do not use new word breaker in command mode
* Add preferences navigation to mods config button
* Improve PreferencesFragment
* Add API to allow back to previous screen, allow passing a ScreenCallback
* Add API to create MuiScreen
* Add Segoe UI Symbol to default fallback list
* Fix issue with TrueType Collection registration
* Add font registration config to register additional fonts
* Add modifiers to ACTION_SCROLL event
* Add showing layout bounds
* Add adaptive tooltip colors
* Renew tooltip rendering
- Create rendertype_modern_tooltip shader
- Interpolate color bilinearly in sRGB space
- Better shadow effect, add shadow opacity
- Add corner radius config
- Adjust auto scrolling velocity
- Fix bugs on exact positioning with some mods
* Fix a rare crash on config reloading due to thread-safety
* Apply blur effect only to screens that have default background (configurable)
* Do not use Overwrite for calculateScale
* Fix startup crash on server and datagen
* Fix EditBox deletion undo not working
* Refactor project structure and bootstrap
#### Forge Extension 1.20.4
* Remove ScreenCallback capability
* Others are equivalent to NeoForge version
#### Fabric Extension 1.20.4
* Fix tooltip compatibility with Sodium
* Others are functionally equivalent to NeoForge version
#### Modern Text Engine 1.20.4
* Change logging level for font loading, enhance onFontRegistered thread-safety
* Add new default font behaviors and rule set, allowing regexes to match fonts
* Adjust text renderer alpha threshold from 1 to 2 (0-255)
* Fix only a very small set of characters can be used for obfuscated rendering
* Use Latin1 for FastCharSet
* Fix a rare crash on text engine due to batch rendering and display mode changes
#### Core Framework 3.10.1
* Update typecast checks, add ArrayMap.forEach
* Make FontFamily.createFamily throw Exception
* Add FontFamily.createFamilies for TrueType Collection
* Add HorizontalScrollView, update ScrollView
* Add debug layout to show layout bounds
* Optimize Color.parseColor
* Add Animatable and Animatable2
* Add some missing javadoc
* Use UTF-16 for TextUtils read/write
* Add TextPaint.baselineShift and Subscript/SuperscriptSpan
* Disable pooling of Message objects
* Build against a copy of Arc3D, instead of composite build
* Add Canvas.shear / skew, deprecate Canvas.getMatrix
* Add TextUtils.concat and TextUtils.join methods
* Make use of Java 20 float/half convert instruction
* Add CharBuffer support for TextUtils.getChars()
#### Core Framework - Kotlin Extension 3.10.1
* No changes
#### Markdown 3.10.1
* No changes
#### Arc 3D Graphics Engine 3.10.1
* Add 3D shearing transform methods
* Improve GL_TEXTURE_SWIZZLE_RGBA compatibility
* Tons of updates on DSL shader compiler, including new grammar parsing and SPIR-V generation, no detailed information provided
### Modern UI 3.10.1.4
#### Forge Extension 1.20.1 / NeoForge Extension 1.20.1
* Do not use new word breaker in command mode
* Add preferences navigation to mods config button
* Improve PreferencesFragment
* Add API to allow back to previous screen, allow passing a ScreenCallback
* Add API to create MuiScreen
* Add Segoe UI Symbol to default fallback list
* Fix issue with TrueType Collection registration
* Add font registration config to register additional fonts
* Add modifiers to ACTION_SCROLL event
* Add showing layout bounds
* Add adaptive tooltip colors
* Renew tooltip rendering
- Create rendertype_modern_tooltip shader
- Interpolate color bilinearly in sRGB space
- Better shadow effect, add shadow opacity
- Add corner radius config
- Adjust auto scrolling velocity
- Fix bugs on exact positioning with some mods
* Fix a rare crash on config reloading due to thread-safety
* Apply blur effect only to screens that have default background (configurable)
* Do not use Overwrite for calculateScale
* Fix startup crash on server and datagen
* Remove ScreenCallback capability
* Refactor project structure and bootstrap
#### Fabric Extension 1.20.1
* Fix tooltip compatibility with Sodium
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.20.1
* Change logging level for font loading, enhance onFontRegistered thread-safety
* Add new default font behaviors and rule set, allowing regexes to match fonts
* Adjust text renderer alpha threshold from 1 to 2 (0-255)
* Fix only a very small set of characters can be used for obfuscated rendering
* Use Latin1 for FastCharSet
* Fix a rare crash on text engine due to batch rendering and display mode changes
#### Core Framework 3.10.1
* Update typecast checks, add ArrayMap.forEach
* Make FontFamily.createFamily throw Exception
* Add FontFamily.createFamilies for TrueType Collection
* Add HorizontalScrollView, update ScrollView
* Add debug layout to show layout bounds
* Optimize Color.parseColor
* Add Animatable and Animatable2
* Add some missing javadoc
* Use UTF-16 for TextUtils read/write
* Add TextPaint.baselineShift and Subscript/SuperscriptSpan
* Disable pooling of Message objects
* Build against a copy of Arc3D, instead of composite build
* Add Canvas.shear / skew, deprecate Canvas.getMatrix
* Add TextUtils.concat and TextUtils.join methods
* Make use of Java 20 float/half convert instruction
* Add CharBuffer support for TextUtils.getChars()
#### Core Framework - Kotlin Extension 3.10.1
* No changes
#### Markdown 3.10.1
* No changes
#### Arc 3D Graphics Engine 3.10.1
* Add 3D shearing transform methods
* Improve GL_TEXTURE_SWIZZLE_RGBA compatibility
* Tons of updates on DSL shader compiler, including new grammar parsing and SPIR-V generation, no detailed information provided
### Modern UI 3.10.1.4
#### Forge Extension 1.20.1 / NeoForge Extension 1.20.1
* Do not use new word breaker in command mode
* Add preferences navigation to mods config button
* Improve PreferencesFragment
* Add API to allow back to previous screen, allow passing a ScreenCallback
* Add API to create MuiScreen
* Add Segoe UI Symbol to default fallback list
* Fix issue with TrueType Collection registration
* Add font registration config to register additional fonts
* Add modifiers to ACTION_SCROLL event
* Add showing layout bounds
* Add adaptive tooltip colors
* Renew tooltip rendering
- Create rendertype_modern_tooltip shader
- Interpolate color bilinearly in sRGB space
- Better shadow effect, add shadow opacity
- Add corner radius config
- Adjust auto scrolling velocity
- Fix bugs on exact positioning with some mods
* Fix a rare crash on config reloading due to thread-safety
* Apply blur effect only to screens that have default background (configurable)
* Do not use Overwrite for calculateScale
* Fix startup crash on server and datagen
* Remove ScreenCallback capability
* Refactor project structure and bootstrap
#### Fabric Extension 1.20.1
* Fix tooltip compatibility with Sodium
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.20.1
* Change logging level for font loading, enhance onFontRegistered thread-safety
* Add new default font behaviors and rule set, allowing regexes to match fonts
* Adjust text renderer alpha threshold from 1 to 2 (0-255)
* Fix only a very small set of characters can be used for obfuscated rendering
* Use Latin1 for FastCharSet
* Fix a rare crash on text engine due to batch rendering and display mode changes
#### Core Framework 3.10.1
* Update typecast checks, add ArrayMap.forEach
* Make FontFamily.createFamily throw Exception
* Add FontFamily.createFamilies for TrueType Collection
* Add HorizontalScrollView, update ScrollView
* Add debug layout to show layout bounds
* Optimize Color.parseColor
* Add Animatable and Animatable2
* Add some missing javadoc
* Use UTF-16 for TextUtils read/write
* Add TextPaint.baselineShift and Subscript/SuperscriptSpan
* Disable pooling of Message objects
* Build against a copy of Arc3D, instead of composite build
* Add Canvas.shear / skew, deprecate Canvas.getMatrix
* Add TextUtils.concat and TextUtils.join methods
* Make use of Java 20 float/half convert instruction
* Add CharBuffer support for TextUtils.getChars()
#### Core Framework - Kotlin Extension 3.10.1
* No changes
#### Markdown 3.10.1
* No changes
#### Arc 3D Graphics Engine 3.10.1
* Add 3D shearing transform methods
* Improve GL_TEXTURE_SWIZZLE_RGBA compatibility
* Tons of updates on DSL shader compiler, including new grammar parsing and SPIR-V generation, no detailed information provided
### Modern UI 3.10.1.3
#### Forge Extension 1.19.4
* Do not use new word breaker in command mode
* Add preferences navigation to mods config button
* Improve PreferencesFragment
* Add API to allow back to previous screen, allow passing a ScreenCallback
* Add API to create MuiScreen
* Add Segoe UI Symbol to default fallback list
* Fix issue with TrueType Collection registration
* Add font registration config to register additional fonts
* Add modifiers to ACTION_SCROLL event
* Add showing layout bounds
* Add adaptive tooltip colors
* Renew tooltip rendering
- Create rendertype_modern_tooltip shader
- Interpolate color bilinearly in sRGB space
- Better shadow effect, add shadow opacity
- Add corner radius config
- Adjust auto scrolling velocity
* Fix a rare crash on config reloading due to thread-safety
* Apply blur effect only to screens that have default background (configurable)
* Do not use Overwrite for calculateScale
* Fix startup crash on server and datagen
* Remove ScreenCallback capability
#### Modern Text Engine 1.19.4
* Change logging level for font loading, enhance onFontRegistered thread-safety
* Add new default font behaviors and rule set, allowing regexes to match fonts
* Adjust text renderer alpha threshold from 1 to 2 (0-255)
* Fix only a very small set of characters can be used for obfuscated rendering
* Use Latin1 for FastCharSet
* Fix a rare crash on text engine due to batch rendering and display mode changes
#### Core Framework 3.10.1
* Update typecast checks, add ArrayMap.forEach
* Make FontFamily.createFamily throw Exception
* Add FontFamily.createFamilies for TrueType Collection
* Add HorizontalScrollView, update ScrollView
* Add debug layout to show layout bounds
* Optimize Color.parseColor
* Add Animatable and Animatable2
* Add some missing javadoc
* Use UTF-16 for TextUtils read/write
* Add TextPaint.baselineShift and Subscript/SuperscriptSpan
* Disable pooling of Message objects
* Build against a copy of Arc3D, instead of composite build
* Add Canvas.shear / skew, deprecate Canvas.getMatrix
* Add TextUtils.concat and TextUtils.join methods
* Make use of Java 20 float/half convert instruction
* Add CharBuffer support for TextUtils.getChars()
#### Core Framework - Kotlin Extension 3.10.1
* No changes
#### Markdown 3.10.1
* No changes
#### Arc 3D Graphics Engine 3.10.1
* Add 3D shearing transform methods
* Improve GL_TEXTURE_SWIZZLE_RGBA compatibility
* Tons of updates on DSL shader compiler, including new grammar parsing and SPIR-V generation, no detailed information provided
### Modern UI 3.10.1.2
#### Forge Extension 1.19.2
* Do not use new word breaker in command mode
* Add preferences navigation to mods config button
* Improve PreferencesFragment
* Add API to allow back to previous screen, allow passing a ScreenCallback
* Add API to create MuiScreen
* Add Segoe UI Symbol to default fallback list
* Fix issue with TrueType Collection registration
* Add font registration config to register additional fonts
* Add modifiers to ACTION_SCROLL event
* Add showing layout bounds
* Add adaptive tooltip colors
* Renew tooltip rendering
- Create rendertype_modern_tooltip shader
- Interpolate color bilinearly in sRGB space
- Better shadow effect, add shadow opacity
- Add corner radius config
- Adjust auto scrolling velocity
* Remove tooltip fade-in animation
* Fix a rare crash on config reloading due to thread-safety
* Apply blur effect only to screens that have default background (configurable)
* Do not use Overwrite for calculateScale
* Fix startup crash on server and datagen
* Remove ScreenCallback capability
#### Modern Text Engine 1.19.2
* Change logging level for font loading, enhance onFontRegistered thread-safety
* Add new default font behaviors and rule set, allowing regexes to match fonts
* Adjust text renderer alpha threshold from 1 to 2 (0-255)
* Fix only a very small set of characters can be used for obfuscated rendering
* Use Latin1 for FastCharSet
* Fix a rare crash on text engine due to batch rendering and display mode changes
#### Core Framework 3.10.1
* Update typecast checks, add ArrayMap.forEach
* Make FontFamily.createFamily throw Exception
* Add FontFamily.createFamilies for TrueType Collection
* Add HorizontalScrollView, update ScrollView
* Add debug layout to show layout bounds
* Optimize Color.parseColor
* Add Animatable and Animatable2
* Add some missing javadoc
* Use UTF-16 for TextUtils read/write
* Add TextPaint.baselineShift and Subscript/SuperscriptSpan
* Disable pooling of Message objects
* Build against a copy of Arc3D, instead of composite build
* Add Canvas.shear / skew, deprecate Canvas.getMatrix
* Add TextUtils.concat and TextUtils.join methods
* Make use of Java 20 float/half convert instruction
* Add CharBuffer support for TextUtils.getChars()
#### Core Framework - Kotlin Extension 3.10.1
* No changes
#### Markdown 3.10.1
* No changes
#### Arc 3D Graphics Engine 3.10.1
* Add 3D shearing transform methods
* Improve GL_TEXTURE_SWIZZLE_RGBA compatibility
* Tons of updates on DSL shader compiler, including new grammar parsing and SPIR-V generation, no detailed information provided
### Modern UI 3.10.1.1
#### Forge Extension 1.18.2
* Add IGNORE_ALL_VERSION display test
* Do not use new word breaker in command mode
* Add preferences navigation to mods config button
* Improve PreferencesFragment
* Add API to allow back to previous screen
* Add API to create MuiScreen
* Add MenuScreenFactory to create MenuScreen
* Add Segoe UI Symbol to default fallback list
* Fix issue with TrueType Collection registration
* Add font registration config to register additional fonts
* Add modifiers to ACTION_SCROLL event
* Add showing layout bounds
* Add adaptive tooltip colors
* Renew tooltip rendering
- Create rendertype_modern_tooltip shader
- Interpolate color bilinearly in sRGB space
- Better shadow effect, add shadow opacity
- Add corner radius config
- Adjust auto scrolling velocity
* Remove tooltip fade-in animation
* Fix a rare crash on config reloading due to thread-safety
* Apply blur effect only to screens that have default background (configurable)
* Do not use Overwrite for calculateScale
* Fix startup crash on server and datagen
#### Modern Text Engine 1.18.2
* Enhance onFontRegistered thread-safety
* Add new default font behaviors and rule set, allowing regexes to match fonts
* Adjust text renderer alpha threshold from 1 to 2 (0-255)
* Fix only a very small set of characters can be used for obfuscated rendering
* Use Latin1 for FastCharSet
* Fix a rare crash on text engine due to batch rendering and display mode changes
#### Core Framework 3.10.1
* Update typecast checks, add ArrayMap.forEach
* Make FontFamily.createFamily throw Exception
* Add FontFamily.createFamilies for TrueType Collection
* Add HorizontalScrollView, update ScrollView
* Add debug layout to show layout bounds
* Optimize Color.parseColor
* Add Animatable and Animatable2
* Add some missing javadoc
* Use UTF-16 for TextUtils read/write
* Add TextPaint.baselineShift and Subscript/SuperscriptSpan
* Disable pooling of Message objects
* Build against a copy of Arc3D, instead of composite build
* Add Canvas.shear / skew, deprecate Canvas.getMatrix
* Add TextUtils.concat and TextUtils.join methods
* Make use of Java 20 float/half convert instruction
* Add CharBuffer support for TextUtils.getChars()
#### Core Framework - Kotlin Extension 3.10.1
* No changes
#### Markdown 3.10.1
* No changes
#### Arc 3D Graphics Engine 3.10.1
* Add 3D shearing transform methods
* Improve GL_TEXTURE_SWIZZLE_RGBA compatibility
* Tons of updates on DSL shader compiler, including new grammar parsing and SPIR-V generation, no detailed information provided
### Modern UI 3.10.0.6
#### Forge Extension 1.20.4
* Add Markdown preview
* Use vanilla border style for modern tooltip (when rounded = false)
* Add font names for registered fonts, add JetBrains Mono
* Update to Emoji 15.1, remove Emoji 15 workaround
* Add auto scroll when tooltip is out of screen
* Add shadow effect for tooltip
* Add developer mode config to Preferences GUI
* Hide Advanced Options and Dev when not in developer mode
* Adjust default font behavior to be locale-sensitive
* Tweak fallback font loading behavior (now it accepts font files)
* Move destroy() method so that the game won't crash in forced tick after the window closes
* Handle glowing sign where text color is black
* Update Traditional Chinese - notlin4
#### NeoForge Extension 1.20.4
* Port to NeoForge
* Remove ScreenCallback capability
* Others are equivalent to Forge version
#### Fabric Extension 1.20.4
* Enhance tooltip compatibility with Sodium (when rounded = false)
* Add tooltip line wrapping for Fabric
* Add tooltip center title and title break for Fabric
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.20.4
* Add Untranslated Items integration
* Fix useComponentCache not working at all
* Fix force unicode font not working after game restart
* Fix line breaker SIOOBE for illegal string (this fixed crash with Better Statistics Screen)
#### Core Framework 3.10.0
* Move kotlin extension to a separate module (Core-KTX)
* Add Log class to avoid using log4j in submodules
* Implement blend mode filter for ShapeDrawable, ColorDrawable and other Drawable classes
* Fix incorrect drop-down position in RTL layout direction
* Fix MenuPopup overlap anchor (google-bug) (fix #199)
* Fix TextShaper context range for BiDi analysis
* Add LocaleSpan
* Add all 42 blend modes that used in Photoshop (currently no shader implementation)
* Update BlendMode and Color.blend()
* Change Bitmap.getSize() type to long
* Make Bitmap's color info mutable (for reinterpretation)
* Add path measurement implementation (PathMeasure class)
* Remove 2GB restriction on Bitmap creation, add more sanitizations
* Deprecate ImageStore, fix javadoc errors
* Update Bitmap with Arc3D
* Update Matrix and Path with Arc3D
* Fix Underline and Strikethrough offset
* Add "exclusive" East Asian family support (currently not used)
* Public Menu.setOptionalIconsVisible() method
* Change atlas coverage type to double
#### Core Framework - Kotlin Extension 3.10.0
* Add kotlin-flavored methods, update annotations
#### Markdown 3.10.0
* Suppress unchecked warning
#### Arc 3D Graphics Engine 3.10.0
* Add color filters and color matrix
* Add/update all blend modes and their raster implementations: PLUS, MINUS, DIFFERENCE, EXCLUSION, COLOR_DODGE, COLOR_BURN, HARD_LIGHT, SOFT_LIGHT, LINEAR_DODGE, LINEAR_BURN, VIVID_LIGHT, LINEAR_LIGHT, PIN_LIGHT, HARD_MIX and HSL blend modes (HUE, SATURATION, COLOR, LUMINOSITY)
* Rename shaderc package to compiler
* Add Image-derived and Shader-derived skeleton classes
* Add UNORM_PACK16 and UNORM_PACK32 encoding constant
* Public ColorType.channelFlags
* Add missing GRAY_ALPHA_88 for ColorType.encoding
* Add alpha type validation
* Make owner's reference to pixel map mutable
* Fix ColorSpace initializer
* Add Raster, remove heap version of Bitmap
* Add full path measurement implementation
* Add PixelUtils for pixel conversion
* Add PixelMap and PixelRef, remove Pixmap
* Add and optimize Path methods
* Add Path.bounds computation, optimize Path allocation
* Add Rect2fc and Rect2ic for read-only usage
* Inline Path.Ref usage count implementation
* Finish approximation of cubic strokes by quadratic splines
* Finish approximation of quadratic strokes by quadratic splines
* Add MathUtil.pin() method for capturing NaN values, replace some use of clamp()
* Add conic section to quadratic curves conversion
* Add several methods to reset the Path
* Finish RoundJoiner, fix Path reversePop
* Add Matrixc interface for read-only usage of Matrix
* Update and optimize PathStroker
* Optimize approximation of conic sections by quadratic splines
* Add PathConsumer
* Add Path tessellation for quadratic and cubic splines
* Add PathUtils and WangsFormula for subdivisions
* Add Path, add Path.Ref, add PathIterator
* Add Geometry class for finding inflection points, tangent, curvature, max curvature, cusp, solving quadratic equations, cubic equations, etc
* Add RefCounted interface
* Add Hardware transfer processor
* Optimize rectangle packer
### Modern UI 3.10.0.6
#### Forge Extension 1.20.4
* Add Markdown preview
* Use vanilla border style for modern tooltip (when rounded = false)
* Add font names for registered fonts, add JetBrains Mono
* Update to Emoji 15.1, remove Emoji 15 workaround
* Add auto scroll when tooltip is out of screen
* Add shadow effect for tooltip
* Add developer mode config to Preferences GUI
* Hide Advanced Options and Dev when not in developer mode
* Adjust default font behavior to be locale-sensitive
* Tweak fallback font loading behavior (now it accepts font files)
* Move destroy() method so that the game won't crash in forced tick after the window closes
* Handle glowing sign where text color is black
* Update Traditional Chinese - notlin4
#### NeoForge Extension 1.20.4
* Port to NeoForge
* Remove ScreenCallback capability
* Others are equivalent to Forge version
#### Fabric Extension 1.20.4
* Enhance tooltip compatibility with Sodium (when rounded = false)
* Add tooltip line wrapping for Fabric
* Add tooltip center title and title break for Fabric
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.20.4
* Add Untranslated Items integration
* Fix useComponentCache not working at all
* Fix force unicode font not working after game restart
* Fix line breaker SIOOBE for illegal string (this fixed crash with Better Statistics Screen)
#### Core Framework 3.10.0
* Move kotlin extension to a separate module (Core-KTX)
* Add Log class to avoid using log4j in submodules
* Implement blend mode filter for ShapeDrawable, ColorDrawable and other Drawable classes
* Fix incorrect drop-down position in RTL layout direction
* Fix MenuPopup overlap anchor (google-bug) (fix #199)
* Fix TextShaper context range for BiDi analysis
* Add LocaleSpan
* Add all 42 blend modes that used in Photoshop (currently no shader implementation)
* Update BlendMode and Color.blend()
* Change Bitmap.getSize() type to long
* Make Bitmap's color info mutable (for reinterpretation)
* Add path measurement implementation (PathMeasure class)
* Remove 2GB restriction on Bitmap creation, add more sanitizations
* Deprecate ImageStore, fix javadoc errors
* Update Bitmap with Arc3D
* Update Matrix and Path with Arc3D
* Fix Underline and Strikethrough offset
* Add "exclusive" East Asian family support (currently not used)
* Public Menu.setOptionalIconsVisible() method
* Change atlas coverage type to double
#### Core Framework - Kotlin Extension 3.10.0
* Add kotlin-flavored methods, update annotations
#### Markdown 3.10.0
* Suppress unchecked warning
#### Arc 3D Graphics Engine 3.10.0
* Add color filters and color matrix
* Add/update all blend modes and their raster implementations: PLUS, MINUS, DIFFERENCE, EXCLUSION, COLOR_DODGE, COLOR_BURN, HARD_LIGHT, SOFT_LIGHT, LINEAR_DODGE, LINEAR_BURN, VIVID_LIGHT, LINEAR_LIGHT, PIN_LIGHT, HARD_MIX and HSL blend modes (HUE, SATURATION, COLOR, LUMINOSITY)
* Rename shaderc package to compiler
* Add Image-derived and Shader-derived skeleton classes
* Add UNORM_PACK16 and UNORM_PACK32 encoding constant
* Public ColorType.channelFlags
* Add missing GRAY_ALPHA_88 for ColorType.encoding
* Add alpha type validation
* Make owner's reference to pixel map mutable
* Fix ColorSpace initializer
* Add Raster, remove heap version of Bitmap
* Add full path measurement implementation
* Add PixelUtils for pixel conversion
* Add PixelMap and PixelRef, remove Pixmap
* Add and optimize Path methods
* Add Path.bounds computation, optimize Path allocation
* Add Rect2fc and Rect2ic for read-only usage
* Inline Path.Ref usage count implementation
* Finish approximation of cubic strokes by quadratic splines
* Finish approximation of quadratic strokes by quadratic splines
* Add MathUtil.pin() method for capturing NaN values, replace some use of clamp()
* Add conic section to quadratic curves conversion
* Add several methods to reset the Path
* Finish RoundJoiner, fix Path reversePop
* Add Matrixc interface for read-only usage of Matrix
* Update and optimize PathStroker
* Optimize approximation of conic sections by quadratic splines
* Add PathConsumer
* Add Path tessellation for quadratic and cubic splines
* Add PathUtils and WangsFormula for subdivisions
* Add Path, add Path.Ref, add PathIterator
* Add Geometry class for finding inflection points, tangent, curvature, max curvature, cusp, solving quadratic equations, cubic equations, etc
* Add RefCounted interface
* Add Hardware transfer processor
* Optimize rectangle packer
### Modern UI 3.10.0.6
#### Forge Extension 1.20.4
* Add Markdown preview
* Use vanilla border style for modern tooltip (when rounded = false)
* Add font names for registered fonts, add JetBrains Mono
* Update to Emoji 15.1, remove Emoji 15 workaround
* Add auto scroll when tooltip is out of screen
* Add shadow effect for tooltip
* Add developer mode config to Preferences GUI
* Hide Advanced Options and Dev when not in developer mode
* Adjust default font behavior to be locale-sensitive
* Tweak fallback font loading behavior (now it accepts font files)
* Move destroy() method so that the game won't crash in forced tick after the window closes
* Handle glowing sign where text color is black
* Update Traditional Chinese - notlin4
#### NeoForge Extension 1.20.4
* Port to NeoForge
* Remove ScreenCallback capability
* Others are equivalent to Forge version
#### Fabric Extension 1.20.4
* Enhance tooltip compatibility with Sodium (when rounded = false)
* Add tooltip line wrapping for Fabric
* Add tooltip center title and title break for Fabric
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.20.4
* Add Untranslated Items integration
* Fix useComponentCache not working at all
* Fix force unicode font not working after game restart
* Fix line breaker SIOOBE for illegal string (this fixed crash with Better Statistics Screen)
#### Core Framework 3.10.0
* Move kotlin extension to a separate module (Core-KTX)
* Add Log class to avoid using log4j in submodules
* Implement blend mode filter for ShapeDrawable, ColorDrawable and other Drawable classes
* Fix incorrect drop-down position in RTL layout direction
* Fix MenuPopup overlap anchor (google-bug) (fix #199)
* Fix TextShaper context range for BiDi analysis
* Add LocaleSpan
* Add all 42 blend modes that used in Photoshop (currently no shader implementation)
* Update BlendMode and Color.blend()
* Change Bitmap.getSize() type to long
* Make Bitmap's color info mutable (for reinterpretation)
* Add path measurement implementation (PathMeasure class)
* Remove 2GB restriction on Bitmap creation, add more sanitizations
* Deprecate ImageStore, fix javadoc errors
* Update Bitmap with Arc3D
* Update Matrix and Path with Arc3D
* Fix Underline and Strikethrough offset
* Add "exclusive" East Asian family support (currently not used)
* Public Menu.setOptionalIconsVisible() method
* Change atlas coverage type to double
#### Core Framework - Kotlin Extension 3.10.0
* Add kotlin-flavored methods, update annotations
#### Markdown 3.10.0
* Suppress unchecked warning
#### Arc 3D Graphics Engine 3.10.0
* Add color filters and color matrix
* Add/update all blend modes and their raster implementations: PLUS, MINUS, DIFFERENCE, EXCLUSION, COLOR_DODGE, COLOR_BURN, HARD_LIGHT, SOFT_LIGHT, LINEAR_DODGE, LINEAR_BURN, VIVID_LIGHT, LINEAR_LIGHT, PIN_LIGHT, HARD_MIX and HSL blend modes (HUE, SATURATION, COLOR, LUMINOSITY)
* Rename shaderc package to compiler
* Add Image-derived and Shader-derived skeleton classes
* Add UNORM_PACK16 and UNORM_PACK32 encoding constant
* Public ColorType.channelFlags
* Add missing GRAY_ALPHA_88 for ColorType.encoding
* Add alpha type validation
* Make owner's reference to pixel map mutable
* Fix ColorSpace initializer
* Add Raster, remove heap version of Bitmap
* Add full path measurement implementation
* Add PixelUtils for pixel conversion
* Add PixelMap and PixelRef, remove Pixmap
* Add and optimize Path methods
* Add Path.bounds computation, optimize Path allocation
* Add Rect2fc and Rect2ic for read-only usage
* Inline Path.Ref usage count implementation
* Finish approximation of cubic strokes by quadratic splines
* Finish approximation of quadratic strokes by quadratic splines
* Add MathUtil.pin() method for capturing NaN values, replace some use of clamp()
* Add conic section to quadratic curves conversion
* Add several methods to reset the Path
* Finish RoundJoiner, fix Path reversePop
* Add Matrixc interface for read-only usage of Matrix
* Update and optimize PathStroker
* Optimize approximation of conic sections by quadratic splines
* Add PathConsumer
* Add Path tessellation for quadratic and cubic splines
* Add PathUtils and WangsFormula for subdivisions
* Add Path, add Path.Ref, add PathIterator
* Add Geometry class for finding inflection points, tangent, curvature, max curvature, cusp, solving quadratic equations, cubic equations, etc
* Add RefCounted interface
* Add Hardware transfer processor
* Optimize rectangle packer
### Modern UI 3.10.0.5
#### Forge Extension 1.20.2
* Add Markdown preview
* Use vanilla border style for modern tooltip (when rounded = false)
* Add font names for registered fonts, add JetBrains Mono
* Update to Emoji 15.1, remove Emoji 15 workaround
* Add auto scroll when tooltip is out of screen
* Add shadow effect for tooltip
* Add developer mode config to Preferences GUI
* Hide Advanced Options and Dev when not in developer mode
* Adjust default font behavior to be locale-sensitive
* Tweak fallback font loading behavior (now it accepts font files)
* Move destroy() method so that the game won't crash in forced tick after the window closes
* Handle glowing sign where text color is black
* Update Traditional Chinese - notlin4
#### NeoForge Extension 1.20.2
* Port to NeoForge
* Others are equivalent to Forge version
#### Fabric Extension 1.20.2
* Enhance tooltip compatibility with Sodium (when rounded = false)
* Add tooltip line wrapping for Fabric
* Add tooltip center title and title break for Fabric
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.20.2
* Add Untranslated Items integration
* Fix useComponentCache not working at all
* Fix force unicode font not working after game restart
* Fix line breaker SIOOBE for illegal string (this fixed crash with Better Statistics Screen)
#### Core Framework 3.10.0
* Move kotlin extension to a separate module (Core-KTX)
* Add Log class to avoid using log4j in submodules
* Implement blend mode filter for ShapeDrawable, ColorDrawable and other Drawable classes
* Fix incorrect drop-down position in RTL layout direction
* Fix MenuPopup overlap anchor (google-bug) (fix #199)
* Fix TextShaper context range for BiDi analysis
* Add LocaleSpan
* Add all 42 blend modes that used in Photoshop (currently no shader implementation)
* Update BlendMode and Color.blend()
* Change Bitmap.getSize() type to long
* Make Bitmap's color info mutable (for reinterpretation)
* Add path measurement implementation (PathMeasure class)
* Remove 2GB restriction on Bitmap creation, add more sanitizations
* Deprecate ImageStore, fix javadoc errors
* Update Bitmap with Arc3D
* Update Matrix and Path with Arc3D
* Fix Underline and Strikethrough offset
* Add "exclusive" East Asian family support (currently not used)
* Public Menu.setOptionalIconsVisible() method
* Change atlas coverage type to double
#### Core Framework - Kotlin Extension 3.10.0
* Add kotlin-flavored methods, update annotations
#### Markdown 3.10.0
* Suppress unchecked warning
#### Arc 3D Graphics Engine 3.10.0
* Add color filters and color matrix
* Add/update all blend modes and their raster implementations: PLUS, MINUS, DIFFERENCE, EXCLUSION, COLOR_DODGE, COLOR_BURN, HARD_LIGHT, SOFT_LIGHT, LINEAR_DODGE, LINEAR_BURN, VIVID_LIGHT, LINEAR_LIGHT, PIN_LIGHT, HARD_MIX and HSL blend modes (HUE, SATURATION, COLOR, LUMINOSITY)
* Rename shaderc package to compiler
* Add Image-derived and Shader-derived skeleton classes
* Add UNORM_PACK16 and UNORM_PACK32 encoding constant
* Public ColorType.channelFlags
* Add missing GRAY_ALPHA_88 for ColorType.encoding
* Add alpha type validation
* Make owner's reference to pixel map mutable
* Fix ColorSpace initializer
* Add Raster, remove heap version of Bitmap
* Add full path measurement implementation
* Add PixelUtils for pixel conversion
* Add PixelMap and PixelRef, remove Pixmap
* Add and optimize Path methods
* Add Path.bounds computation, optimize Path allocation
* Add Rect2fc and Rect2ic for read-only usage
* Inline Path.Ref usage count implementation
* Finish approximation of cubic strokes by quadratic splines
* Finish approximation of quadratic strokes by quadratic splines
* Add MathUtil.pin() method for capturing NaN values, replace some use of clamp()
* Add conic section to quadratic curves conversion
* Add several methods to reset the Path
* Finish RoundJoiner, fix Path reversePop
* Add Matrixc interface for read-only usage of Matrix
* Update and optimize PathStroker
* Optimize approximation of conic sections by quadratic splines
* Add PathConsumer
* Add Path tessellation for quadratic and cubic splines
* Add PathUtils and WangsFormula for subdivisions
* Add Path, add Path.Ref, add PathIterator
* Add Geometry class for finding inflection points, tangent, curvature, max curvature, cusp, solving quadratic equations, cubic equations, etc
* Add RefCounted interface
* Add Hardware transfer processor
* Optimize rectangle packer
### Modern UI 3.10.0.5
#### Forge Extension 1.20.2
* Add Markdown preview
* Use vanilla border style for modern tooltip (when rounded = false)
* Add font names for registered fonts, add JetBrains Mono
* Update to Emoji 15.1, remove Emoji 15 workaround
* Add auto scroll when tooltip is out of screen
* Add shadow effect for tooltip
* Add developer mode config to Preferences GUI
* Hide Advanced Options and Dev when not in developer mode
* Adjust default font behavior to be locale-sensitive
* Tweak fallback font loading behavior (now it accepts font files)
* Move destroy() method so that the game won't crash in forced tick after the window closes
* Handle glowing sign where text color is black
* Update Traditional Chinese - notlin4
#### NeoForge Extension 1.20.2
* Port to NeoForge
* Others are equivalent to Forge version
#### Fabric Extension 1.20.2
* Enhance tooltip compatibility with Sodium (when rounded = false)
* Add tooltip line wrapping for Fabric
* Add tooltip center title and title break for Fabric
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.20.2
* Add Untranslated Items integration
* Fix useComponentCache not working at all
* Fix force unicode font not working after game restart
* Fix line breaker SIOOBE for illegal string (this fixed crash with Better Statistics Screen)
#### Core Framework 3.10.0
* Move kotlin extension to a separate module (Core-KTX)
* Add Log class to avoid using log4j in submodules
* Implement blend mode filter for ShapeDrawable, ColorDrawable and other Drawable classes
* Fix incorrect drop-down position in RTL layout direction
* Fix MenuPopup overlap anchor (google-bug) (fix #199)
* Fix TextShaper context range for BiDi analysis
* Add LocaleSpan
* Add all 42 blend modes that used in Photoshop (currently no shader implementation)
* Update BlendMode and Color.blend()
* Change Bitmap.getSize() type to long
* Make Bitmap's color info mutable (for reinterpretation)
* Add path measurement implementation (PathMeasure class)
* Remove 2GB restriction on Bitmap creation, add more sanitizations
* Deprecate ImageStore, fix javadoc errors
* Update Bitmap with Arc3D
* Update Matrix and Path with Arc3D
* Fix Underline and Strikethrough offset
* Add "exclusive" East Asian family support (currently not used)
* Public Menu.setOptionalIconsVisible() method
* Change atlas coverage type to double
#### Core Framework - Kotlin Extension 3.10.0
* Add kotlin-flavored methods, update annotations
#### Markdown 3.10.0
* Suppress unchecked warning
#### Arc 3D Graphics Engine 3.10.0
* Add color filters and color matrix
* Add/update all blend modes and their raster implementations: PLUS, MINUS, DIFFERENCE, EXCLUSION, COLOR_DODGE, COLOR_BURN, HARD_LIGHT, SOFT_LIGHT, LINEAR_DODGE, LINEAR_BURN, VIVID_LIGHT, LINEAR_LIGHT, PIN_LIGHT, HARD_MIX and HSL blend modes (HUE, SATURATION, COLOR, LUMINOSITY)
* Rename shaderc package to compiler
* Add Image-derived and Shader-derived skeleton classes
* Add UNORM_PACK16 and UNORM_PACK32 encoding constant
* Public ColorType.channelFlags
* Add missing GRAY_ALPHA_88 for ColorType.encoding
* Add alpha type validation
* Make owner's reference to pixel map mutable
* Fix ColorSpace initializer
* Add Raster, remove heap version of Bitmap
* Add full path measurement implementation
* Add PixelUtils for pixel conversion
* Add PixelMap and PixelRef, remove Pixmap
* Add and optimize Path methods
* Add Path.bounds computation, optimize Path allocation
* Add Rect2fc and Rect2ic for read-only usage
* Inline Path.Ref usage count implementation
* Finish approximation of cubic strokes by quadratic splines
* Finish approximation of quadratic strokes by quadratic splines
* Add MathUtil.pin() method for capturing NaN values, replace some use of clamp()
* Add conic section to quadratic curves conversion
* Add several methods to reset the Path
* Finish RoundJoiner, fix Path reversePop
* Add Matrixc interface for read-only usage of Matrix
* Update and optimize PathStroker
* Optimize approximation of conic sections by quadratic splines
* Add PathConsumer
* Add Path tessellation for quadratic and cubic splines
* Add PathUtils and WangsFormula for subdivisions
* Add Path, add Path.Ref, add PathIterator
* Add Geometry class for finding inflection points, tangent, curvature, max curvature, cusp, solving quadratic equations, cubic equations, etc
* Add RefCounted interface
* Add Hardware transfer processor
* Optimize rectangle packer
### Modern UI 3.10.0.5
#### Forge Extension 1.20.2
* Add Markdown preview
* Use vanilla border style for modern tooltip (when rounded = false)
* Add font names for registered fonts, add JetBrains Mono
* Update to Emoji 15.1, remove Emoji 15 workaround
* Add auto scroll when tooltip is out of screen
* Add shadow effect for tooltip
* Add developer mode config to Preferences GUI
* Hide Advanced Options and Dev when not in developer mode
* Adjust default font behavior to be locale-sensitive
* Tweak fallback font loading behavior (now it accepts font files)
* Move destroy() method so that the game won't crash in forced tick after the window closes
* Handle glowing sign where text color is black
* Update Traditional Chinese - notlin4
#### NeoForge Extension 1.20.2
* Port to NeoForge
* Others are equivalent to Forge version
#### Fabric Extension 1.20.2
* Enhance tooltip compatibility with Sodium (when rounded = false)
* Add tooltip line wrapping for Fabric
* Add tooltip center title and title break for Fabric
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.20.2
* Add Untranslated Items integration
* Fix useComponentCache not working at all
* Fix force unicode font not working after game restart
* Fix line breaker SIOOBE for illegal string (this fixed crash with Better Statistics Screen)
#### Core Framework 3.10.0
* Move kotlin extension to a separate module (Core-KTX)
* Add Log class to avoid using log4j in submodules
* Implement blend mode filter for ShapeDrawable, ColorDrawable and other Drawable classes
* Fix incorrect drop-down position in RTL layout direction
* Fix MenuPopup overlap anchor (google-bug) (fix #199)
* Fix TextShaper context range for BiDi analysis
* Add LocaleSpan
* Add all 42 blend modes that used in Photoshop (currently no shader implementation)
* Update BlendMode and Color.blend()
* Change Bitmap.getSize() type to long
* Make Bitmap's color info mutable (for reinterpretation)
* Add path measurement implementation (PathMeasure class)
* Remove 2GB restriction on Bitmap creation, add more sanitizations
* Deprecate ImageStore, fix javadoc errors
* Update Bitmap with Arc3D
* Update Matrix and Path with Arc3D
* Fix Underline and Strikethrough offset
* Add "exclusive" East Asian family support (currently not used)
* Public Menu.setOptionalIconsVisible() method
* Change atlas coverage type to double
#### Core Framework - Kotlin Extension 3.10.0
* Add kotlin-flavored methods, update annotations
#### Markdown 3.10.0
* Suppress unchecked warning
#### Arc 3D Graphics Engine 3.10.0
* Add color filters and color matrix
* Add/update all blend modes and their raster implementations: PLUS, MINUS, DIFFERENCE, EXCLUSION, COLOR_DODGE, COLOR_BURN, HARD_LIGHT, SOFT_LIGHT, LINEAR_DODGE, LINEAR_BURN, VIVID_LIGHT, LINEAR_LIGHT, PIN_LIGHT, HARD_MIX and HSL blend modes (HUE, SATURATION, COLOR, LUMINOSITY)
* Rename shaderc package to compiler
* Add Image-derived and Shader-derived skeleton classes
* Add UNORM_PACK16 and UNORM_PACK32 encoding constant
* Public ColorType.channelFlags
* Add missing GRAY_ALPHA_88 for ColorType.encoding
* Add alpha type validation
* Make owner's reference to pixel map mutable
* Fix ColorSpace initializer
* Add Raster, remove heap version of Bitmap
* Add full path measurement implementation
* Add PixelUtils for pixel conversion
* Add PixelMap and PixelRef, remove Pixmap
* Add and optimize Path methods
* Add Path.bounds computation, optimize Path allocation
* Add Rect2fc and Rect2ic for read-only usage
* Inline Path.Ref usage count implementation
* Finish approximation of cubic strokes by quadratic splines
* Finish approximation of quadratic strokes by quadratic splines
* Add MathUtil.pin() method for capturing NaN values, replace some use of clamp()
* Add conic section to quadratic curves conversion
* Add several methods to reset the Path
* Finish RoundJoiner, fix Path reversePop
* Add Matrixc interface for read-only usage of Matrix
* Update and optimize PathStroker
* Optimize approximation of conic sections by quadratic splines
* Add PathConsumer
* Add Path tessellation for quadratic and cubic splines
* Add PathUtils and WangsFormula for subdivisions
* Add Path, add Path.Ref, add PathIterator
* Add Geometry class for finding inflection points, tangent, curvature, max curvature, cusp, solving quadratic equations, cubic equations, etc
* Add RefCounted interface
* Add Hardware transfer processor
* Optimize rectangle packer
### Modern UI 3.10.0.4
#### Forge Extension 1.20.1 / NeoForge Extension 1.20.1
* Add Markdown preview
* Use vanilla border style for modern tooltip (when rounded = false)
* Add font names for registered fonts, add JetBrains Mono
* Update to Emoji 15.1
* Add auto scroll when tooltip is out of screen
* Add shadow effect for tooltip
* Add developer mode config to Preferences GUI
* Hide Advanced Options and Dev when not in developer mode
* Adjust default font behavior to be locale-sensitive
* Tweak fallback font loading behavior (now it accepts font files)
* Move destroy() method so that the game won't crash in forced tick after the window closes
* Handle glowing sign where text color is black
* Update Traditional Chinese - notlin4
#### Fabric Extension 1.20.1
* Enhance tooltip compatibility with Sodium (when rounded = false)
* Add tooltip line wrapping for Fabric
* Add tooltip center title and title break for Fabric
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.20.1
* Add Untranslated Items integration
* Fix useComponentCache not working at all
* Fix force unicode font not working after game restart
* Fix line breaker SIOOBE for illegal string (this fixed crash with Better Statistics Screen)
#### Core Framework 3.10.0
* Move kotlin extension to a separate module (Core-KTX)
* Add Log class to avoid using log4j in submodules
* Implement blend mode filter for ShapeDrawable, ColorDrawable and other Drawable classes
* Fix incorrect drop-down position in RTL layout direction
* Fix MenuPopup overlap anchor (google-bug) (fix #199)
* Fix TextShaper context range for BiDi analysis
* Add LocaleSpan
* Add all 42 blend modes that used in Photoshop (currently no shader implementation)
* Update BlendMode and Color.blend()
* Change Bitmap.getSize() type to long
* Make Bitmap's color info mutable (for reinterpretation)
* Add path measurement implementation (PathMeasure class)
* Remove 2GB restriction on Bitmap creation, add more sanitizations
* Deprecate ImageStore, fix javadoc errors
* Update Bitmap with Arc3D
* Update Matrix and Path with Arc3D
* Fix Underline and Strikethrough offset
* Add "exclusive" East Asian family support (currently not used)
* Public Menu.setOptionalIconsVisible() method
* Change atlas coverage type to double
#### Core Framework - Kotlin Extension 3.10.0
* Add kotlin-flavored methods, update annotations
#### Markdown 3.10.0
* Suppress unchecked warning
#### Arc 3D Graphics Engine 3.10.0
* Add color filters and color matrix
* Add/update all blend modes and their raster implementations: PLUS, MINUS, DIFFERENCE, EXCLUSION, COLOR_DODGE, COLOR_BURN, HARD_LIGHT, SOFT_LIGHT, LINEAR_DODGE, LINEAR_BURN, VIVID_LIGHT, LINEAR_LIGHT, PIN_LIGHT, HARD_MIX and HSL blend modes (HUE, SATURATION, COLOR, LUMINOSITY)
* Rename shaderc package to compiler
* Add Image-derived and Shader-derived skeleton classes
* Add UNORM_PACK16 and UNORM_PACK32 encoding constant
* Public ColorType.channelFlags
* Add missing GRAY_ALPHA_88 for ColorType.encoding
* Add alpha type validation
* Make owner's reference to pixel map mutable
* Fix ColorSpace initializer
* Add Raster, remove heap version of Bitmap
* Add full path measurement implementation
* Add PixelUtils for pixel conversion
* Add PixelMap and PixelRef, remove Pixmap
* Add and optimize Path methods
* Add Path.bounds computation, optimize Path allocation
* Add Rect2fc and Rect2ic for read-only usage
* Inline Path.Ref usage count implementation
* Finish approximation of cubic strokes by quadratic splines
* Finish approximation of quadratic strokes by quadratic splines
* Add MathUtil.pin() method for capturing NaN values, replace some use of clamp()
* Add conic section to quadratic curves conversion
* Add several methods to reset the Path
* Finish RoundJoiner, fix Path reversePop
* Add Matrixc interface for read-only usage of Matrix
* Update and optimize PathStroker
* Optimize approximation of conic sections by quadratic splines
* Add PathConsumer
* Add Path tessellation for quadratic and cubic splines
* Add PathUtils and WangsFormula for subdivisions
* Add Path, add Path.Ref, add PathIterator
* Add Geometry class for finding inflection points, tangent, curvature, max curvature, cusp, solving quadratic equations, cubic equations, etc
* Add RefCounted interface
* Add Hardware transfer processor
* Optimize rectangle packer
### Modern UI 3.10.0.4
#### Forge Extension 1.20.1 / NeoForge Extension 1.20.1
* Add Markdown preview
* Use vanilla border style for modern tooltip (when rounded = false)
* Add font names for registered fonts, add JetBrains Mono
* Update to Emoji 15.1
* Add auto scroll when tooltip is out of screen
* Add shadow effect for tooltip
* Add developer mode config to Preferences GUI
* Hide Advanced Options and Dev when not in developer mode
* Adjust default font behavior to be locale-sensitive
* Tweak fallback font loading behavior (now it accepts font files)
* Move destroy() method so that the game won't crash in forced tick after the window closes
* Handle glowing sign where text color is black
* Update Traditional Chinese - notlin4
#### Fabric Extension 1.20.1
* Enhance tooltip compatibility with Sodium (when rounded = false)
* Add tooltip line wrapping for Fabric
* Add tooltip center title and title break for Fabric
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.20.1
* Add Untranslated Items integration
* Fix useComponentCache not working at all
* Fix force unicode font not working after game restart
* Fix line breaker SIOOBE for illegal string (this fixed crash with Better Statistics Screen)
#### Core Framework 3.10.0
* Move kotlin extension to a separate module (Core-KTX)
* Add Log class to avoid using log4j in submodules
* Implement blend mode filter for ShapeDrawable, ColorDrawable and other Drawable classes
* Fix incorrect drop-down position in RTL layout direction
* Fix MenuPopup overlap anchor (google-bug) (fix #199)
* Fix TextShaper context range for BiDi analysis
* Add LocaleSpan
* Add all 42 blend modes that used in Photoshop (currently no shader implementation)
* Update BlendMode and Color.blend()
* Change Bitmap.getSize() type to long
* Make Bitmap's color info mutable (for reinterpretation)
* Add path measurement implementation (PathMeasure class)
* Remove 2GB restriction on Bitmap creation, add more sanitizations
* Deprecate ImageStore, fix javadoc errors
* Update Bitmap with Arc3D
* Update Matrix and Path with Arc3D
* Fix Underline and Strikethrough offset
* Add "exclusive" East Asian family support (currently not used)
* Public Menu.setOptionalIconsVisible() method
* Change atlas coverage type to double
#### Core Framework - Kotlin Extension 3.10.0
* Add kotlin-flavored methods, update annotations
#### Markdown 3.10.0
* Suppress unchecked warning
#### Arc 3D Graphics Engine 3.10.0
* Add color filters and color matrix
* Add/update all blend modes and their raster implementations: PLUS, MINUS, DIFFERENCE, EXCLUSION, COLOR_DODGE, COLOR_BURN, HARD_LIGHT, SOFT_LIGHT, LINEAR_DODGE, LINEAR_BURN, VIVID_LIGHT, LINEAR_LIGHT, PIN_LIGHT, HARD_MIX and HSL blend modes (HUE, SATURATION, COLOR, LUMINOSITY)
* Rename shaderc package to compiler
* Add Image-derived and Shader-derived skeleton classes
* Add UNORM_PACK16 and UNORM_PACK32 encoding constant
* Public ColorType.channelFlags
* Add missing GRAY_ALPHA_88 for ColorType.encoding
* Add alpha type validation
* Make owner's reference to pixel map mutable
* Fix ColorSpace initializer
* Add Raster, remove heap version of Bitmap
* Add full path measurement implementation
* Add PixelUtils for pixel conversion
* Add PixelMap and PixelRef, remove Pixmap
* Add and optimize Path methods
* Add Path.bounds computation, optimize Path allocation
* Add Rect2fc and Rect2ic for read-only usage
* Inline Path.Ref usage count implementation
* Finish approximation of cubic strokes by quadratic splines
* Finish approximation of quadratic strokes by quadratic splines
* Add MathUtil.pin() method for capturing NaN values, replace some use of clamp()
* Add conic section to quadratic curves conversion
* Add several methods to reset the Path
* Finish RoundJoiner, fix Path reversePop
* Add Matrixc interface for read-only usage of Matrix
* Update and optimize PathStroker
* Optimize approximation of conic sections by quadratic splines
* Add PathConsumer
* Add Path tessellation for quadratic and cubic splines
* Add PathUtils and WangsFormula for subdivisions
* Add Path, add Path.Ref, add PathIterator
* Add Geometry class for finding inflection points, tangent, curvature, max curvature, cusp, solving quadratic equations, cubic equations, etc
* Add RefCounted interface
* Add Hardware transfer processor
* Optimize rectangle packer
### Modern UI 3.10.0.3
#### Forge Extension 1.19.4
* Add Markdown preview
* Use vanilla border style for modern tooltip (when rounded = false)
* Add font names for registered fonts, add JetBrains Mono
* Update to Emoji 15.1
* Add auto scroll when tooltip is out of screen
* Add shadow effect for tooltip
* Add developer mode config to Preferences GUI
* Hide Advanced Options and Dev when not in developer mode
* Adjust default font behavior to be locale-sensitive
* Tweak fallback font loading behavior (now it accepts font files)
* Move destroy() method so that the game won't crash in forced tick after the window closes
* Handle glowing sign where text color is black
* Update Traditional Chinese - notlin4
#### Modern Text Engine 1.19.4
* Add Untranslated Items integration
* Fix useComponentCache not working at all
* Fix force unicode font not working after game restart
* Fix line breaker SIOOBE for illegal string (this fixed crash with Better Statistics Screen)
#### Core Framework 3.10.0
* Move kotlin extension to a separate module (Core-KTX)
* Add Log class to avoid using log4j in submodules
* Implement blend mode filter for ShapeDrawable, ColorDrawable and other Drawable classes
* Fix incorrect drop-down position in RTL layout direction
* Fix MenuPopup overlap anchor (google-bug) (fix #199)
* Fix TextShaper context range for BiDi analysis
* Add LocaleSpan
* Add all 42 blend modes that used in Photoshop (currently no shader implementation)
* Update BlendMode and Color.blend()
* Change Bitmap.getSize() type to long
* Make Bitmap's color info mutable (for reinterpretation)
* Add path measurement implementation (PathMeasure class)
* Remove 2GB restriction on Bitmap creation, add more sanitizations
* Deprecate ImageStore, fix javadoc errors
* Update Bitmap with Arc3D
* Update Matrix and Path with Arc3D
* Fix Underline and Strikethrough offset
* Add "exclusive" East Asian family support (currently not used)
* Public Menu.setOptionalIconsVisible() method
* Change atlas coverage type to double
#### Core Framework - Kotlin Extension 3.10.0
* Add kotlin-flavored methods, update annotations
#### Markdown 3.10.0
* Suppress unchecked warning
#### Arc 3D Graphics Engine 3.10.0
* Add color filters and color matrix
* Add/update all blend modes and their raster implementations: PLUS, MINUS, DIFFERENCE, EXCLUSION, COLOR_DODGE, COLOR_BURN, HARD_LIGHT, SOFT_LIGHT, LINEAR_DODGE, LINEAR_BURN, VIVID_LIGHT, LINEAR_LIGHT, PIN_LIGHT, HARD_MIX and HSL blend modes (HUE, SATURATION, COLOR, LUMINOSITY)
* Rename shaderc package to compiler
* Add Image-derived and Shader-derived skeleton classes
* Add UNORM_PACK16 and UNORM_PACK32 encoding constant
* Public ColorType.channelFlags
* Add missing GRAY_ALPHA_88 for ColorType.encoding
* Add alpha type validation
* Make owner's reference to pixel map mutable
* Fix ColorSpace initializer
* Add Raster, remove heap version of Bitmap
* Add full path measurement implementation
* Add PixelUtils for pixel conversion
* Add PixelMap and PixelRef, remove Pixmap
* Add and optimize Path methods
* Add Path.bounds computation, optimize Path allocation
* Add Rect2fc and Rect2ic for read-only usage
* Inline Path.Ref usage count implementation
* Finish approximation of cubic strokes by quadratic splines
* Finish approximation of quadratic strokes by quadratic splines
* Add MathUtil.pin() method for capturing NaN values, replace some use of clamp()
* Add conic section to quadratic curves conversion
* Add several methods to reset the Path
* Finish RoundJoiner, fix Path reversePop
* Add Matrixc interface for read-only usage of Matrix
* Update and optimize PathStroker
* Optimize approximation of conic sections by quadratic splines
* Add PathConsumer
* Add Path tessellation for quadratic and cubic splines
* Add PathUtils and WangsFormula for subdivisions
* Add Path, add Path.Ref, add PathIterator
* Add Geometry class for finding inflection points, tangent, curvature, max curvature, cusp, solving quadratic equations, cubic equations, etc
* Add RefCounted interface
* Add Hardware transfer processor
* Optimize rectangle packer
### Modern UI 3.10.0.2
#### Forge Extension 1.19.2
* Add Markdown preview
* Use vanilla border style for modern tooltip (when rounded = false)
* Add font names for registered fonts, add JetBrains Mono
* Update to Emoji 15.1
* Add auto scroll when tooltip is out of screen
* Add shadow effect for tooltip
* Add developer mode config to Preferences GUI
* Hide Advanced Options and Dev when not in developer mode
* Adjust default font behavior to be locale-sensitive
* Tweak fallback font loading behavior (now it accepts font files)
* Move destroy() method so that the game won't crash in forced tick after the window closes
* Handle glowing sign where text color is black
* Update Traditional Chinese - notlin4
#### Modern Text Engine 1.19.2
* Add Untranslated Items integration
* Fix useComponentCache not working at all
* Fix force unicode font not working after game restart
* Fix line breaker SIOOBE for illegal string (this fixed crash with Better Statistics Screen)
#### Core Framework 3.10.0
* Move kotlin extension to a separate module (Core-KTX)
* Add Log class to avoid using log4j in submodules
* Implement blend mode filter for ShapeDrawable, ColorDrawable and other Drawable classes
* Fix incorrect drop-down position in RTL layout direction
* Fix MenuPopup overlap anchor (google-bug) (fix #199)
* Fix TextShaper context range for BiDi analysis
* Add LocaleSpan
* Add all 42 blend modes that used in Photoshop (currently no shader implementation)
* Update BlendMode and Color.blend()
* Change Bitmap.getSize() type to long
* Make Bitmap's color info mutable (for reinterpretation)
* Add path measurement implementation (PathMeasure class)
* Remove 2GB restriction on Bitmap creation, add more sanitizations
* Deprecate ImageStore, fix javadoc errors
* Update Bitmap with Arc3D
* Update Matrix and Path with Arc3D
* Fix Underline and Strikethrough offset
* Add "exclusive" East Asian family support (currently not used)
* Public Menu.setOptionalIconsVisible() method
* Change atlas coverage type to double
#### Core Framework - Kotlin Extension 3.10.0
* Add kotlin-flavored methods, update annotations
#### Markdown 3.10.0
* Suppress unchecked warning
#### Arc 3D Graphics Engine 3.10.0
* Add color filters and color matrix
* Add/update all blend modes and their raster implementations: PLUS, MINUS, DIFFERENCE, EXCLUSION, COLOR_DODGE, COLOR_BURN, HARD_LIGHT, SOFT_LIGHT, LINEAR_DODGE, LINEAR_BURN, VIVID_LIGHT, LINEAR_LIGHT, PIN_LIGHT, HARD_MIX and HSL blend modes (HUE, SATURATION, COLOR, LUMINOSITY)
* Rename shaderc package to compiler
* Add Image-derived and Shader-derived skeleton classes
* Add UNORM_PACK16 and UNORM_PACK32 encoding constant
* Public ColorType.channelFlags
* Add missing GRAY_ALPHA_88 for ColorType.encoding
* Add alpha type validation
* Make owner's reference to pixel map mutable
* Fix ColorSpace initializer
* Add Raster, remove heap version of Bitmap
* Add full path measurement implementation
* Add PixelUtils for pixel conversion
* Add PixelMap and PixelRef, remove Pixmap
* Add and optimize Path methods
* Add Path.bounds computation, optimize Path allocation
* Add Rect2fc and Rect2ic for read-only usage
* Inline Path.Ref usage count implementation
* Finish approximation of cubic strokes by quadratic splines
* Finish approximation of quadratic strokes by quadratic splines
* Add MathUtil.pin() method for capturing NaN values, replace some use of clamp()
* Add conic section to quadratic curves conversion
* Add several methods to reset the Path
* Finish RoundJoiner, fix Path reversePop
* Add Matrixc interface for read-only usage of Matrix
* Update and optimize PathStroker
* Optimize approximation of conic sections by quadratic splines
* Add PathConsumer
* Add Path tessellation for quadratic and cubic splines
* Add PathUtils and WangsFormula for subdivisions
* Add Path, add Path.Ref, add PathIterator
* Add Geometry class for finding inflection points, tangent, curvature, max curvature, cusp, solving quadratic equations, cubic equations, etc
* Add RefCounted interface
* Add Hardware transfer processor
* Optimize rectangle packer
### Modern UI 3.10.0.1
#### Forge Extension 1.18.2
* Add Markdown preview
* Use vanilla border style for modern tooltip (when rounded = false)
* Add font names for registered fonts, add JetBrains Mono
* Update to Emoji 15.1
* Add auto scroll when tooltip is out of screen
* Add shadow effect for tooltip
* Add developer mode config to Preferences GUI
* Hide Advanced Options and Dev when not in developer mode
* Tweak fallback font loading behavior (now it accepts font files)
* Move destroy() method so that the game won't crash in forced tick after the window closes
* Handle glowing sign where text color is black
* Update Traditional Chinese - notlin4
#### Modern Text Engine 1.18.2
* Add Untranslated Items integration
* Fix useComponentCache not working at all
* Fix force unicode font not working after game restart
* Fix line breaker SIOOBE for illegal string (this fixed crash with Better Statistics Screen)
#### Core Framework 3.10.0
* Move kotlin extension to a separate module (Core-KTX)
* Add Log class to avoid using log4j in submodules
* Implement blend mode filter for ShapeDrawable, ColorDrawable and other Drawable classes
* Fix incorrect drop-down position in RTL layout direction
* Fix MenuPopup overlap anchor (google-bug) (fix #199)
* Fix TextShaper context range for BiDi analysis
* Add LocaleSpan
* Add all 42 blend modes that used in Photoshop (currently no shader implementation)
* Update BlendMode and Color.blend()
* Change Bitmap.getSize() type to long
* Make Bitmap's color info mutable (for reinterpretation)
* Add path measurement implementation (PathMeasure class)
* Remove 2GB restriction on Bitmap creation, add more sanitizations
* Deprecate ImageStore, fix javadoc errors
* Update Bitmap with Arc3D
* Update Matrix and Path with Arc3D
* Fix Underline and Strikethrough offset
* Add "exclusive" East Asian family support (currently not used)
* Public Menu.setOptionalIconsVisible() method
* Change atlas coverage type to double
#### Core Framework - Kotlin Extension 3.10.0
* Add kotlin-flavored methods, update annotations
#### Markdown 3.10.0
* Suppress unchecked warning
#### Arc 3D Graphics Engine 3.10.0
* Add color filters and color matrix
* Add/update all blend modes and their raster implementations: PLUS, MINUS, DIFFERENCE, EXCLUSION, COLOR_DODGE, COLOR_BURN, HARD_LIGHT, SOFT_LIGHT, LINEAR_DODGE, LINEAR_BURN, VIVID_LIGHT, LINEAR_LIGHT, PIN_LIGHT, HARD_MIX and HSL blend modes (HUE, SATURATION, COLOR, LUMINOSITY)
* Rename shaderc package to compiler
* Add Image-derived and Shader-derived skeleton classes
* Add UNORM_PACK16 and UNORM_PACK32 encoding constant
* Public ColorType.channelFlags
* Add missing GRAY_ALPHA_88 for ColorType.encoding
* Add alpha type validation
* Make owner's reference to pixel map mutable
* Fix ColorSpace initializer
* Add Raster, remove heap version of Bitmap
* Add full path measurement implementation
* Add PixelUtils for pixel conversion
* Add PixelMap and PixelRef, remove Pixmap
* Add and optimize Path methods
* Add Path.bounds computation, optimize Path allocation
* Add Rect2fc and Rect2ic for read-only usage
* Inline Path.Ref usage count implementation
* Finish approximation of cubic strokes by quadratic splines
* Finish approximation of quadratic strokes by quadratic splines
* Add MathUtil.pin() method for capturing NaN values, replace some use of clamp()
* Add conic section to quadratic curves conversion
* Add several methods to reset the Path
* Finish RoundJoiner, fix Path reversePop
* Add Matrixc interface for read-only usage of Matrix
* Update and optimize PathStroker
* Optimize approximation of conic sections by quadratic splines
* Add PathConsumer
* Add Path tessellation for quadratic and cubic splines
* Add PathUtils and WangsFormula for subdivisions
* Add Path, add Path.Ref, add PathIterator
* Add Geometry class for finding inflection points, tangent, curvature, max curvature, cusp, solving quadratic equations, cubic equations, etc
* Add RefCounted interface
* Add Hardware transfer processor
* Optimize rectangle packer
### Modern UI 3.9.0.5
#### Forge Extension 1.20.2
* Fix validation errors
* Add font atlas compact
* Add Iris shaders integration
* Schedule GUI Scale value listener on next tick
* Better text config category
* Change typeface loading behavior
* Restore cursor position for Emoji shortcode substitution
* Rework font manager to implement core Emoji rendering
* Add GPU driver bug workarounds bootstrap properties
* Improve text field undo/redo
* Add undo/redo for EditBox
* Add GUI Scale to Preferences
* Add batch input commit
* Update translations
* Implement grapheme break for all text fields
* Implement break iter for vanilla EditBox
* Add music player
* Increase window size for OpenGL version test, fix game freeze on Linux
* Update font resources and licenses
* Add tooltip border width config
* Fix format error when setting color opacity
* Remove unused assets
* Completely switch to Arc3D and abandon GL*Compat
* Auto clean up less used GPU resources
* Always generate text config
* Use jar-in-jar for caffeine and flexmark
* Update synchronization, improve render performance
* Disable MSAA by default, 0.176x VRAM usage than before, and faster
* Update to latest Arc3D and ModernUI
#### Fabric Extension 1.20.2 / Quilt Extension 1.20.2
* Add GUI Scale slider for Fabric
* Fix mod logo on Fabric
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.20.2
* Auto disable modern text shaders when Iris shaders are active
* Now follow vanilla's Force Unicode Font setting
* Fix compat with Loot Beams
* Fix compat with Debugify
* Fix compat with Curios
* Fix shadow offset Y for bitmap font
* Fix fist line rendering in sign edit GUI
* Add text layout command
* Remove text cache cleanup on parallel dispatch
* Dont draw text outline when 'modern text shaders in 3D' disabled
* Keep text shader preload consistent with vanilla UI shader preload
* Improve UniformScale text when GUI scale is less than 4
#### Core Framework 3.9.0
* Separate Arc 3D from core framework
* Optimize Matrix
* Optimize ImageStore
* Fix Image cleanup
* Add font atlas compact
* Fix emoji font color
* Add full Emoji font support to core framework
* Add Half (float16) type
* Move BinaryIO to Parcel
* Add ByteBuffer implementation for Parcelable
* Add commit batch input
* Fix per-cluster measure bug
* Fix track on rewind
* Rework on AudioSystem
* Move old ViewPager implementation to core framework
* Delay mipmaps regeneration for font atlas
* Fix and optimize SpanSet
* Decrease the default touchSlop value
* Completely remove GL*Compat classes, remove MSAA rendering
* Review bug on glfwWaitEventsTimeout
* Add CascadingMenuPopup presenter
* Remove IOException in readIntoNativeBuffer if >=2GB
* Fix compat with default render loop for OpenGL 3.3
* Optimize default bootstrap process
* Improve synchronization between UI thread and render thread
* Fragment now implements OnCreateContextMenuListener
* Fix saveLayer with alpha=0
* Add ContextMenuInfo
* Add ExpandableListView
* Fix ShapeDrawable line thickness
* Disable MSAA by default, and reduce the number of off-screen targets
* Remove the limit on the number of families in FontCollection
* Other small fixes and improvements
#### Arc 3D Graphics Engine 3.9.0
* Fix validation errors
* Add DriverBugWorkarounds
* Change to LinkedListMultimap
* Use HashMap for resource cache
* Better handling dirty OpenGL context states
* Add Blend constants
* Refactor Engine API
* Add Pixmap
* Fix GpuBufferPool
* Add SDF rectangle geometry processor
* Add NVIDIA driver bug workaround, when binding index buffer using DSA
* Add compat with OpenGL 3.3 upload pixels
* Add copyImage implementation, change Surface hierarchy
* Add Matrix.mapPoints and Matrix.getMin/MaxScale
* Add shear, map and I/O methods for Matrix
* Fix and optimize Matrix#invert
* Re-implement Matrix functions
* Fully implement ClipStack functions
* Other small fixes and improvements
### Modern UI 3.9.0.5
#### Forge Extension 1.20.2
* Fix validation errors
* Add font atlas compact
* Add Iris shaders integration
* Schedule GUI Scale value listener on next tick
* Better text config category
* Change typeface loading behavior
* Restore cursor position for Emoji shortcode substitution
* Rework font manager to implement core Emoji rendering
* Add GPU driver bug workarounds bootstrap properties
* Improve text field undo/redo
* Add undo/redo for EditBox
* Add GUI Scale to Preferences
* Add batch input commit
* Update translations
* Implement grapheme break for all text fields
* Implement break iter for vanilla EditBox
* Add music player
* Increase window size for OpenGL version test, fix game freeze on Linux
* Update font resources and licenses
* Add tooltip border width config
* Fix format error when setting color opacity
* Remove unused assets
* Completely switch to Arc3D and abandon GL*Compat
* Auto clean up less used GPU resources
* Always generate text config
* Use jar-in-jar for caffeine and flexmark
* Update synchronization, improve render performance
* Disable MSAA by default, 0.176x VRAM usage than before, and faster
* Update to latest Arc3D and ModernUI
#### Fabric Extension 1.20.2 / Quilt Extension 1.20.2
* Add GUI Scale slider for Fabric
* Fix mod logo on Fabric
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.20.2
* Auto disable modern text shaders when Iris shaders are active
* Now follow vanilla's Force Unicode Font setting
* Fix compat with Loot Beams
* Fix compat with Debugify
* Fix compat with Curios
* Fix shadow offset Y for bitmap font
* Fix fist line rendering in sign edit GUI
* Add text layout command
* Remove text cache cleanup on parallel dispatch
* Dont draw text outline when 'modern text shaders in 3D' disabled
* Keep text shader preload consistent with vanilla UI shader preload
* Improve UniformScale text when GUI scale is less than 4
#### Core Framework 3.9.0
* Separate Arc 3D from core framework
* Optimize Matrix
* Optimize ImageStore
* Fix Image cleanup
* Add font atlas compact
* Fix emoji font color
* Add full Emoji font support to core framework
* Add Half (float16) type
* Move BinaryIO to Parcel
* Add ByteBuffer implementation for Parcelable
* Add commit batch input
* Fix per-cluster measure bug
* Fix track on rewind
* Rework on AudioSystem
* Move old ViewPager implementation to core framework
* Delay mipmaps regeneration for font atlas
* Fix and optimize SpanSet
* Decrease the default touchSlop value
* Completely remove GL*Compat classes, remove MSAA rendering
* Review bug on glfwWaitEventsTimeout
* Add CascadingMenuPopup presenter
* Remove IOException in readIntoNativeBuffer if >=2GB
* Fix compat with default render loop for OpenGL 3.3
* Optimize default bootstrap process
* Improve synchronization between UI thread and render thread
* Fragment now implements OnCreateContextMenuListener
* Fix saveLayer with alpha=0
* Add ContextMenuInfo
* Add ExpandableListView
* Fix ShapeDrawable line thickness
* Disable MSAA by default, and reduce the number of off-screen targets
* Remove the limit on the number of families in FontCollection
* Other small fixes and improvements
#### Arc 3D Graphics Engine 3.9.0
* Fix validation errors
* Add DriverBugWorkarounds
* Change to LinkedListMultimap
* Use HashMap for resource cache
* Better handling dirty OpenGL context states
* Add Blend constants
* Refactor Engine API
* Add Pixmap
* Fix GpuBufferPool
* Add SDF rectangle geometry processor
* Add NVIDIA driver bug workaround, when binding index buffer using DSA
* Add compat with OpenGL 3.3 upload pixels
* Add copyImage implementation, change Surface hierarchy
* Add Matrix.mapPoints and Matrix.getMin/MaxScale
* Add shear, map and I/O methods for Matrix
* Fix and optimize Matrix#invert
* Re-implement Matrix functions
* Fully implement ClipStack functions
* Other small fixes and improvements
### Modern UI 3.9.0.4
#### Forge Extension 1.20.1 / NeoForge Extension 1.20.1
* Fix validation errors
* Add font atlas compact
* Add Iris shaders integration
* Schedule GUI Scale value listener on next tick
* Better text config category
* Change typeface loading behavior
* Restore cursor position for Emoji shortcode substitution
* Rework font manager to implement core Emoji rendering
* Add GPU driver bug workarounds bootstrap properties
* Improve text field undo/redo
* Add undo/redo for EditBox
* Add GUI Scale to Preferences
* Add batch input commit
* Update translations
* Implement grapheme break for all text fields
* Implement break iter for vanilla EditBox
* Add music player
* Increase window size for OpenGL version test, fix game freeze on Linux
* Update font resources and licenses
* Add tooltip border width config
* Fix format error when setting color opacity
* Remove unused assets
* Completely switch to Arc3D and abandon GL*Compat
* Auto clean up less used GPU resources
* Always generate text config
* Use jar-in-jar for caffeine and flexmark
* Update synchronization, improve render performance
* Disable MSAA by default, 0.176x VRAM usage than before, and faster
* Update to latest Arc3D and ModernUI
#### Fabric Extension 1.20.1 / Quilt Extension 1.20.1
* Add GUI Scale slider for Fabric
* Fix mod logo on Fabric
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.20.1
* Auto disable modern text shaders when Iris shaders are active
* Now follow vanilla's Force Unicode Font setting
* Fix compat with Loot Beams
* Fix compat with Debugify
* Fix compat with Curios
* Fix shadow offset Y for bitmap font
* Fix fist line rendering in sign edit GUI
* Add text layout command
* Remove text cache cleanup on parallel dispatch
* Dont draw text outline when 'modern text shaders in 3D' disabled
* Keep text shader preload consistent with vanilla UI shader preload
* Improve UniformScale text when GUI scale is less than 4
#### Core Framework 3.9.0
* Separate Arc 3D from core framework
* Optimize Matrix
* Optimize ImageStore
* Fix Image cleanup
* Add font atlas compact
* Fix emoji font color
* Add full Emoji font support to core framework
* Add Half (float16) type
* Move BinaryIO to Parcel
* Add ByteBuffer implementation for Parcelable
* Add commit batch input
* Fix per-cluster measure bug
* Fix track on rewind
* Rework on AudioSystem
* Move old ViewPager implementation to core framework
* Delay mipmaps regeneration for font atlas
* Fix and optimize SpanSet
* Decrease the default touchSlop value
* Completely remove GL*Compat classes, remove MSAA rendering
* Review bug on glfwWaitEventsTimeout
* Add CascadingMenuPopup presenter
* Remove IOException in readIntoNativeBuffer if >=2GB
* Fix compat with default render loop for OpenGL 3.3
* Optimize default bootstrap process
* Improve synchronization between UI thread and render thread
* Fragment now implements OnCreateContextMenuListener
* Fix saveLayer with alpha=0
* Add ContextMenuInfo
* Add ExpandableListView
* Fix ShapeDrawable line thickness
* Disable MSAA by default, and reduce the number of off-screen targets
* Remove the limit on the number of families in FontCollection
* Other small fixes and improvements
#### Arc 3D Graphics Engine 3.9.0
* Fix validation errors
* Add DriverBugWorkarounds
* Change to LinkedListMultimap
* Use HashMap for resource cache
* Better handling dirty OpenGL context states
* Add Blend constants
* Refactor Engine API
* Add Pixmap
* Fix GpuBufferPool
* Add SDF rectangle geometry processor
* Add NVIDIA driver bug workaround, when binding index buffer using DSA
* Add compat with OpenGL 3.3 upload pixels
* Add copyImage implementation, change Surface hierarchy
* Add Matrix.mapPoints and Matrix.getMin/MaxScale
* Add shear, map and I/O methods for Matrix
* Fix and optimize Matrix#invert
* Re-implement Matrix functions
* Fully implement ClipStack functions
* Other small fixes and improvements
### Modern UI 3.9.0.4
#### Forge Extension 1.20.1 / NeoForge Extension 1.20.1
* Fix validation errors
* Add font atlas compact
* Add Iris shaders integration
* Schedule GUI Scale value listener on next tick
* Better text config category
* Change typeface loading behavior
* Restore cursor position for Emoji shortcode substitution
* Rework font manager to implement core Emoji rendering
* Add GPU driver bug workarounds bootstrap properties
* Improve text field undo/redo
* Add undo/redo for EditBox
* Add GUI Scale to Preferences
* Add batch input commit
* Update translations
* Implement grapheme break for all text fields
* Implement break iter for vanilla EditBox
* Add music player
* Increase window size for OpenGL version test, fix game freeze on Linux
* Update font resources and licenses
* Add tooltip border width config
* Fix format error when setting color opacity
* Remove unused assets
* Completely switch to Arc3D and abandon GL*Compat
* Auto clean up less used GPU resources
* Always generate text config
* Use jar-in-jar for caffeine and flexmark
* Update synchronization, improve render performance
* Disable MSAA by default, 0.176x VRAM usage than before, and faster
* Update to latest Arc3D and ModernUI
#### Fabric Extension 1.20.1 / Quilt Extension 1.20.1
* Add GUI Scale slider for Fabric
* Fix mod logo on Fabric
* Others are functionally equivalent to Forge version
#### Modern Text Engine 1.20.1
* Auto disable modern text shaders when Iris shaders are active
* Now follow vanilla's Force Unicode Font setting
* Fix compat with Loot Beams
* Fix compat with Debugify
* Fix compat with Curios
* Fix shadow offset Y for bitmap font
* Fix fist line rendering in sign edit GUI
* Add text layout command
* Remove text cache cleanup on parallel dispatch
* Dont draw text outline when 'modern text shaders in 3D' disabled
* Keep text shader preload consistent with vanilla UI shader preload
* Improve UniformScale text when GUI scale is less than 4
#### Core Framework 3.9.0
* Separate Arc 3D from core framework
* Optimize Matrix
* Optimize ImageStore
* Fix Image cleanup
* Add font atlas compact
* Fix emoji font color
* Add full Emoji font support to core framework
* Add Half (float16) type
* Move BinaryIO to Parcel
* Add ByteBuffer implementation for Parcelable
* Add commit batch input
* Fix per-cluster measure bug
* Fix track on rewind
* Rework on AudioSystem
* Move old ViewPager implementation to core framework
* Delay mipmaps regeneration for font atlas
* Fix and optimize SpanSet
* Decrease the default touchSlop value
* Completely remove GL*Compat classes, remove MSAA rendering
* Review bug on glfwWaitEventsTimeout
* Add CascadingMenuPopup presenter
* Remove IOException in readIntoNativeBuffer if >=2GB
* Fix compat with default render loop for OpenGL 3.3
* Optimize default bootstrap process
* Improve synchronization between UI thread and render thread
* Fragment now implements OnCreateContextMenuListener
* Fix saveLayer with alpha=0
* Add ContextMenuInfo
* Add ExpandableListView
* Fix ShapeDrawable line thickness
* Disable MSAA by default, and reduce the number of off-screen targets
* Remove the limit on the number of families in FontCollection
* Other small fixes and improvements
#### Arc 3D Graphics Engine 3.9.0
* Fix validation errors
* Add DriverBugWorkarounds
* Change to LinkedListMultimap
* Use HashMap for resource cache
* Better handling dirty OpenGL context states
* Add Blend constants
* Refactor Engine API
* Add Pixmap
* Fix GpuBufferPool
* Add SDF rectangle geometry processor
* Add NVIDIA driver bug workaround, when binding index buffer using DSA
* Add compat with OpenGL 3.3 upload pixels
* Add copyImage implementation, change Surface hierarchy
* Add Matrix.mapPoints and Matrix.getMin/MaxScale
* Add shear, map and I/O methods for Matrix
* Fix and optimize Matrix#invert
* Re-implement Matrix functions
* Fully implement ClipStack functions
* Other small fixes and improvements
### Modern UI 3.9.0.3
#### Forge Extension 1.19.4-45.1.0
* Fix validation errors
* Add font atlas compact
* Add Iris shaders integration
* Schedule GUI Scale value listener on next tick
* Better text config category
* Change typeface loading behavior
* Restore cursor position for Emoji shortcode substitution
* Rework font manager to implement core Emoji rendering
* Add GPU driver bug workarounds bootstrap properties
* Improve text field undo/redo
* Add undo/redo for EditBox
* Add GUI Scale to Preferences
* Add batch input commit
* Update translations
* Implement grapheme break for all text fields
* Implement break iter for vanilla EditBox
* Add music player
* Increase window size for OpenGL version test, fix game freeze on Linux
* Update font resources and licenses
* Add tooltip border width config
* Fix format error when setting color opacity
* Remove unused assets
* Completely switch to Arc3D and abandon GL*Compat
* Auto clean up less used GPU resources
* Always generate text config
* Use jar-in-jar for caffeine and flexmark
* Update synchronization, improve render performance
* Disable MSAA by default, 0.176x VRAM usage than before, and faster
* Update to latest Arc3D and ModernUI
#### Modern Text Engine 1.19.4
* Auto disable modern text shaders when Iris shaders are active
* Now follow vanilla's Force Unicode Font setting
* Fix compat with Curios
* Fix shadow offset Y for bitmap font
* Fix fist line rendering in sign edit GUI
* Add text layout command
* Remove text cache cleanup on parallel dispatch
* Dont draw text outline when 'modern text shaders in 3D' disabled
* Keep text shader preload consistent with vanilla UI shader preload
* Improve UniformScale text when GUI scale is less than 4
#### Core Framework 3.9.0
* Separate Arc 3D from core framework
* Optimize Matrix
* Optimize ImageStore
* Fix Image cleanup
* Add font atlas compact
* Fix emoji font color
* Add full Emoji font support to core framework
* Add Half (float16) type
* Move BinaryIO to Parcel
* Add ByteBuffer implementation for Parcelable
* Add commit batch input
* Fix per-cluster measure bug
* Fix track on rewind
* Rework on AudioSystem
* Move old ViewPager implementation to core framework
* Delay mipmaps regeneration for font atlas
* Fix and optimize SpanSet
* Decrease the default touchSlop value
* Completely remove GL*Compat classes, remove MSAA rendering
* Review bug on glfwWaitEventsTimeout
* Add CascadingMenuPopup presenter
* Remove IOException in readIntoNativeBuffer if >=2GB
* Fix compat with default render loop for OpenGL 3.3
* Optimize default bootstrap process
* Improve synchronization between UI thread and render thread
* Fragment now implements OnCreateContextMenuListener
* Fix saveLayer with alpha=0
* Add ContextMenuInfo
* Add ExpandableListView
* Fix ShapeDrawable line thickness
* Disable MSAA by default, and reduce the number of off-screen targets
* Remove the limit on the number of families in FontCollection
* Other small fixes and improvements
#### Arc 3D Graphics Engine 3.9.0
* Fix validation errors
* Add DriverBugWorkarounds
* Change to LinkedListMultimap
* Use HashMap for resource cache
* Better handling dirty OpenGL context states
* Add Blend constants
* Refactor Engine API
* Add Pixmap
* Fix GpuBufferPool
* Add SDF rectangle geometry processor
* Add NVIDIA driver bug workaround, when binding index buffer using DSA
* Add compat with OpenGL 3.3 upload pixels
* Add copyImage implementation, change Surface hierarchy
* Add Matrix.mapPoints and Matrix.getMin/MaxScale
* Add shear, map and I/O methods for Matrix
* Fix and optimize Matrix#invert
* Re-implement Matrix functions
* Fully implement ClipStack functions
* Other small fixes and improvements
### Modern UI 3.9.0.2
#### Forge Extension 1.19.2-43.1.2
* Fix validation errors
* Add font atlas compact
* Add Iris shaders integration
* Schedule GUI Scale value listener on next tick
* Better text config category
* Change typeface loading behavior
* Restore cursor position for Emoji shortcode substitution
* Rework font manager to implement core Emoji rendering
* Add GPU driver bug workarounds bootstrap properties
* Improve text field undo/redo
* Add undo/redo for EditBox
* Add GUI Scale to Preferences
* Add batch input commit
* Update translations
* Implement grapheme break for all text fields
* Implement break iter for vanilla EditBox
* Add music player
* Increase window size for OpenGL version test, fix game freeze on Linux
* Update font resources and licenses
* Add tooltip border width config
* Fix format error when setting color opacity
* Remove unused assets
* Completely switch to Arc3D and abandon GL*Compat
* Auto clean up less used GPU resources
* Always generate text config
* Use jar-in-jar for caffeine and flexmark
* Update synchronization, improve render performance
* Disable MSAA by default, 0.176x VRAM usage than before, and faster
* Update to latest Arc3D and ModernUI
#### Modern Text Engine 1.19.2
* Auto disable modern text shaders when Iris shaders are active
* Now follow vanilla's Force Unicode Font setting
* Fix compat with Curios
* Fix shadow offset Y for bitmap font
* Fix fist line rendering in sign edit GUI
* Add text layout command
* Remove text cache cleanup on parallel dispatch
* Dont draw text outline when 'modern text shaders in 3D' disabled
* Keep text shader preload consistent with vanilla UI shader preload
* Improve UniformScale text when GUI scale is less than 4
#### Core Framework 3.9.0
* Separate Arc 3D from core framework
* Optimize Matrix
* Optimize ImageStore
* Fix Image cleanup
* Add font atlas compact
* Fix emoji font color
* Add full Emoji font support to core framework
* Add Half (float16) type
* Move BinaryIO to Parcel
* Add ByteBuffer implementation for Parcelable
* Add commit batch input
* Fix per-cluster measure bug
* Fix track on rewind
* Rework on AudioSystem
* Move old ViewPager implementation to core framework
* Delay mipmaps regeneration for font atlas
* Fix and optimize SpanSet
* Decrease the default touchSlop value
* Completely remove GL*Compat classes, remove MSAA rendering
* Review bug on glfwWaitEventsTimeout
* Add CascadingMenuPopup presenter
* Remove IOException in readIntoNativeBuffer if >=2GB
* Fix compat with default render loop for OpenGL 3.3
* Optimize default bootstrap process
* Improve synchronization between UI thread and render thread
* Fragment now implements OnCreateContextMenuListener
* Fix saveLayer with alpha=0
* Add ContextMenuInfo
* Add ExpandableListView
* Fix ShapeDrawable line thickness
* Disable MSAA by default, and reduce the number of off-screen targets
* Remove the limit on the number of families in FontCollection
* Other small fixes and improvements
#### Arc 3D Graphics Engine 3.9.0
* Fix validation errors
* Add DriverBugWorkarounds
* Change to LinkedListMultimap
* Use HashMap for resource cache
* Better handling dirty OpenGL context states
* Add Blend constants
* Refactor Engine API
* Add Pixmap
* Fix GpuBufferPool
* Add SDF rectangle geometry processor
* Add NVIDIA driver bug workaround, when binding index buffer using DSA
* Add compat with OpenGL 3.3 upload pixels
* Add copyImage implementation, change Surface hierarchy
* Add Matrix.mapPoints and Matrix.getMin/MaxScale
* Add shear, map and I/O methods for Matrix
* Fix and optimize Matrix#invert
* Re-implement Matrix functions
* Fully implement ClipStack functions
* Other small fixes and improvements
### Modern UI 3.9.0.1
#### Forge Extension 1.18.2-40.1.73
* Fix validation errors
* Add font atlas compact
* Add Iris shaders integration
* Schedule GUI Scale value listener on next tick
* Better text config category
* Change typeface loading behavior
* Restore cursor position for Emoji shortcode substitution
* Rework font manager to implement core Emoji rendering
* Add GPU driver bug workarounds bootstrap properties
* Improve text field undo/redo
* Add undo/redo for EditBox
* Add GUI Scale to Preferences
* Add batch input commit
* Update translations
* Implement grapheme break for all text fields
* Implement break iter for vanilla EditBox
* Increase window size for OpenGL version test, fix game freeze on Linux
* Update font resources and licenses
* Add tooltip border width config
* Fix format error when setting color opacity
* Remove unused assets
* Completely switch to Arc3D and abandon GL*Compat
* Auto clean up less used GPU resources
* Always generate text config
* Use jar-in-jar for caffeine and flexmark
* Update synchronization, improve render performance
* Disable MSAA by default, 0.176x VRAM usage than before, and faster
* Update to latest Arc3D and ModernUI
#### Modern Text Engine 1.18.2
* Auto disable modern text shaders when Iris shaders are active
* Now follow vanilla's Force Unicode Font setting
* Fix compat with Curios
* Fix shadow offset Y for bitmap font
* Add text layout command
* Remove text cache cleanup on parallel dispatch
* Dont draw text outline when 'modern text shaders in 3D' disabled
* Keep text shader preload consistent with vanilla UI shader preload
* Improve UniformScale text when GUI scale is less than 4
#### Core Framework 3.9.0
* Separate Arc 3D from core framework
* Optimize Matrix
* Optimize ImageStore
* Fix Image cleanup
* Add font atlas compact
* Fix emoji font color
* Add full Emoji font support to core framework
* Add Half (float16) type
* Move BinaryIO to Parcel
* Add ByteBuffer implementation for Parcelable
* Add commit batch input
* Fix per-cluster measure bug
* Fix track on rewind
* Rework on AudioSystem
* Move old ViewPager implementation to core framework
* Delay mipmaps regeneration for font atlas
* Fix and optimize SpanSet
* Decrease the default touchSlop value
* Completely remove GL*Compat classes, remove MSAA rendering
* Review bug on glfwWaitEventsTimeout
* Add CascadingMenuPopup presenter
* Remove IOException in readIntoNativeBuffer if >=2GB
* Fix compat with default render loop for OpenGL 3.3
* Optimize default bootstrap process
* Improve synchronization between UI thread and render thread
* Fragment now implements OnCreateContextMenuListener
* Fix saveLayer with alpha=0
* Add ContextMenuInfo
* Add ExpandableListView
* Fix ShapeDrawable line thickness
* Disable MSAA by default, and reduce the number of off-screen targets
* Remove the limit on the number of families in FontCollection
* Other small fixes and improvements
#### Arc 3D Graphics Engine 3.9.0
* Fix validation errors
* Add DriverBugWorkarounds
* Change to LinkedListMultimap
* Use HashMap for resource cache
* Better handling dirty OpenGL context states
* Add Blend constants
* Refactor Engine API
* Add Pixmap
* Fix GpuBufferPool
* Add SDF rectangle geometry processor
* Add NVIDIA driver bug workaround, when binding index buffer using DSA
* Add compat with OpenGL 3.3 upload pixels
* Add copyImage implementation, change Surface hierarchy
* Add Matrix.mapPoints and Matrix.getMin/MaxScale
* Add shear, map and I/O methods for Matrix
* Fix and optimize Matrix#invert
* Re-implement Matrix functions
* Fully implement ClipStack functions
* Other small fixes and improvements
### Modern UI 3.8.2.4
#### Forge Extension 1.20.1-47.0.14 / NeoForge Extension 1.20.1-47.1.4
* Change the crash with TipTheScales to warning
* Remove bitwise AND in shaders
#### Fabric Extension 1.20.1-0.14.21-0.87.0 / Quilt Extension 1.20.1-7.1.2-0.87.0
* Remove bitwise AND in shaders
* Functionally equivalent to Forge version but removed some features
### Modern Text Engine 1.20.1
* Only override Font's StringSplitter
### Modern UI 3.8.2.4
#### Forge Extension 1.20.1-47.0.14 / NeoForge Extension 1.20.1-47.1.4
* Change the crash with TipTheScales to warning
* Remove bitwise AND in shaders
#### Fabric Extension 1.20.1-0.14.21-0.87.0 / Quilt Extension 1.20.1-7.1.2-0.87.0
* Remove bitwise AND in shaders
* Functionally equivalent to Forge version but removed some features
### Modern Text Engine 1.20.1
* Only override Font's StringSplitter
### Modern UI 3.8.2.3
#### Forge Extension 1.19.4-45.1.0
* Change the crash with TipTheScales to warning
* Change step size for master volume multiplier option to 0.01
* Prevent Action Center from being opened when a screen with shouldCloseOnEsc=false is opened
* Request window attention when "Ding" is enabled
#### Modern Text Engine 1.19.4
* Only override Font's StringSplitter
#### Core Framework 3.8.2
* Add GridView
* Add GridLayout
* Add TableLayout
* Add UndoManager
* Add compatibility with LWJGL 3.2
#### Arc 3D Graphics Engine 3.8.2
* Fix compatibility with OpenGL 3.3
### Modern UI 3.8.2.2
#### Forge Extension 1.19.2-43.1.2
* Change the crash with TipTheScales to warning
* Change step size for master volume multiplier option to 0.01
* Prevent Action Center from being opened when a screen with shouldCloseOnEsc=false is opened
* Request window attention when "Ding" is enabled
#### Modern Text Engine 1.19.2
* Only override Font's StringSplitter
#### Core Framework 3.8.2
* Add GridView
* Add GridLayout
* Add TableLayout
* Add UndoManager
* Add compatibility with LWJGL 3.2
#### Arc 3D Graphics Engine 3.8.2
* Fix compatibility with OpenGL 3.3
### Modern UI 3.8.2.1
#### Forge Extension 1.18.2-40.1.73
* Change step size for master volume multiplier option to 0.01
* Prevent Action Center from being opened when a screen with shouldCloseOnEsc=false is opened
* Request window attention when "Ding" is enabled
#### Modern Text Engine 1.18.2
* Only override Font's StringSplitter
#### Core Framework 3.8.2
* Add GridView
* Add GridLayout
* Add TableLayout
* Add UndoManager
* Add compatibility with LWJGL 3.2
#### Arc 3D Graphics Engine 3.8.2
* Fix compatibility with OpenGL 3.3
### Modern UI 3.8.1.5
#### Forge Extension 1.20.1-47.0.14 / NeoForge Extension 1.20.1-47.1.4
* Re-architect for platform abstraction
* Change step size for master volume multiplier option to 0.01
* Prevent Action Center from being opened when a screen with shouldCloseOnEsc=false is opened
* Request window attention when "Ding" is enabled
#### Fabric Extension 1.20.1-0.14.21-0.87.0 / Quilt Extension 1.20.1-7.1.2-0.87.0
* Functionally equivalent to Forge version but removed some features
#### Modern Text Engine 1.20.1
* No change
#### Core Framework 3.8.1
#### Arc 3D Graphics Engine 3.8.1
#### View Pager 3.8.1
#### Markdown 3.8.1
### Modern UI 3.8.1.5
#### Forge Extension 1.20.1-47.0.14 / NeoForge Extension 1.20.1-47.1.4
* Re-architect for platform abstraction
* Change step size for master volume multiplier option to 0.01
* Prevent Action Center from being opened when a screen with shouldCloseOnEsc=false is opened
* Request window attention when "Ding" is enabled
#### Fabric Extension 1.20.1-0.14.21-0.87.0 / Quilt Extension 1.20.1-7.1.2-0.87.0
* Functionally equivalent to Forge version but removed some features
#### Modern Text Engine 1.20.1
* No change
#### Core Framework 3.8.1
#### Arc 3D Graphics Engine 3.8.1
#### View Pager 3.8.1
#### Markdown 3.8.1
### Modern UI 3.8.1.4
#### Forge Extension 1.20.1-47.0.14
* Add OptiFine-like zoom
* Add master volume multiplier on window blur or minimized
* Add framerate limit on window blur or minimized
* Add hot reload of the default typeface list
* Add font selection list and open file dialog
* Separate old font family config into preferred one and fallbacks
* Fix ASCII digit input in Arabic
* Add tooltip center alignment
* Add tooltip title break
* Improve extra spacing below tooltip title
* Add config to switch between rounded rect or normal rect for tooltip border
* Add config for exact tooltip positioning
* Add maximized borderless mode
* Improve fullscreen borderless on Windows
* Update default config
* Fix crash on setting opacity to 0
* Fix possible crash in parsing color string
* Add Fragments into crash report
* Add more advanced options
#### Modern Text Engine 1.20.1
* Add fake italic support for bitmap fonts
* Add device font size computation in 2D
* Add SDF text control in 2D
* Add cache lifespan config back
* Optimize cache performance
* Add config for async text layout
* Fix text engine not fully disabled
* Fix memory leakage when reloading resources
* Add smart SDF text control
* Fix polygon offset issues
* Fix possible crash on populateDefaultFonts
* Add line break style config
* Add line break word style config
* Fix shadow offset for bitmap fonts
* Add redirect of UniformFont
#### Core Framework 3.8.1
* Add LayerDrawable
* Allow typeface change for toasts
* Fix adapter views not getting attached
* Fix changing focus with TAB key
* Make ScrollView auto scroll to focus
* Add implementation of LineBreakConfig
* Stop text from being split into small MeasureText.Runs
#### Arc 3D Graphics Engine 3.8.1
* Add rect stroke bevel and round shaders
* Limit FontAtlas size
* Make use of GLSL version in ShaderCaps
* Add numDraws and renderPasses stats
### Modern UI 3.8.1.3
#### Forge Extension 1.19.4-45.1.0
* Add OptiFine-like zoom
* Add master volume multiplier on window blur or minimized
* Add framerate limit on window blur or minimized
* Add hot reload of the default typeface list
* Add font selection list and open file dialog
* Separate old font family config into preferred one and fallbacks
* Fix ASCII digit input in Arabic
* Add tooltip center alignment
* Add tooltip title break
* Improve extra spacing below tooltip title
* Add config to switch between rounded rect or normal rect for tooltip border
* Add config for exact tooltip positioning
* Add maximized borderless mode
* Improve fullscreen borderless on Windows
* Update default config
* Fix crash on setting opacity to 0
* Fix possible crash in parsing color string
* Add Fragments into crash report
* Add more advanced options
#### Modern Text Engine 1.19.4
* Add fake italic support for bitmap fonts
* Add device font size computation in 2D
* Add SDF text control in 2D
* Add cache lifespan config back
* Optimize cache performance
* Add config for async text layout
* Fix text engine not fully disabled
* Fix memory leakage when reloading resources
* Add smart SDF text control
* Fix polygon offset issues
* Fix possible crash on populateDefaultFonts
* Add line break style config
* Add line break word style config
* Fix shadow offset for bitmap fonts
* Add redirect of UniformFont
#### Core Framework 3.8.1
* Add LayerDrawable
* Allow typeface change for toasts
* Fix adapter views not getting attached
* Fix changing focus with TAB key
* Make ScrollView auto scroll to focus
* Add implementation of LineBreakConfig
* Stop text from being split into small MeasureText.Runs
#### Arc 3D Graphics Engine 3.8.1
* Add rect stroke bevel and round shaders
* Limit FontAtlas size
* Make use of GLSL version in ShaderCaps
* Add numDraws and renderPasses stats
### Modern UI 3.8.1.2
#### Forge Extension 1.19.2-43.1.2
* Add OptiFine-like zoom
* Add master volume multiplier on window blur or minimized
* Add framerate limit on window blur or minimized
* Add hot reload of the default typeface list
* Add font selection list and open file dialog
* Separate old font family config into preferred one and fallbacks
* Fix ASCII digit input in Arabic
* Add tooltip center alignment
* Add tooltip title break
* Improve extra spacing below tooltip title
* Add config to switch between rounded rect or normal rect for tooltip border
* Add config for exact tooltip positioning
* Add maximized borderless mode
* Improve fullscreen borderless on Windows
* Update default config
* Fix crash on setting opacity to 0
* Fix possible crash in parsing color string
* Add Fragments into crash report
* Add more advanced options
#### Modern Text Engine 1.19.2
* Add fake italic support for bitmap fonts
* Add device font size computation in 2D
* Add SDF text control in 2D
* Add cache lifespan config back
* Optimize cache performance
* Add config for async text layout
* Fix text engine not fully disabled
* Fix memory leakage when reloading resources
* Add smart SDF text control
* Fix polygon offset issues
* Fix possible crash on populateDefaultFonts
* Add line break style config
* Add line break word style config
* Fix shadow offset for bitmap fonts
* Add redirect of UniformFont
#### Core Framework 3.8.1
* Add LayerDrawable
* Allow typeface change for toasts
* Fix adapter views not getting attached
* Fix changing focus with TAB key
* Make ScrollView auto scroll to focus
* Add implementation of LineBreakConfig
* Stop text from being split into small MeasureText.Runs
#### Arc 3D Graphics Engine 3.8.1
* Add rect stroke bevel and round shaders
* Limit FontAtlas size
* Make use of GLSL version in ShaderCaps
* Add numDraws and renderPasses stats
### Modern UI 3.8.1.1
#### Forge Extension 1.18.2-40.1.73
* Add OptiFine-like zoom
* Add master volume multiplier on window blur or minimized
* Add framerate limit on window blur or minimized
* Add hot reload of the default typeface list
* Add font selection list and open file dialog
* Separate old font family config into preferred one and fallbacks
* Fix ASCII digit input in Arabic
* Add tooltip center alignment
* Add tooltip title break
* Improve extra spacing below tooltip title
* Add config to switch between rounded rect or normal rect for tooltip border
* Add config for exact tooltip positioning
* Add maximized borderless mode
* Improve fullscreen borderless on Windows
* Update default config
* Fix crash on setting opacity to 0
* Fix possible crash in parsing color string
* Add Fragments into crash report
* Add more advanced options
#### Modern Text Engine 1.18.2
* Add fake italic support for bitmap fonts
* Add device font size computation in 2D
* Add SDF text control in 2D
* Add cache lifespan config back
* Optimize cache performance
* Add config for async text layout
* Fix text engine not fully disabled
* Fix memory leakage when reloading resources
* Add smart SDF text control
* Fix polygon offset issues
* Fix possible crash on populateDefaultFonts
* Add line break style config
* Add line break word style config
* Fix shadow offset for bitmap fonts
* Add redirect of UniformFont
#### Core Framework 3.8.1
* Add LayerDrawable
* Allow typeface change for toasts
* Fix adapter views not getting attached
* Fix changing focus with TAB key
* Make ScrollView auto scroll to focus
* Add implementation of LineBreakConfig
* Stop text from being split into small MeasureText.Runs
#### Arc 3D Graphics Engine 3.8.1
* Add rect stroke bevel and round shaders
* Limit FontAtlas size
* Make use of GLSL version in ShaderCaps
* Add numDraws and renderPasses stats
### Modern UI 3.8.0.4
#### Forge Extension 1.20.1-47.0.14
* Add tooltips for some options
* Add in-game option for background opacity
* Use bootstrap.properties instead of bootstrap file
* Add dynamic tooltip border colors and presets
* Block NUL char for input method
#### Modern Text Engine 1.20.1
* Add config to control component cache
* Add default font behavior to control whether to use default font
* Add SpaceFont for compatibility
* Add position alignment for direct mask drawing
* Add StandardFontSet for better mod compatibility
* Make color emoji work in font itemization rather than brute force
* Enhance and optimize text layout engine
* Only compute the required information
* Make text layout asynchronous
* Mix layout processor into LayoutCore to increase cache hit
* Adjust paragraph layout lifespan
* Reduce performance and memory impact
* Remove fast digit replacement
* Make obfuscated style work with bitmap fonts
* Adjust EditBox highlight color
#### Core Framework 3.8.0
* Update font itemization for color emoji
* Fit sub-windows in main window
* Add ColorEmoji support for font itemization
* Optimize GPU glyph memory usage
* Block NUL and DEL character from input
* Add EmojiFont features
* Replace Matrix4 with Matrix for View
* Add TooltipPopup support for View
* Add Font interface for layout engine, move old Font usage to StandardFont
* Add text pre-computation
* Replace all ascents with negative values
* Fix TextLine context range
* Add offset parameters to GlyphsConsumer
* Add TextShaper.shapeText for multi-styled text
* Fix Canvas.drawText(ShapedText) method
* Update TextShaper and Canvas methods
* Add TrailingMarginSpan, add LineBackgroundSpan, add TypefaceSpan
* Enhance rich text spans, add AlignmentSpan, BulletSpan, LeadingMarginSpan, QuoteSpan
* Optimize MeasuredText
* Supports text layout with optional per-glyph advances and pixel bounds
* Separate Arc Paint, Graphics Paint, TextPaint and FontPaint
* Enhance temp TextBuffer recycling
* Fix fast path for BoringLayout.draw()
* Remove Canvas.drawText(CharSequence)
* Replace old LayoutPiece usage with ShapedText.doLayout
* Optimize text rendering
* Fix FontFamily is not thread safe
* Add Matrix for 2D transform (xyw), Matrix3 for 3D transform (xyz)
* Migrate graphics package to Arc 3D
* Add explicit camera distance
* Other small updates...
#### Arc 3D Graphics Engine 3.8.0
* Add experimental instanced rendering
* Optimize text rendering
* Always use buffer orphaning for OpenGL
* Add backend render target wrapping
* Add submit method for BufferPool
* Add IndexMeshPool
* Move some context states out of GLCommandBuffer
* Add RingBuffer
* Add some Vulkan backend classes
#### Markdown 3.8.0
* Add Code and CodeBlock
* Initial basic Markdown support
### Modern UI 3.8.0.3
#### Forge Extension 1.19.4-45.1.0
* Add tooltips for some options
* Add in-game option for background opacity
* Use bootstrap.properties instead of bootstrap file
* Add dynamic tooltip border colors and presets
* Block NUL char for input method
#### Modern Text Engine 1.19.4
* Add config to control component cache
* Add default font behavior to control whether to use default font
* Add SpaceFont for compatibility
* Add position alignment for direct mask drawing
* Add StandardFontSet for better mod compatibility
* Make color emoji work in font itemization rather than brute force
* Enhance and optimize text layout engine
* Only compute the required information
* Make text layout asynchronous
* Mix layout processor into LayoutCore to increase cache hit
* Adjust paragraph layout lifespan
* Reduce performance and memory impact
* Remove fast digit replacement
* Make obfuscated style work with bitmap fonts
* Adjust EditBox highlight color
#### Core Framework 3.8.0
* Update font itemization for color emoji
* Fit sub-windows in main window
* Add ColorEmoji support for font itemization
* Optimize GPU glyph memory usage
* Block NUL and DEL character from input
* Add EmojiFont features
* Replace Matrix4 with Matrix for View
* Add TooltipPopup support for View
* Add Font interface for layout engine, move old Font usage to StandardFont
* Add text pre-computation
* Replace all ascents with negative values
* Fix TextLine context range
* Add offset parameters to GlyphsConsumer
* Add TextShaper.shapeText for multi-styled text
* Fix Canvas.drawText(ShapedText) method
* Update TextShaper and Canvas methods
* Add TrailingMarginSpan, add LineBackgroundSpan, add TypefaceSpan
* Enhance rich text spans, add AlignmentSpan, BulletSpan, LeadingMarginSpan, QuoteSpan
* Optimize MeasuredText
* Supports text layout with optional per-glyph advances and pixel bounds
* Separate Arc Paint, Graphics Paint, TextPaint and FontPaint
* Enhance temp TextBuffer recycling
* Fix fast path for BoringLayout.draw()
* Remove Canvas.drawText(CharSequence)
* Replace old LayoutPiece usage with ShapedText.doLayout
* Optimize text rendering
* Fix FontFamily is not thread safe
* Add Matrix for 2D transform (xyw), Matrix3 for 3D transform (xyz)
* Migrate graphics package to Arc 3D
* Add explicit camera distance
* Other small updates...
#### Arc 3D Graphics Engine 3.8.0
* Add experimental instanced rendering
* Optimize text rendering
* Always use buffer orphaning for OpenGL
* Add backend render target wrapping
* Add submit method for BufferPool
* Add IndexMeshPool
* Move some context states out of GLCommandBuffer
* Add RingBuffer
* Add some Vulkan backend classes
#### Markdown 3.8.0
* Add Code and CodeBlock
* Initial basic Markdown support
### Modern UI 3.8.0.2
#### Forge Extension 1.19.2-43.1.2
* Add tooltips for some options
* Add in-game option for background opacity
* Use bootstrap.properties instead of bootstrap file
* Add dynamic tooltip border colors and presets
* Block NUL char for input method
#### Modern Text Engine 1.19.2
* Add config to control component cache
* Add default font behavior to control whether to use default font
* Add SpaceFont for compatibility
* Add position alignment for direct mask drawing
* Add StandardFontSet for better mod compatibility
* Make color emoji work in font itemization rather than brute force
* Enhance and optimize text layout engine
* Only compute the required information
* Make text layout asynchronous
* Mix layout processor into LayoutCore to increase cache hit
* Adjust paragraph layout lifespan
* Reduce performance and memory impact
* Remove fast digit replacement
* Make obfuscated style work with bitmap fonts
* Adjust EditBox highlight color
#### Core Framework 3.8.0
* Update font itemization for color emoji
* Fit sub-windows in main window
* Add ColorEmoji support for font itemization
* Optimize GPU glyph memory usage
* Block NUL and DEL character from input
* Add EmojiFont features
* Replace Matrix4 with Matrix for View
* Add TooltipPopup support for View
* Add Font interface for layout engine, move old Font usage to StandardFont
* Add text pre-computation
* Replace all ascents with negative values
* Fix TextLine context range
* Add offset parameters to GlyphsConsumer
* Add TextShaper.shapeText for multi-styled text
* Fix Canvas.drawText(ShapedText) method
* Update TextShaper and Canvas methods
* Add TrailingMarginSpan, add LineBackgroundSpan, add TypefaceSpan
* Enhance rich text spans, add AlignmentSpan, BulletSpan, LeadingMarginSpan, QuoteSpan
* Optimize MeasuredText
* Supports text layout with optional per-glyph advances and pixel bounds
* Separate Arc Paint, Graphics Paint, TextPaint and FontPaint
* Enhance temp TextBuffer recycling
* Fix fast path for BoringLayout.draw()
* Remove Canvas.drawText(CharSequence)
* Replace old LayoutPiece usage with ShapedText.doLayout
* Optimize text rendering
* Fix FontFamily is not thread safe
* Add Matrix for 2D transform (xyw), Matrix3 for 3D transform (xyz)
* Migrate graphics package to Arc 3D
* Add explicit camera distance
* Other small updates...
#### Arc 3D Graphics Engine 3.8.0
* Add experimental instanced rendering
* Optimize text rendering
* Always use buffer orphaning for OpenGL
* Add backend render target wrapping
* Add submit method for BufferPool
* Add IndexMeshPool
* Move some context states out of GLCommandBuffer
* Add RingBuffer
* Add some Vulkan backend classes
#### Markdown 3.8.0
* Add Code and CodeBlock
* Initial basic Markdown support
### Modern UI 3.8.0.1
#### Forge Extension 1.18.2-40.1.73
* Add tooltips for some options
* Add in-game option for background opacity
* Use bootstrap.properties instead of bootstrap file
* Add dynamic tooltip border colors and presets
* Block NUL char for input method
* Fix crash on dedicated server
* Fix possible startup crash
* Add ContainerDrawHelper
* Add config to use vanilla font for convenience
* Remove tooltip fade-in animation
* Add slider control for preferences
* Fix UI screenshot not un-premultiplied
* Don't allow soft launching due to OpenGL 3.3 support
* Fix GUI scale pinned after game restart
* Add CenterFragment2
* Remove noise from gaussian blur shader
* Remove deprecated configs
* Adjust GUI scale algorithm
* Adjust tooltip border width
* Support capability for fragments and screens
* Fix incorrect color blending for tooltip
* Fix GUI scale is always auto after restart
* Fix black screen with blur effect
* Add glow wave effect
* Change the background blur from 4-pass box blur to 2-pass gaussian blur with lod and noise
* Improve config reloading and action center UI
* Fix crash on dedicated server (though you shouldn't install on server)
* Add config to disable slider GUI scale
* Update GUI scale algorithm
* Add I18n compat characters
* Add new API and remove server dependency
* Change registration and network to internal
#### Modern Text Engine 1.18.2
* Add config to control component cache
* Add default font behavior to control whether to use default font
* Add SpaceFont for compatibility
* Add position alignment for direct mask drawing
* Add StandardFontSet for better mod compatibility
* Make color emoji work in font itemization rather than brute force
* Enhance and optimize text layout engine
* Only compute the required information
* Make text layout asynchronous
* Mix layout processor into LayoutCore to increase cache hit
* Adjust paragraph layout lifespan
* Reduce performance and memory impact
* Remove fast digit replacement
* Make obfuscated style work with bitmap fonts
* Adjust EditBox highlight color
* Fix EditBox selection highlight
* Fix per-glyph rendering for compatibility
* Fix obfuscated text crash in world using SDF
* Make SDF work as long as in 3D or non-translation matrix
* Make SDF work with 32pt font size at least
* Remove alignPixels due to font hinting
* Replace 8x outline with SDF stroke
* Fix compatibility for Create display board
* Change Twemoji 14 to Google Noto Color Emoji 15
* Fix text rendered as emoji without VS-16 (0xFE0F)
* Combine IamCal (Slack) shortcodes with JoyPixels (Discord) and Google
* Add distance field text to 3D world
* Fix total advance of layout is never pixel-aligned
* Fix TTF loading in vanilla resource packs
* Adjust texture sharpening factor
* Fix line breaking for obfuscated chars
* Remove enchantment font hack
* Support vanilla bitmap font in replacement run
* Support vanilla bitmap font as font family
* Support vanilla font declaration
* Adjust text decoration thickness
* Reduce unnecessary native memory usage in vanilla
* Make font resource reloading work async
* Optimize ChatFormatting.getByCode to O(1)
* Optimize layout caching strategy
* Add font set to layout key
* Add sharpen font atlases
* Change blend mode for glowing text
* Add new glowing text effect
* Add deferred rendering to improve performance
#### Core Framework 3.8.0
* Update font itemization for color emoji
* Fit sub-windows in main window
* Add ColorEmoji support for font itemization
* Optimize GPU glyph memory usage
* Block NUL and DEL character from input
* Add EmojiFont features
* Replace Matrix4 with Matrix for View
* Add TooltipPopup support for View
* Add Font interface for layout engine, move old Font usage to StandardFont
* Add text pre-computation
* Replace all ascents with negative values
* Fix TextLine context range
* Add offset parameters to GlyphsConsumer
* Add TextShaper.shapeText for multi-styled text
* Fix Canvas.drawText(ShapedText) method
* Update TextShaper and Canvas methods
* Add TrailingMarginSpan, add LineBackgroundSpan, add TypefaceSpan
* Enhance rich text spans, add AlignmentSpan, BulletSpan, LeadingMarginSpan, QuoteSpan
* Optimize MeasuredText
* Supports text layout with optional per-glyph advances and pixel bounds
* Separate Arc Paint, Graphics Paint, TextPaint and FontPaint
* Enhance temp TextBuffer recycling
* Fix fast path for BoringLayout.draw()
* Remove Canvas.drawText(CharSequence)
* Replace old LayoutPiece usage with ShapedText.doLayout
* Optimize text rendering
* Fix FontFamily is not thread safe
* Add Matrix for 2D transform (xyw), Matrix3 for 3D transform (xyz)
* Migrate graphics package to Arc 3D
* Add explicit camera distance
* Add context range to LayoutCache
* Add draw ShapedText, add register method to FontFamily
* Add ShapedText and TextShaper for drawing text, make drawText deprecated
* Rework LayoutPiece, optimize cluster work, now it won't do texture work
* Add FontFamily aliases
* Moving low-level text layout to graphics.text package
* Fix MessageQueue parkNanos time unit
* Don't use perspective if View has no 3D transform
* Add WindowGroup for toasts and popups
* Add context to Toast
* Add MpmcArrayQueue
* Optimize view matrix composition
* Rework threading system
* Add ProgressBar and SeekBar
* Add Locale alias for FontFamily
* Add ScaleDrawable
* Change ScrollView default scrollbar
* Fix bitmap getPixelARGB on BIG ENDIAN machine
* Rework ShapeDrawable, remove old Shape classes
* Set long press timeout to 1000ms by default
* Add LinkMovementMethod
* Update BinaryIO
* Update ListView
* Update Pool and Pools
* Update Paint methods
* Add ViewPager module
* Rework drawLine method with SDF
* Add drawPie drawMesh canvas method
* Add GIF image decoder
* Add more Bitmap formats and image decode methods
* Merge Arc 3D graphics engine
* Add framework Nullable/NonNull annotations
* Allow Bitmap's pixels to be shared
* Add ColorSpace implementation
* Update Matrix and MathUtil
* Optimize for styled text, make text style serializable
* Add complex value and display metrics
* Add linked structure and custom data class for DataSet
* Add property name for Property
* Fix distance-to-edge anti-aliasing is gamma correct
* Adjust analytic anti-aliasing to screen-space
* Improve font collection itemization
* Update shaders to a modern version
* Use indexed rendering for glyph meshes
* Add sharpen textures for all shaders
* Always use premultiplied alpha for builtin renderer
* Compact font atlas generation
* Other small updates...
#### Arc 3D Graphics Engine 3.8.0
* Add experimental instanced rendering
* Optimize text rendering
* Always use buffer orphaning for OpenGL
* Add backend render target wrapping
* Add submit method for BufferPool
* Add IndexMeshPool
* Move some context states out of GLCommandBuffer
* Add RingBuffer
* Add some Vulkan backend classes
* Fix BufferAllocPool
* Fix OpsRenderPass buffer pointers
* Update VaryingHandler and UniformHandler layout qualifier
* Add compatibility for base instance support
* Add GLUniformBuffer and buffer upload
* Add FilterMode, MipmapMode and AnisotropicFiltering for Paint
* Add async pipeline state cache (thread safe)
* Add separate objects from graphics package
* Add CustomDrawable for handling unmanaged draw
* Fix Buffer unlock method
* Fix BufferAlloc pointers
* Add RoundRectGeoProc
* Add Buffer creation method to Engine
* Add DrawOp and MeshDrawOp
* Add OpListTask
* Replace GLPipeline with separate GLProgram and GLVertexArray
* Add GLOpsRenderPass
* Add GLUniformDataManager
* Support base offset for GLVertexArray in OpenGL 3.3
* Fix Surface hierarchy
* Use MSAA resolve instead of MS texture sampler
* Add compatibility methods for creating render target objects
* Add close() for LazyCallback proxies
* Add GL_RG for GrayAlpha surface usage
* Add OpenGL 3.3 compatible shaders
* Add mutable texture allocation methods
* Add swizzle on texture binding
* Use separate min/mag filter for SamplerState
* Optimize surface canvas methods
* Optimize font atlas generation
* Change default font atlas size to 4 chunks (1024x1024)
* Change number of font atlases from multiple to single
* Add efficient rectangle packing algorithms
#### Markdown 3.8.0
* Add Code and CodeBlock
* Initial basic Markdown support
#### View Pager 3.8.0
* Add linear pager indicator
* Initial update