Please sign in to access this page

Ascendium

Ascendium

57 devlogs
127h 20m
•  Ship certified
Created by BetterClient

Remake of my old minecraft client.
It's built with jetpack compose and skia.
It's compatible with 10 minecraft versions and built in a way that allows new versions to be supported in a matter of minutes.

Timeline

Ship 1

1 payout of shell 2606.0 shells

BetterClient

about 2 months ago

BetterClient Covers 57 devlogs and 127h 20m
Earned sticker

Did a lot of general changes to get ready for shipping.
Added 1.21.9 support.
Fixed OpenGL renderer on windows.

Update attachment
Earned sticker

Created a website for a demo

Update attachment

ADDED 1.16.5 SUPPORT
fixed clicks being ghosted in offscreen mode

Update attachment

Improved offscreen compatibility
Added inactive thread detection

Update attachment
Earned sticker

Removed DynamicUI, it wasn't needed
So first, I created an AWT backend that used skia's awt canvas to render, which proved to be slow asf, and after a little bit of inspecting it's source code i found that it just created a secondary opengl context behind the scenes and made my render loop wait for gpu -> cpu -> gpu -> cpu -> gpu, which was very slow, so I decided to make OffscreenSkiaRenderer:

OffscreenSkiaRenderer creates a seperate thread from minecraft
Creates an OpenGL context with sharing(it shares stuff like textures with minecraft's opengl context)
And renders to the seperate context

This allows for fully custom rendering that's not influenced by minecraft's renderer
I created a helper function to render pre-existing opengl textures to minecraft (bridged)
So now this render pipeline is gpu -> gpu, this is still worse than directly rendering to minecraft's opengl (just gpu), but it is still fast asf
And it now works for all versions

I added 1.21.8 support back, its more optimized than ever, it uses GPU rendering(0.5ms, compared to 400ms with software)

Update attachment
Earned sticker

implemented conditional settings
implemented accelerometer mod, compass mod
keystrokes joystick mode

Earned sticker

Did a small refactor, fixed 1.21.4 opengl textures

Update attachment

Added mouse tracker mod

Felix Felix about 2 months ago

I loveeee how it looks!! ✨✨✨

Earned sticker

Failed to add 1.16.5 support, skia really doesn't seem to like it, will check back later, but reverted for now

Update attachment

added support for 1.19.4 and 1.19.2

Update attachment

added support for 1.20.4 and 1.20.6 and 1.20.1
fixed final jars

Update attachment

Decided to take a break on the chromium backend for now, got 1.21.1 working

Update attachment

Built a jetpack compose like UI library for generating html for ChromiumUI
It automatically manages your server and layout, also allows you to assign kotlin event handlers to html buttons via cefQuery

Update attachment

Implemented DynamicUI system:
It automatically chooses between skia and chromium.
It forces chromium for 1.21.8.
It allows you to choose for 1.21.4
I need to rewrite all of my UI's with chromium (while the other implementation stays)
So everything is just errors right now(because it doesn't have a chromium implementation)

Update attachment

Did JFR profiling on software renderer, its not in my code's fault mostly, optimized as much as I could.
Fixed crashes.
Fixed input events not registering.
Added a gui scaling field to client settings to render UI/mods at a lower quality (make it faster)
Gonna finally start doing other versions (1.21.1 first)

Update attachment

Optimized software rendering(1.21.8) and fixed crashes.

Update attachment

1.21.8 support is here!
I use an adapter system for making the client a single fat jar, the same jar works for both 1.21.4 and 1.21.8.

Skia does not play nicely with 1.21.8's rendering, so 1.21.8 uses software rendering(ew)
The software renderer runs on a separate thread, does not disturb the game.
The background thread:
- Runs skia with software rendering
- Resizes image and converts to NativeImage
The game render thread:
- Copies the native image to gpu
- Renders it
Background thread averages: 20ms (50fps)
Game thread averages: 20ms (still 50fps)

I haven't finished the full optimizations for this rendering, the game thread copies every frame, even if it hasn't changed.

This was pain

Update attachment

1.21.8 port is going good but:
Skia is making me suffer, HEELP MEEE HELP ME HELP ME HELP ME HELP ME
Hopefully next devlog I'll have 1.21.8 working perfectly.

Update attachment

Finished notification renderer
Fixed notification animations
Fixed logic bugs in notifications
Moved notification logic into multiple files

Update attachment

Removed BridgeRenderer and BridgeTextRenderer
Made themes WCAG compliant
Finished notifications

Implemented text and chatevent
Moved notifications into data classes

creating a notification system, got it rendering
tried to make background blurs use skia but failed (mc blurring has layering issues with skia)

Update attachment

Tried to update dependencies and failed miserably (managed to update 1/81, i blame google)
Fixed preview heights

Fixed module previews
Created hit history mod

Update attachment

Created a custom loading screen
Tried to make resource reload multi-threaded, looks like the same time from my testing, unsure

Update attachment

Added drop shadow to ui and hud's

Update attachment

Created main menu
Made bridge.client global
Added a preview renderer to modules
Did small refactors

Update attachment

Implemented PositionDisplayMod

Update attachment

Add count and durability to armor display mod

Optimized new hud renderer
Implemented ArmorDisplayMod

Rewrote HUD rendering completely

Update attachment

Fixed menu's not closing properly

Fix configs and move back button in easter egg

Update attachment

Fixed color picker crash
Fixed navigation bar colors
Optimized build.gradle (removed unnecessary deps)

Update attachment

Added a navigation bar to chromium

Update attachment

Fixed chromium implementation

Implemented ping mod, server display mod and reach display mod

Update attachment

Implemented keystrokes mod

Update attachment

Implemented CPSMod

Added empty protection to color fields

Implemented color picker

Update attachment

Fixed config not saving properly (logic fault)

Update attachment

Added minecraft font and theme
Fixed config not saving properly

Update attachment

Fixed font size inconsistencies
Fixed button color inconsistencies
Added mod toggle composer
Fixed build issues (MixinTextRenderer.getTextWidth)
Fixed theme switching

Update attachment

Fixed skia renderer font metrics

Update attachment

Optimized module rendering by 100x
Before: 5ms per module (4ms initialization + 1ms render)
After: 0.05ms per module (200ns initialization + 49k ns render)

Update attachment

I got a bit side tracked... and got chromium running, it still has a lot of work to be done, I will leave this in the source code for now, will polish it up later(I have an idea)

Implemented ModConfigUI
Not complete, ColorSetting is missing
SkiaModRenderer is broken (text measuring broken)

Update attachment

Implement ModMoveUI for moving modules
Fixed ui library interpreting every mouse click as left click

Refactored mods package structure
Improved settings delegation methods
Making mods is so easy now!

Update attachment

Did final touches to config manager
Created helper delegate for setting types
Added toast manager

Update attachment

Add Texture bindings and Sampler bindings to gl state utility.
This fixes the graphical issue I mentioned earlier

Update attachment

Debugged the cause of this graphical issue(attachment)
Cause is skia's image rendering(or svg rendering)
Built a config UI (manage your configs and load/create/delete them)

Update attachment

Created a very basic Mods UI and created a base for modules, hud modules, and created FPSMod

Update attachment

Added support for a UI library(don't wanna name it yet), Fixed Skia text rendering

Update attachment

Got google's Skia renderer working inside of minecraft with no issues(THANKS GEMINI!!)

Update attachment

hello world screen is working

Update attachment