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.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.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.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