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
- Use
- 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
- We prefer computeDeviceFontSize and allowSDFTextIn2D, if some mods use
- 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
- Use
- 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
- We prefer computeDeviceFontSize and allowSDFTextIn2D, if some mods use
- 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
- Use
- 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
- We prefer computeDeviceFontSize and allowSDFTextIn2D, if some mods use
- 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
- Use
- 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
- We prefer computeDeviceFontSize and allowSDFTextIn2D, if some mods use
- 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
- Use
- 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
- We prefer computeDeviceFontSize and allowSDFTextIn2D, if some mods use
- 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.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