#Strontium - Render optimization mod (WIP thread)

1 messages · Page 1 of 1 (latest)

sinful flame
#

Hello I am too lazy to make a real thread right now and I also dont want to deal with creating a real github repo until docs are ready. Anyways download my very safe files!

This is Strontium, my optimization mod. In short it can give you some pretty insane (2-3x) performance uplifts on meagre hardware. It does this through two things: Batched rendering (basically converting a TON of draw() calls into just one big one) and shader swaps (reducing the amount of time shaders are swapped during rendering). There is a lot more too.

Some of the new stuff:

  • Render intents: To batch we need to take away your ability to direct draw - sorry, but they're too dangerous for you to handle. Instead you'll be using "render intents" (well, abstracted a little bit but who cares). These are relatively lightweight pieces of data that describe what should be drawn. Like, "a sprite on this layer with these effects in this order". The backing renderer collects these intents, sorts them into "lanes": batch (extremely fast, minimal draw calls), overlay (unbatched, meant for complex multi-pass effects), and immediate (love:draw fallback mode). This binning makes it so the renderer can be smart about how intents are drawn.

  • Pipelines: Strontium needs to know how cards are to be rendered. The "Pipeline" is a series of filter stages that run every frame, with each having specific tasks. For example, the vanilla pipeline has stages like "Cull" (remove cards that dont need to be rendered), "body" (emit render intents for card faces), "sticker" (emit render intents for stickers), and "CardUI" (card-attached buttons, other UI interactables). Stages iterate through the provided cards, checks their metadata, and then outputs a cooresponding render intent for that card. For example, a stage may check if a card is Holographic and, if so, it will emit a render intent for a sprite with those effects. You can add your own custom stages if you want to draw extra stuff (or otherwise add custom logic to the pipeline). Check out src\strontium\renderer\base\stages.lua for more examples.

  • Ubershaders: Batching requires a single atlas (technically not) and a single shader. Without this you cannot batch, hard stop. Strontium codegens a "Ubershader", which is a shader that contains a bunch of smaller frag shader "modules" derived from registered effects. We pass information to the Ubershader via a vertex texture. See src\strontium\renderer\base\effects.lua for vanilla examples.

  • Occlusion culling: Love2d and Balatro user a "painter" rendering strategy to handle z-depth (sprite overlap). Batched renderers fundamentally cannot do this since they render everything on a layer at once, so I've had to implement two things to mitigate this - a custom occlusion shader that simulates (imperfectly unfortunately enough, still working on it) z-layer overlaps, and a much more flexible layer system.

Modding API is not done yet, gotta solve some remaining problems regarding texture registration. Then documentation, then a proper release that people can start developing for. In the meantime just have fun with it in vanilla.

F8 opens the Strontium menu. F5 opens the profiler. There are a handful of dials that you can play with, some will do things, some probably will not.

I am running out of typing space. This mod is cool, I've put a lot of time into it. Test it with a fuckton of jokers and let me know how broken it is.

toxic halo
#

fire!

sinful flame
#

thanks! hope it works ok

#

¯_(ツ)_/¯

gentle marlin
#

literally snake oil

pliant python
#

This is awesome

sinful flame
#

I hope so!

barren night
#

lovely

sinful flame
#

Oh yeah

  • Cards dont render in the collection
  • Order map depth testing shader can break on the right-most card in hand when you have more than 1k jokers, might be effects related idk
  • Hologram likes to peek his head out and stare at you
  • Selecting one of your jokers renders it behind other jokes, but renders the sell button on top
  • UI buttons arent properly occluded behind cards
  • The dissolve shader (like, the dissolving part of it) doesnt render correctly. It is this way because I forgot what it looked like and then I forgot to properly port it.
  • Edition shaders may break when overlaid over cards that already have shaders. Like an alpha issue
  • If you add more than 1k jokers at a time you will wait a year for the equeue to drain. After it drains your performance will return to normal
  • Card animations are a bit zesty (very bouncy)
  • Card face culling is a feature but it has zero impact on performance, will likely remove
  • Perf mode doesnt do anything because shadows arent being rendered
  • Shadows arent being rendered
  • Idk if I like the name Strontium. Sounds like a medicine for old people.
  • Cards dont shimmy around when you hover over them with your mouse. Strangely enough, hologram's face will.
#

There's some memory leak that is adding a shit ton of GC pressure that I havent tracked down. Better than how it was earlier today, but still annoying. If you get GC pauses that's why.

#

I need to figure out a solution to occluding these cards. They're effectively hidden so we can completely skip their rendering phases, but we need some kind of thing as a stand-in to make it seem like they're still there

#

And it needs to sample from effects

#

You can also toggle the shader on and off in the f8 menu if you want to compare perf

#

"Strontium Renderer"

#

the batched renderer was my prototype and I left it in as something to compare again

barren night
#

dont forget to sleep

sinful flame
#

ooooh yeah

tardy mural
# sinful flame

atp i think its easier to kinda just, not render them completely until they're important
because then its just kind of a blur

#

if that makes sense
kinda like how 3d models would use less polygons if something is farther away

sinful flame
#

maybe two if we skip the center as well and draw just the card back.

#

well no that doesn't save us anything

#

because lol, we do it all at once

#

so nvm no point in occlusioning that because we would only save gpu compute but we're heavily cou limited so

#

I'm a little braindead so pardon me

#

also I haven't tested it out on mob*** and wow it's amazing

#

makes me actually want to play mob*** balatro

sonic wolf
#

peaky

earnest kraken
#

what the hell is mob***

#

also is this a performance improver

sonic wolf
#

yes

sinful flame
#

Strontium - Render optimization mod (WIP thread)

merry lark
#

Idk if I like the name Strontium. Sounds like a medicine for old people.
you could said this is a medicine for old computers

pliant python
#

Isn't strontium just straight up an element

#

Yeah it's an alkaline earth metal

merry lark
#

no I got no gifed

sinful flame
sinful flame
#

frag shader editor

#

very poc rn

#

want to make it easy to edit registered stuff in game and see live feedback

crimson iron
#

that editor is in-game?

sinful flame
#

yeah

tardy mural
#

will it have the common QoL things, like autocomplete and error squiggles?

sinful flame
#

it's using the base love textinput. doubt I can extent is in a performant way. I would need a custom component and it would be a lot of work-

#

working on it, just trying not to get lost in the sauce rn

sonic wolf
#

you can do it ethan

sinful flame
#

I know I can do it, but the question is whether or not I want to do the additional architectural work on top of everything else rn 😭

#

I just want the modding API to work

sonic wolf
#

-# also add like a feature to make every values decimals in the shader code so that it doesnt crash on mo****

#

-# for some reason mo**** doesnt like it when the shader values are not decimals

#

-# (1 instead of 1. / 1.0)

sinful flame
#

😭

#

perchance

sinful flame
sonic wolf
#

you know what

#

valid

sinful flame
#

i will try again after i play 8 hours of project zomboid

earnest kraken
#

this mod dropped my fram instead of improving by 100000%

sinful flame
#

with mods?

sinful flame
#

if so then mods aren't supported yet, they'll likely render as slow if not slower rn

worn gale
#

strontium for some reason causes some things to appear behind the ui instead of infront of them, making them seem like they're invisible and making then uninterractable

sinful flame
#

the halo is interesting though, I'll need to look into that. the passthrough renderer might not like mod layers

sinful flame
worn gale
#

suprisingly noticably positive, managed to get hotpot with 40 other mods to run from ~30 fps to ~70 fps

sinful flame
#

holy shit

#

althought that might be because of broken effects

#

if not then that's very promising. should get even better once mods integrate the new api

sinful flame
worn gale
#

where do i see them?

sinful flame
#

F8, will be at the top of the panel

#

And you can toggle the strontium renderer in there

worn gale
sinful flame
#

Yeah, pretty huge reduction in draw calls and shader swaps

#

I think that's a real speedup. Broken effects wouldnt yield much because the base game is CPU limited, not GPU. Lessening GPU load wouldnt make it run faster.

sinful flame
# worn gale i think this might be it?

The "batched renderer" is my prototype. It's pretty hardcoded for vanilla and is at times faster than the stronty one. Stronty was the second iteration of that idea but meant to be a lot more generic.

#

So it can be a little bit slower

worn gale
#

i see

sinful flame
#

Neat, well thanks. Modded shaders should be working but it seems like they arent getting pushed onto the compat render phase

#

will investigate

worn gale
#

alright, let me know when there's an update to strontium

sinful flame
#

will do, thanks for testing it out 🥹

#

and im very happy it helped with perf

sinful flame
#

😭

#

I can't figure out a way to make it not run like dogshit and also not be a terrible hack and also be a component for the UI

#

but my brain is like 40% operable rn so I'll figure something out

toxic halo
sinful flame
#

I had a very similar situation with the rendering of the hologram top layer. Like, almost identical, so I presume that it's the same bug. I'll need to dig around and see what my fix for that was.

toxic halo
#

in valk it is manually disabled for the halo layer because otherwise it will linger wherever you drag the card until you touch it again

pliant python
#

Metherul please take a breakkkkk

#

Play project zomboid

#

21 hour

sinful flame
#

dis is mor fun than pz

#

but fine

worn gale
#

oh yeah one small request, could the profiler be rebound from f5 to f6? I use f5 often a lot as a hotkey to restart the game and with the mod installed i am not able to do that anymore

sonic wolf
#

mr @sinful flame does this work on the forbidden device

robust kettle
#

|| it does for me, seems to be a fairly decent improvement aswell ||

#

a very lovely mod

sinful flame
sinful flame
sinful flame
#

working on images for the github

sinful flame
worn gale
#

thank u cro

earnest kraken
# sinful flame with mods?

i literally just had lost edition and aikoshin and have like 100 jokers and it noticeably frame dropped from like atleast 20-30fps to 1fps after installation

sinful flame
#

Had you just added jokers? The event queue slows the game down hard.

earnest kraken
#

it was existing jokers

sinful flame
#

Strange strange. What's your hardware and modlist?

#

If you can repro toggle the f5 profiler, enable recording, let the game lag, and then disable it and share the results from the file it writes to your save dir

earnest kraken
#

android on like 12gb of ram and only the mod list that is enabled right now

sinful flame
#

Ah, no profiler then. Interesting.

#

This is lovely mob*** maker?

#

or is this balatro mob*** maker

earnest kraken
#

the one with the website i guess

#

it works best that way

earnest kraken
sinful flame
#

yeah yeah, that one is really sweet

#

hmm

earnest kraken
#

i can show a recording of the effects i think

sinful flame
#

oh yeah go ahead

#

if you can attach a keyboard then you can probably open the profiler

#

otherwise no worries

earnest kraken
#

don't have a keyboard nor a pc

#

i could just uhhhhh send you the lovely file

sinful flame
#

@merry lark is JIT disabled on LMM?

sinful flame
earnest kraken
#

ok

sinful flame
#

Idk if you can actually scroll down the window to open the debug menu but at the very least you can send a screenshot of the stats

#

the draw call numbers would be great to have

earnest kraken
#

why does it look like a mod menu 😭😭

#

also it seems i get like 2 more fps without renderer at all

sinful flame
#

hmm

#

the batched renderer should be just a little bit faster than the stront one

#

what tablet do you have?

#

sorry, *touch screen laptop

earnest kraken
#

vivo touch screen

sinful flame
#

weird

#

@sonic wolf did you ever end up trying it out with your touchscreen laptop with a broken keyboard?

earnest kraken
sinful flame
earnest kraken
#

rip

sinful flame
#

because that is largely the big difference between the batched and strontium renderer. same underlying principles, but stront causes a lot more gc churn

#

I can maybe fix this by being smarter about mem alloc

#

I think overall youre unlikely to see any positive perf changes so you should probably uninstall it. thanks for trying it out though 😭

earnest kraken
#

i guess we touch screen laptop users just have suffer the lag 24/7😞(actually it works better than some pcs)

sinful flame
#

I'll see if I can reproduce it on my touch screen laptop

#

well it works really well on my touch screen laptop without mods 😭

#

I'll @ you if I can reproduce your issue, thanks again haha

earnest kraken
#

yeah i was trying this out because i know most touch screen laptop users probably doesn't have high specs or good devices resulting in alot of unenjoyable lag and crash so i was testing this out lol

#

im probably fine without it

#

anyways good luck on your project

#

you are doing gods work

#

i guess

sinful flame
#

hang on im trying to hack in a way for you to scroll down that window with the scroll bar

#

if I can get that working then you can open the profile and we can see what's taking so much timer

earnest kraken
#

ok

sinful flame
#

Scroll down and hit the perf breakdown toggle

ashen ice
#

Noice

merry lark
earnest kraken
#

ok

merry lark
#

I believe a lot of touch screen laptops habe poor CPUs and high resolution screens which probably hurt them a lot

earnest kraken
earnest kraken
merry lark
#

I mean the GHz is like half my laptops idk how bad or not that is

earnest kraken
#

ok

sinful flame
earnest kraken
#

or

sinful flame
#

stonium is rendering at 120fps about on your phone

#

yes

earnest kraken
#

hmmm

earnest kraken
sinful flame
#

or gc

#

it's one of those options

merry lark
#

Oh yeah @sinful flame if you need a text input the one from DebugPlus is pretty modular and I can relicense it for you

sinful flame
tardy mural
#

there's actual financial compensation for balatro modding??

sinful flame
#

I've made millions off of lovely licensing

#

but no, at least not for me :P

sinful flame
#

welp, the mods I've tested seem to do pretty great with strontium

#

couple of broken effects but nothing severe

#

and perf is generally much better

#

so neat

sinful flame
#

no rush no rush

#

I hate writing readmes

sinful flame
#

I bet it's the same problem

sonic wolf
sinful flame
#

I'm so confused 😭

sonic wolf
sinful flame
# sonic wolf

yeah so the the issue is likely something between the base game and the renderer. the renderer it's is completing the scene in like 1ms so it's defo not that

#

for reference 60fps is like 16ms per frame

#

the profiler doesnt worl because of the ro fs

sinful flame
#

fuck

#

but it's not happening on my end which is confusing

#

and it goes away when you enable the batched renderer?

sinful flame
#

yeah. not getting the same perf issues

#

what brand of touchscreen laptop do you own?

sonic wolf
sinful flame
#

hmm ok

#

thanks

#

I investigate

sonic wolf
#

goodluuuuuckk

sinful flame
#

and see if that helps

#

and then set the order map scale to like 0.25

sonic wolf
earnest kraken
#

problem

#

funny

barren night
#

love.graphics.present takes longer time with strontium on m****e for some reason

earnest kraken
# barren night

problem funny hehe so its not an touch screen laptop only problem

#

seems like this is an issue for alot of people

sinful flame
#

the occlusion map is somewhat heavy but nxkoo confirmed that wasnt the case. best guess is the ubershader or an opengl driver specific rendering bottleneck

#

what touchscreen laptop do you have?

barren night
#

oppo reno 7

#

OpenGL ES; OpenGL ES 3.2 V@0530.0 (GIT@2e65add366, I9ffa234af9, 1666802991) (Date:10/26/22); Qualcomm; Adreno (TM) 619

sinful flame
#

my best guess right now is that building and submitting the ubershader text params is causing the GPU driver to stall or freak out

#

I can't replicate on my Pixel 6 laptop, which is about the same age as your laptops, so I think it's an OpenGL driver problem

#

I have an idea on a fix but it'll take a little bit to implement. I'll basically be restructuring the param table to be a lookup rather than a cohesive set of args. means we can compress the amount of data down.

#

if that doesnt work than I can quantize the param values themselves. I've heard of OpenGL ES struggling with some floating point types so that might also be the problem.

sinful flame
#

that's the more efficient param table

#

xtra you can try that out too

earnest kraken
#

is there an actual way to just make shit never load until it actually has to load

sinful flame
#

yeah, there are lots of ways to optimise that path, but it's a momentary solution because performance will degrade down hard once you have things on screen

earnest kraken
#

still pretty cooked

sinful flame
#

Dang

#

maybe not a param issue then

#

could be love.sexpixel or whatever. this might also be a fundamental bug with the ubershader codegen

#

I'll keep trying things out

sinful flame
# earnest kraken

from the stats you can see that it's deduplicating the params from 175 to 54, so it's definitely doing something at least.

earnest kraken
#

e

sinful flame
#

oh my god

#

setpixel

sonic wolf
#

😭😭😭😭

sinful flame
#

ubershader might be broken on touchscreen laptops because im basically doing a o(n*m) iteration for every pixel

#

which is like, slow

barren night
#

hmm

#

it should count as update/drawtime in perfstat

sinful flame
#

This has that param optimization as well as a toggle to turn the ubershader on and off. toggle that and see if it helps perf

sinful flame
#

@barren night if you get a chance you should try this one out. it'll help me figure out if the slowdown is because of the shader

barren night
#

sure, wait

#

gimme.... 11 hours

#

turning off ubershader seemed to fixed it

sinful flame
#

... fuck me

#

that's ass

#

ok thanks

sinful flame
#

ah wait im stupid

#

ubershader needs to read params per vertex, not per pixel

#

no wonder it's fucking up on mobile

#

desktop and mobile gpus are completely different architecturally and I think that desktop could handle the latency shelf by agressively caching, which doesnt work on mobile

#

fixing it

sinful flame
old timber
#

luajit2

fleet mauve
#

oh yeah Idk if this is an issue thats been found or not but using Strontium Renderer makes it so that the title screen cards do not disappear behind menus like Galdur's run selection menu

#

makes it hard to sometimes select things

sinful flame
#

yeah, known issue that I have yet to really tackle. it's a rendering order bug that's caused by strontium not being an all-encompassing replacement of the backing gfx code, just of cards and card-like things

#

I might be missing something with how I'm rendering card z levels though

#

idk I'll check it out after I figure out the mob*** performance slowdown

#

I wish I was a beaaver rn

trim cloak
#

batchiing it

sinful flame
#

made no progress on the touch screen laptops issue

#

just seems like the Snapdragon and Helios opengl drivers are unhappy with the gfx pipeline

#

came up with a solution to use a vertex shader to get sprite params (instead of per pixel) but it ended up making my performance worse on desktop so idk

#

might be a weird situation where vertex packing works better on mobile, frag sampling works better on desltop

sinful flame
#

jit

barren night
#

jit

#

need something to test?

barren night
#

works just fine with ubershader turned off

sinful flame
#

dang

#

back to the drawing board

earnest kraken
old timber
#

luajit2?

sinful flame
#

luajit2

#

and we're sure as hell not going to get love12 any time soon so

#

I might go ballistic and just start ffi calling opengl directly for this

#

but context management, urgh

old timber
#

love12 gonna have vulkan tho

sinful flame
#

and opengl still

#

vulkan would be neat though

#

but you could prob get just as much of a perf boost from an opengl to vulkan translation layer

#

I guess I could backport the objects API and then have strontium include the custom love build, but that would be a nightmare on touchscreen laptops

old timber
#

ok but it might work on a receipt printer

merry lark
old timber
#

if only the lmm dev was here

merry lark
sinful flame
#

I'm playing around with just removing the ubershader, if that doesnt work then I'll consider love12. I dont know if UBOs would solve the mobile issue as it might just cause memory churn.

#

Idk

#

A somewhat limited fix is to do vertex packing and pass information through that way. Much quicker but you have a limited amount of information that can be passed through

#

That's likely one of the big reasons why the protoype renderer is actually faster

merry lark
#

I have some time wondering if I would be more useful reviwing the lovely pr or trying this on the 2011 mac

sinful flame
#

why not both?

#

:P

old timber
#

its ok i can try this on the sega dreamcast

merry lark
sinful flame
#

Ah idk then, do whatever would be more fun

merry lark
#

stupid ass gif rules

sinful flame
#

i

old timber
#

wii actually has a love2d port doohickey

sinful flame
#

attempting to port from SpriteBatch to gpu instancing

#

performance is looking ok so far

#

instancing is preferable though because we can attach data directly to the mesh

#

(rather than passing params as a texture)

sinful flame
#

@umbral coral try this when you get a chance, espec with too many jokes

umbral coral
#

let me give it a whirl

sinful flame
#

sick. while that cooks I gotta deal with this gc churn cause it's not good

umbral coral
#

second column is meant to be empty here

#

batched renderer also doesnt work

#

looks about the same

sinful flame
#

it's because the cards are being rendered underneath the UI

#

which is a nasty bug that I havent solved yet

#

you see the same thing happening in the collections menu too

#

I was hoping that tmj wouldnt be effected by it 😭

umbral coral
#

naww tmj displays over stuff aswell

sinful flame
#

hm

#

how are you drawing cards?

#

Card:draw or

#

toggle occlusion debug and see if the cards show up in red

umbral coral
sinful flame
#

alright yeah

umbral coral
#

theyre just drawn normally iirc

#

i suppose a weird kind of normally but

#

still

sinful flame
#

if it's not the UI layer bug then those card renders will probably require a layer to be defined

#

something to test out once I have the api working

#

but my gut feeling is that this is the same bug as the collections menu

earnest kraken
#

meow

sinful flame
#

basically I replaced the sprite batching with gpu instancing which is basically the same except

  • I can define the draw data in ffi instead of tables, which is much faster
  • gives us the opportunity to pass data as mesh attributes, which may or may not be faster. idk
  • made it so the shader grabs params each vertex instead of each pixel
#

I've been exploring optimisations and with the current arch idk if there really are any remaining ones. none of them are a total net positive at least, and they're all quite complex.

I suppose I can more aggressively cache values but that really quickly fucks code quality so idk.

another optimization is probably going to be compiling luajit against mimalloc. the game and the mod both make a shitton of tiny allocs which are pretty slow on the native implementation

#

I've been doing my best to reduce GC pressure with table pooling and ctypes, and have made some good progress, but there is still a really nasty allocation loop somewhere. maybe in the texture aram packer.

GC churn is much better though with the ffi mesh data fix, which is good, but it's still noticeable when you have 2k jokers on screen.

#

But the scaling is quite good. I think we have a sub-linear or linear reduction in frame rate as jokers increase. the base game is quadratic (I'm guessing).

#

idk. lots of progress today but no real optimisations other than 3-4 fps under load. frame instability remains to be unsolved and touchscreen laptop support is untested, but I think the slowdown will remain until I implement the mesh attribute packing.

#

blah blah blah

earnest kraken
#

e

sinful flame
#

feeling a bit disconcerted with the project

#

idk why

earnest kraken
#

there's a reason no one else doing this lol

#

TRYING to optimise modded balatro is like trying to use a water tank to catch a nuke

sinful flame
#

Tbf I barely know what I'm doing here

#

this is a "skin of my teeth" kinda project

sinful flame
#

and I'm sure frost or Wilson or someone would've done this eventually

earnest kraken
#

the frost utils kinda suck ngl

#

didn't even know how to set it up and didn't actually do anything

sinful flame
#

frost utils are great

#

that's like the sister project to this one

earnest kraken
#

eh

sinful flame
#

good god this game needs so much optimization work

#

the UI is next I swear

crimson iron
old timber
sinful flame
#

sbubby

sinful flame
#

im overcomplicating things

#

ubershader is getting thrown out

#

not necessary

#

slower on mob***

#

and param packing is really slow anyways

#

but idk testing things out

#

nvm

#

back to the drawing board

#

I forgot that uniforms are dumb

sinful flame
#

pretty obvious why it's so slow lol

pliant python
#

Yeah I basically figured as much, it's iterating through each node in array order and doing an individual call for all of them with no occlusion either

#

It also tends to reload shaders for basically every card or node

sinful flame
#

damn painter rendering

#

yep, fixing that yielded a nice perf improvement

#

it was like 5k reloads haha

pliant python
#

Err, I think nodes in general might almost always just use the default love2d shader?

#

So it doesn't reload very often ,but for example some of my custom stuff involves having to load shaders one by one

sinful flame
#

ah, I was thinking of cards

#

hmm yeah

pliant python
#

No yeah cards it reloads every time

sinful flame
#

unfortunately

#

there's a node shader, interesting

#

I guess that makes sense

pliant python
#

Oh!!

sinful flame
#

UI is going to be so hard to approximate

#

if I can get the z buffer working then that's likely our best option

#

biggest problem with the z buffer is transparency though

barren night
#

i dont even know where to start with ui draw optimization

sinful flame
#

it's multifaceted

#

iirc the UI mostly renders straight vertices so batching is complicated

#

like just primitive shapes

#

not sure about fonts

#

I think the most to be gained is in optimizing UI traversal

barren night
#

the ui usage for me is abt 0.3ms of 0.8ms so maybe we might get nice perf boost if we managed to optimize this one

#

though i havent benched for different ui types

sinful flame
#

well actually thinking about it those draw calls are definitely hugely impacting perf

#

yeah like I said there are multiple ways to go at this

#

good to benchmark

#

either way for rendering you would create a mesh, setup the UI, and then render that instanced

barren night
#

found it

sinful flame
barren night
#

😭

merry lark
barren night
#

dynatext batching 🤔

#

its possible but i dont think the perf impact would be much no kinda

#

0.16ms over 1.8ms

barren night
#

my next goal is probably reduce CardArea.align_cards call or make a parallel for it (please no)

#

havent touched draw side at all, just mostly update

old timber
old timber
pliant python
#

Like yeah dynatext letter by letter is INSANE. The thing I I figured this is basically how it worked by looking through the cod earlier, it's just a lot to see it in action

merry lark
#

I mean how else do you do it?

#

each letter moves independantly

pine glade
#

Is there a github for this project? Or has this not been released yet

#

If there is, I would recommend putting the link in the pinned comments because finding it is hell on mobile

tropic torrent
#

there isn't

earnest kraken
#

just ask the dev for jt

#

or go to

#

links

pine glade
# earnest kraken no it isn't???

Going to links gives me a github bug report and asking the dev for the mod is definitely inconvenient for both parties involved. Pinned messages were literally made to stop people from asking the same thing over and over again. Don't act like I'm weird or lazy for asking for the mod to be linked in the pinned comments if the mod has a release lol

earnest kraken
#

its not like there's 100 message

#

and most of them isn't even completely

#

complete

#

this "mod" isn't even complete

pine glade
#

Please for the love of god stop getting defensive on the authors behalf for something as minor as asking for the link to the mod to be pinned IF it is released. IF. As in, the whole thing is conditional ON IF IT IS READY.

#

No more clogging the thread now, as this isn't relevent to the mod anymore

earnest kraken
#

please don't be lazy

#

❤️

sinful flame
sinful flame
earnest kraken
#

ok

sinful flame
#

anyways I have not worked on this last couple of days. don't expect mobile to be fully on par unless I can hack in ssbo support via direct opengl calls

#

but then ssbo support on mobile is sketch so idk

earnest kraken
#

you should just hack balatro :3 and recode the game

sinful flame
#

I'll probably just take a step back and clean up what I have

earnest kraken
#

i think the lag

#

isn't only from the mod

#

i have seem a few complaints about vanilla mobile balatro lagging like crazy

sinful flame
#

defo not related, the rendering slowdown with the mod is a fundamental bottleneck with mobile GPU architecture

#

Mostly optimizations and experiments from the past couple days of work. I moved the instancing mesh setup into native code so that hot path got a little bit faster, and I've been experimenting with replacing other table-heavy loops with similar logic.

#

Yielded a little bit of a perf boost I think

#

also some code organization and cleanup

#

I think im going to start experimenting with the love2d z buffer. I'll need to figure out a way to re-enable alpha effects with a multidraw thing but it should be a lot more spacially correct than the current occlusion shader

sonic wolf
#

thanks ethan

earnest kraken
#

uh

old timber
#

yeah!

sinful flame
#

yeah

old timber
#

tenor gif

tight sierra
#

AWAITING THE STRONT

toxic halo
#

uuuuuauaahahhhhhhh im stronting it

merry lark
#

Who up stonting their balatro

night stone
#

oh wait it's renderdoc?