#HaxeUI Ceramic

1 messages · Page 3 of 1

edgy mason
#

you are probably gonna want to add the shader to a ceramic.Mesh

burnt dune
#

can you remember what we use a shader on?

#

ah, a mesh?

#

guide says filter but that seems a bit heavy

#

maybe it's just 1 example

edgy mason
#
var rect = new Mesh();
rect.shader = assets.shader(Shaders.SDF_RECT);
rect.anchor(0.5, 0.5);
rect.pos(width / 2, height / 2);
this.add(rect);
#

something like this, but you would also need to create all of the vertices and pass parameters into the vert shader

#

aka porting everything rectangle related from SDFPainter to Ceramic

burnt dune
#

a bunch of stuff i have no clue about, will check the kha stuff

edgy mason
#

sdfpainter also has stuff for sdf circles and what not, so most can be ignored

burnt dune
#

I thought it would "draw" the rect

#

but i think it's returning numbers instead

edgy mason
#

since it is a shader, the gpu is doing this async all at once

#

the numbers are probably RGBA values

burnt dune
edgy mason
#

it will draw the rounded rectangle

burnt dune
#

okay cool

edgy mason
burnt dune
#

i was just checking this one out

#

oh lol, the comment links to yours

edgy mason
#

iq is basically shader jesus

#

but i think some of the complexity in the one sdfpainter uses is because it needs to compensate for different aspect ratios

burnt dune
#

can we just use the one from shader toy?

edgy mason
#

like if your rounded rect is longer in one axis, the corners will get stretched

#

this is what box/bx is for

burnt dune
#

is there an api for glsl shaders?

edgy mason
#

to interact with them or within them?

burnt dune
#

neither

#

documentation

#

i don't even know what the expected colour format is

edgy mason
#

vec4(float red, float green, float blue, float alpha)

burnt dune
#

like, will vec(0, 0, 0, 1) work

#

does it want 0-1

edgy mason
#

yeah, that would be black

burnt dune
#

0-255

edgy mason
#

0-1, correct

burnt dune
#

nice, but is there an api i can look at for this stuff?

#

i would have way too many questions otherwise

edgy mason
#

probably official khronos docs

#

this specifically seems good

burnt dune
#

i was on that page 😄

#

but i'm guessing an "api" doesn't really exist for something like this

#

"just" documentation

edgy mason
#

i guess

burnt dune
#

cool

#

gonna see if i can get a triangle rendered 😈

edgy mason
#

you can probably use ceramic's triangle class and then set the color within a fragment shader

burnt dune
#

well seems like we can't just copy paste the code directly

edgy mason
#

yup

burnt dune
#

do you happen to know what the difference between what's on that opengl site and ceramic shaders?

#

is it a case of versions or a completely different shader language?

edgy mason
#

ceramic uses an older version of glsl

#

i think

#

maybe so it can work on the web?

burnt dune
#

okay so i need to be looking for "gles" guides?

edgy mason
#

i think

#

instead of in/out it uses varying and uniform i think

unborn dragon
#

Here's a frag shader I use, if syntax is the question

burnt dune
#
        var rect = new Visual();
        var shader = assets.shader(Shaders.SDF_RECT).clone();
        shader.setVec4('rectColor', 0, 0, 0, 1);
        shader.setVec3('borderColor', 0, 0, 0);
        
        rect.shader = shader;
        
        rect.size(200, 200);
        rect.anchor(0.5, 0.5);
        rect.pos(width / 2, height / 2);
        this.add(rect);
unborn dragon
#

Like debug the effect or attach it to a quad?

burnt dune
#

I've got this atm but it doesn't seem to render anything

unborn dragon
#

What's your frag look like?

edgy mason
#

probably should be a quad not a visual

burnt dune
unborn dragon
#

Yea that's the first thing

burnt dune
#

but in my searches, jeremy mentioned visuals "are fine" although i understand why a quad/mesh is more appropriate

#

i just wanted to get away from any potential earcut/triangulation issues getting in the way of my ignorance

unborn dragon
#

Tbh I'd start with setting every pixel to your input color and ignoring the logic for a bit

#

See if that even works

burnt dune
#

Am i not doing that? 😂

unborn dragon
#

You're calling functions and stuff, I mean literally gl_FragColor = myInputColor

#

To see if the issue is in your logic or in your setup

edgy mason
#

it is def still partially your setup, you need to pass in box, corner, and what not too

burnt dune
edgy mason
#

but do what msg said first

burnt dune
#

OH, am i dealing with the frag file?!

#

I've been reading the properties in the vert file

unborn dragon
#

Yeah like messing with a vert when you don't even know if the frag works isn't gonna work out

burnt dune
#

i think you guys are over estimating my experience with this stuff

#

lol

unborn dragon
#

Lol

burnt dune
#

this is literally day 0 shader work for me

unborn dragon
#

Make a color appear using the default vert and a slightly modified default frag

#

Then do the hard stuff

#

I made a whole game to help me understand verts lol

burnt dune
#

i was going to go that approach but I'm not sure what resources are applicable to ceramic shaders

edgy mason
#

i was just using the shaders built in to ceramic for reference

burnt dune
#

the learn opengl site doesn't seem to be relevant

edgy mason
#

some of them link to the shaders they were ported from, so you can kinda see the differences

unborn dragon
#

I'm getting close to finishing this project so I'll be able to contribute soon enough if needed

burnt dune
#
        var rect = new Quad();
        var shader = assets.shader(Shaders.SDF_RECT).clone();
        shader.setVec4('rCol', 0, 0, 0, 1);
        shader.setVec3('bCol', 0, 0, 0);
        shader.setVec4('corner', 0, 0, 0, 0);
        shader.setVec2('box', 100, 100);
        shader.setFloat('thickness', 1);
        shader.setFloat('smoothstep', 1);
#

here's the revised setup

#

i'm assuming the "box" attr represents width/height

#

we still end up with nothing getting rendered but we have no errors

edgy mason
#

uh box confuses me but i think it is for maintaining aspect ratio

#
var u = w / Math.max(w, h);
var v = h / Math.max(w, h);
burnt dune
edgy mason
#

i think visual dimension

#

idk wtf this is lmao

burnt dune
#

i'll just pass 1, 1 and see what happens lol

#

nothing with all of the above

edgy mason
#

is your background also black?

burnt dune
#

pure white

edgy mason
#

ah k

#

i gtg for a bit, but when I come back I can try making a simple shader sample as a basis

burnt dune
#

oh, i'm missing attributes

#

vertexpos and vertextcoord

#

attribute vec3 vertexPosition;
attribute vec2 vertexTCoord;

#

how do we know if something is "mandatory"

edgy mason
#

i think those get passed in for us by ceramic

unborn dragon
#

Oh definitely do not mess with resolution and real w/h yet

burnt dune
#

tried setting them anyway and still have nothing anyways

unborn dragon
#

That's worse than getting a color to appear and worse than a basic vert

burnt dune
#

I just want to see if i can render "something"

unborn dragon
#

That masks a section of a spritesheet using a different section of the sheet

#

The most basic thing you can do is gl_FragColor = vec4(1, 0, 0, 1);

#

From there, the quad or whatever you're shading needs to have a width and height defined. Those default to 0

ember plaza
#

I'm late to the party, but I don't think using SDF shader is a good idea. You are going to totally break batching and destroy performances

burnt dune
#

lol

edgy mason
#

baha

unborn dragon
#

It's for UI so it's not the worst thing

#

But it's also not the best thing lol

edgy mason
#

i think you might have told me before and i forgot

#

it is just the way I am familiar with because of haxeui-kha

ember plaza
#

I think a mesh-based implementation is the cleanest way to go

#

because that will get batched with the rest

unborn dragon
#

I agree with that

#

Uh but do crop and 9 slice first before losing your sanity with meshes and how those would integrate with everything @burnt dune

ember plaza
#

If the number of vertices becomes a problem, you could add strategies to rasterize rounded rects into nineslices, but I doubt that would be actually necessary

#

(and not even sure that's useful)

burnt dune
#

because we need them for gradients

unborn dragon
#

There's so much of haxeui I do not use lol

ember plaza
#

You can create a gradient rounded mesh ha ha

burnt dune
#

yeah, i think it's also "expected"

#

solid only rounded corners seems a bit odd

#

okay, so abandon shader land - then?

ember plaza
#

The problem with shaders here is that using different shaders = each time you draw with a different shader you add 1 draw call

edgy mason
ember plaza
#

You could even compute UV array so that it would work if you assign a texture

unborn dragon
burnt dune
unborn dragon
#

I was thinking UV array yeah

burnt dune
#

i'm 31 and want to finish stuff 😂

unborn dragon
#

If I can get the FnF devs into shaders I can get you into them too

#

But yeah not relelvant here

burnt dune
#

i see their utility, they seem great

#

but if i have to learn about it, there has to be a pay off for it

#

i don't really want to learn things for no follow up application

unborn dragon
#

Earlier it seemed like the concern was how to make all of these things work using ceramic's impls with haxeui's constraints/impl/etc

#

I was able to get things individually working but together idk

ember plaza
#

https://notes.underscorediscovery.com/shaders-a-primer/ good resource to get an idea about shaders

burnt dune
#

that mostly talks about "what they can do"

unborn dragon
#

Flixel gets away with it by drawing shapes onto a bitmap, so it doesn't need to retain classes for 9slice and round rects

burnt dune
unborn dragon
burnt dune
#

I have a rounded rect implementation that makes use of Arc's and quad's

#

issue is, the inside content doesn't conform to the arc x)

#

lets see if i can figure out a mesh rounded rect with a border

ember plaza
#

You'd be better of generating the full mesh from scratch, the math is not that complicated

#

You can actually take a look at how it is done in the Arc class

burnt dune
#

it's only the border that's required, i can use the out of the box api for the backgrounds

#

but i do think the one of in the ceramic api doesn't work with gradients

burnt dune
#

👀

edgy mason
burnt dune
#

lol, now i can't use ceramic the "normal way"

edgy mason
#

Huh

burnt dune
#

it keeps trying to "install ceramic"

#

even though it exists

edgy mason
#

Haxeu

burnt dune
#

yeh, i mistakingly named it that

#

lol

#

haxeu-ceramic vs haxeu_ceramic

edgy mason
#

Ian is gonna have to rename it now

burnt dune
#

i'll push it to haxeui foundation as that don't you worry

#

😄

#

i think i know what's going on here tho dw

#

shit... how do i handle "colors"

#

are rounded borders always a single colour?

edgy mason
#

so you should be good?

burnt dune
#

progress!

#

if i can eliminate these, it probably will work quite well

edgy mason
#

Neeeeat

#

using ceramic.Shape for borders?

burnt dune
#

Mesh

#

I think those errors are all coming from the rounded rect in ceramic

#

the borders are all shaped correctly

#

however the bg isn't in various places

#

thickness is missing but that's because i just forgot to map that

edgy mason
#

Ah

burnt dune
#

no idea how to achieve that though lol

#

and i am defo not gonna try 😄

burnt dune
#

quite a nice test suite 😄

edgy mason
#

so freaking hyped

#

I think with this, Ceramic is def gonna be a top contender for HaxeUI backends

burnt dune
#

I can't seem to get past this :/

#

for now off to bed

#

but pretty cool none the less 😄

ember plaza
ember plaza
#

Or... just ditch holes support for now and come up with a more simple implementation

burnt dune
#

We're getting somewhere

ember plaza
burnt dune
#

Isn't a 'border' a shape with a 'hole'?

#

i wonder if I could just "git pull" in ceramic's directory to pick the update up

ember plaza
ember plaza
burnt dune
#

More progress 😈

#

Trying to draw mesh RoundedBg with vertices colors but colors array is too short. It must have at least 64 elements

#

what 😅

ember plaza
#

Ceramic's border class doesn't use triangulation anyway, I don't want to depend on complex triangulation algos for predictible shapes like this (same should go for roundedrect, which should not depend on that imo)

burnt dune
#

it's basically going to be [for (i in 0...vertices.length) start] (repeat for end)

#

is this "efficient"?

ember plaza
#

I expect it to still be more efficient than using a sdf shader

#

(for the reasons explained yesterday)

burnt dune
#

damn, fair

#

my rounded rect implementation doesn't trigger those errors

burnt dune
#

I can't figure out how to gradientify rounded rects 😄

#

oh shit 😄

edgy mason
#

is the resolution really low or something? It looks quite pixelated.

#

maybe it is just on your side

burnt dune
#

i don't really know how to improve that

#

i thought by increasing the number of segments it would get smoother

#

this is 200 segments and it seems pretty much the same lol

#

but i'll leave that for another time

#

i think i've got gradients mostly there now

#

it isn't perfect but this is pretty cool either way

burnt dune
#

👀

#

somethings going wrong

#

but it's damn cool to see a little bit of rounding on the buttons

#

apparently the buttons demo causes some kind of massive loop?

#

App completely stalls

#

probably related to the massive style recursion issue that comes up on tracy :/

burnt dune
#

will have to investigate that later gotta go work

#

wonder when that broke :/

burnt dune
#

@edgy mason are you free atm?

#

this seems to turn into an infinite loop but I can't figure out where its coming from

edgy mason
#

mm wait until after jam submission is finished

#

then i will

burnt dune
#

no worries

#

i've commit hopped in both ceramic backend and core and gone quite far but it seems to have been there for a while which is odd to me

#

can't find a point it didn't occur

burnt dune
#

issue seems to be related to item renderers

#

some deja vu here

burnt dune
#

so something is causing layout to refresh, which is causing the text to get remeasured which is causing layout to refresh... constantly

#

everything is being emitted by calllater :/

#

so i guess the issue is in componentimpl somewhere

hexed nebula
#

awesome to see how tracy makes an impact on generating insights. Makes every minute spent on it soo worthwhile

burnt dune
#

It's super useful for sure!

#

I wouldn't even know this much 😂

#

none of this whole issue makes sense

#

it's only an issue with item renderers

hexed nebula
#

is it just your backend or something haxeui suffers from in general(and noone noticed)?

burnt dune
#

I haven't even thought to confirm with another composite backend

#

i just default to it's my backend 😅

#

okay, defo my backend

#

heaps is fine

#

i just can't find where things broke :/

hexed nebula
#

then your impl might not correctly set/return its state back to haxeui. You could create a minimal example and then compare a single frame to isolate the stack level it differs and then start debugging that area and compare each other versions

burnt dune
#

okay... i thought it was due to item renderers

#
<vbox width="100%" style="padding:10px;">
    <section-header text="Buttons + Item Renderers" />
</vbox>    
#

this breaks things

#

which is very bizarre to me

#
<?xml version="1.0" encoding="utf-8" ?>
<vbox width="100%" style="padding:10px;">
  <section-header text="Default Buttons" />
    <hbox>
        <hbox>
            <button text="Normal" />
            <button text="Toggle" toggle="true" selected="true" />
            <button text="Repeater" repeater="true" />
            <button text="Disabled" disabled="true" />
        </hbox>    
        <grid columns="2">
            <button text="Left" icon="haxeui-core/styles/default/haxeui_small.png" />
            <button text="Right" icon="haxeui-core/styles/default/haxeui_small.png" iconPosition="right" />
            <button text="Top" icon="haxeui-core/styles/default/haxeui_small.png" iconPosition="top" width="100%" />
            <button text="Bottom" icon="haxeui-core/styles/default/haxeui_small.png" iconPosition="bottom" width="100%" />
        </grid>
        <button text="Disabled"  icon="haxeui-core/styles/default/haxeui_small.png" disabled="true" />
    </hbox>
</vbox>    

because this works fine........

#

and that has a section-header in it

#

the heck is this issue

#

<section-header text="Buttons + Item Renderers" /> <-- crashes
<section-header text="Buttons + Item Renderer" /> <-- fine

hexed nebula
#

text-width interfering with element width?

burnt dune
#

i think that's what's going on

#

We got a render

#

it takes about 10 seconds upon window opening for this page to display

#

should be instant :/

#

but thanks for the lil nudge, realised that I was assuming it was item renderers

unborn dragon
#

Word wrap!

burnt dune
#

has it not been super slow at all for you?

unborn dragon
#

Not in this project, I will once it’s done

#

But I meant more that word wrap is causing your issue it looks like, or a lack of wrapping

burnt dune
#

oh, the button height?

edgy mason
#

oh shoot i forgot to test that xml

#

do you still want me to?

burnt dune
unborn dragon
#

If adding 1 letter causes a crash, sounds like you’re exceeding some width and not syncing the new width between the two

#

Or that you are but super recursively and that’s just the breaking point

burnt dune
#
        if (w > 0 && visual.width != w) {
            visual.width = w;
            //text_visual.fitWidth = w;
        }
#

i'll have to do this properly

unborn dragon
#

Ah yeah a relayout each time would do it

burnt dune
#

uncommenting that line will result in the halt

#

its been in for ages

#

i'm surprised i haven't even tripped this

#

we still seeem to have some constant revalidation going on tho

unborn dragon
#

My other guess was gonna be when you use “width=100%”

burnt dune
#

I wish i could make really easy repros for tracy so I could compare changes 😂

unborn dragon
#

As that also involves some back and forth between compos

burnt dune
#

sometimes I can't be sure whether the differences i see are due to me testing slightly differently from run to run

hexed nebula
#

oh, now we are in shared territory again since I use the haxe-ui styling in cortex as well. This indicates that you have styles that are constantly applied every frame, meaning you have a constant difference between the component property (e.g. width) and the style.width(roughly speaking)

burnt dune
#

I round the values

#

oh... I don't 🤔

humble shore
# burnt dune ```hx if (w > 0 && visual.width != w) { visual.width = w; ...

i think its going to be something like: fitWidth has a subtle gutter or something so you set the width to 100, that sets the fitWidth to 100, but actually, its 96 or something (inventing these numbers ofc), that causes the textfield it increase in hieght which causes a new invalidation, and then over and over again (something like that anyway - i would guess)

burnt dune
burnt dune
#

okay, that's the cleanest it's looked so far

#

most of those red spikes are related to mouse hover events

burnt dune
#

@hexed nebula

#

I went to go cook and forgot about this lol

hexed nebula
ember plaza
burnt dune
#

somewhere along the way the mouse events became terrible as well

#

:/

#

i swear this used to work well, maybe i need to run my chart through this 😂

#

my chart stuff might be doing a lot of bad stuff

burnt dune
#

I'm so confused by these performance issues :/

#

I'm currently on a commit from march 2nd 2024 and it's running badly

#

i swear at some point things ran fine

burnt dune
#

I think there may be something in ceramic v1.6.0 that has issues or changed something 🤔

#

v1.3.0-v1.5.0 runs fine (tried all with hxcpp set to git)

#

going to update haxe to 4.3.6 locally just to exclude that before reupgrading to v1.6.0

burnt dune
#

It isn't ceramic

#

It might be tracy 🤦‍♂️

burnt dune
#

okay, i'm not sure what i've done

#

but it seems like version hopping has improved my setup

#

going to downgrade to 1.4.0 one more time just to verify

#

there's defo a performance difference between 1.6 and 1.4

#

top is v1.6.0

#

bottom is v1.4.0

#

I will say that the tests aren't 100% exact, but, the app feels noticeably better from version to version

#

but i did perform the exact same actions throughout both tests

#

I am not sure why things are better over here, the change log doesn't suggest anything major being altered

burnt dune
#

will have to compare to 1.5.0

#

for now, I'm happy to see that things were good at some point 😂

hexed nebula
#

if you want, send me the 2 recordings and I take a look if something jumps out after a smoke and coffee

ember plaza
#

Need to see the actual frame stacks to make conclusions for sure

burnt dune
#

I didn't save the 1.4.0 run

#

but I have a 1.6 and 1.5 run, there's still a difference here

#

need to upload them somewhere, the files are large :/

burnt dune
#

I'd be interested in understanding how you guys come to conclusions to me i'm mostly just trying to understand numbers

#

i have no frame of reference for what's good, what's bad and how to gain that experience

hexed nebula
#

was looking at particles, sry didnt notice disc

burnt dune
#

maybe i did something by mistake

burnt dune
#

try this one

#

ah, that's why 😄

ember plaza
#

Let me know if Ceramic is proven guilty

burnt dune
#

wouldn't it be ceramic if the only thing i change is ceramic versions 🤔

ember plaza
#

Not necessarily, you could be doing something wrong too that gets worse in new versions 😄 but only actual data will make us know that

burnt dune
#

heh, i'm working on improving the data quality

#

just made a little benchmark test that runs the exact same things on a per run basis

ember plaza
#

If it’s a Ceramic regression I’ll look into it for sure

hexed nebula
#

a couple of differences I spot from the very top:

#

source file cache shouldnt worry us. But double the zone amount in less than double the time ran? could be the first hint

#

there is a clear difference in the end of frames

#

@burnt dune try disabling your websocket connection and test again?

burnt dune
#

will take a minute, installing ceramic 1.4 again to test that

#

gone through 1.5, 1.6 gonna run 1.4 on all doing the exact same things

hexed nebula
#

the yellow frames in 1.6 each have a socket.select that eats time

#

one thing that looks strange is SDLRuntime.windowSwap

burnt dune
#

okay, got my updated runs done, will go back to 1.6 and disable the socket

#

but the graph on 1.4 vs 1.5 & 1.6 is super different

#

issue might have began on 1.5 rather than 1.6

ember plaza
#

Random guess could be a regression due to the GL pausing changes between frames

burnt dune
#

would make sense with the use of the socket

#

did 1.4 not have that?

ember plaza
burnt dune
#

here's the updated runs with all 3 versions

hexed nebula
#

so our main concern is 1.4 vs 1.6?

burnt dune
#

correct

burnt dune
hexed nebula
#

yeah, you wanna check anything related to this windowswap

burnt dune
#

hmmm

#

would throttling fps and raising up again be related to windowswap

hexed nebula
#

that's an average frame with a select, they look identical. so no major concern for me there(only number/frequency could add up)

#

but looking at the "short" frames, we see windowswap is a clear difference

#

global numbers on the bottom left show a clear global difference in amount of time and amount/count of calls of the swap

#

also, MTPC is totally different

burnt dune
#

so 1.4 has it called more but it takes less time per call and 1.6 calls it less but takes more time

#

interesting

#

whenever i'm looking at these runs in tracy i'm ignoring all ceramic backend stuff 😅

hexed nebula
#

naturally, 1.6. spends longer in the swap and less fps in general

burnt dune
#

ah, so, what you're looking for here is behavioural differences rather than timing differences

#

timing just points to a behaviour change

hexed nebula
#

yeah, numbers will never be frame-exact between runs, so you are looking for patterns / relations between kpis

burnt dune
#

does the socket seem like the obvious issue here then?

#

maybe an incompatibility with ceramic?

hexed nebula
#

then you look at the structure/zonestack of short & long frames and compare the zone-layout

#

I dont think the socket plays a role

#

it plays a role in the long frames but they average out to about the same frequency in both runs, so I dont consider them an issue atm

burnt dune
#

so yeah, if i'm reading it right

#

it might be that sleep that was introduced to stop ceramic from eating large amounts of cpu

#

1.6 has that in the runtime loop, 1.4 doesn't

#

has a knock on effect to whatever windowSnap does?

hexed nebula
#

oh

#

you are right, it's missing in 1.4. I crossed that of my mental map when comparing 1.5vs1.6, totally missed that in 1.4

#

oh wait

#

it is there in both, 1.4 you have to zoom in

burnt dune
#

oh lol

#

found it

hexed nebula
burnt dune
#

no, i meant i found the sleep in 1.4

#

lol

hexed nebula
#

ah ok

burnt dune
#

it really is quite hidden

hexed nebula
#

maybe play with this define and see how it changes your runs

burnt dune
#

lol what? tracy bundles the code with the run?! 😂

hexed nebula
#

I mentally signed your NDA

burnt dune
#

hahahaha

#

that's why the runs are so large

#

it really takes in all the data

#

that define makes no real difference on 1.4

hexed nebula
#

to be expected, 1.6 is where it should show a diff

#

in any case still a bit weird. swap is still the biggest difference. did you check if there are any default config parameters that changed between releases?

burnt dune
#

i read the change logs of ceramic and there was nothing obvious in them that would suggest issues

burnt dune
#

this change in clay directly references windowswap and was after 1.4

#

compiling clay_native_no_tick_sleep on 1.6 atm

#

i think it makes it look more like 1.5 rather than 1.6 though

#

makes an improvement but not the same as 1.4

hexed nebula
#

i assume you will see parity then

burnt dune
hexed nebula
#

winner, winner, chicken dinner

burnt dune
#

left is 1.6 without the sdl loop change
right is 1.4

hexed nebula
# burnt dune

hard to make a call on these numbers alone. But in any case you have a valid difference isolated, how does the frame-view(top bars) look like between the 2?

#

more blue I assume with the loop change?

#

the question then becomes what is actually happening here and what is considered to be "correct". 1.6 might just be correct, but "offbeat" with timing between the sleeps and the swap

#

personally dunno, I never had to mess with SDL+GL in detail on that level

burnt dune
#

bottom is 1.4

#

more blue

#

but not as much blue

hexed nebula
#

ok i guess, given that might be other changes affecting the frames

burnt dune
#

getting the graph to zoom to the same amounts on both windows is a pita 😂

hexed nebula
#

just click on a frame-bar in the top

#

then the view will just show that frame

burnt dune
#

i meant the overview graph

#

bottom one is zoomed in a bit more than the top one

hexed nebula
#

top is showing 3 frames, bottom one

#

just click one of these thin bars

burnt dune
hexed nebula
#

swap is defo a still a huge difference

#

both have the same vsync setting?

burnt dune
#

yeah, i don't change any project settings between the runs

#

only thing changing is ceramic

hexed nebula
#

next thing I would do is check both apps with renderdoc / nsight to see how a frame on the gpu differs on the gpu

#

the swap should be visible there

#

or give extra pointers. maybe for some reason different profiles are choosen or there is a difference in order that we dont have yet seen due to zoom levels in tracy

#

you might also wanna compare real fullscreen vs. windowed

#

this is shit can get so complex

burnt dune
#

lol

#

thanks for looking at things tho @hexed nebula

#

these things have been awkward in figuring out what exactly is the issue with my haxeui backend, my app etc etc

ember plaza
#

So, in conclusion, what code/commit in Ceramic is causing the perf issue?

burnt dune
#

but there's something going on with windowSnap

burnt dune
#

so there may be some other commit that's an issue

#

that was just an obvious one for me to pick out

burnt dune
#

correct

burnt dune
ember plaza
#

Try to comment the code in clay that calls GL.finish()

burnt dune
#

with or without the sdl commit?

ember plaza
#

If you can try both ?

burnt dune
#

will try, getting ready for work

burnt dune
#

that's with gl.finish commented out

#

it's basically "fine"

#

from the graph perspective

#

i'll do the other test when i get back later, but, I don't think the gl.finish call exists on 1.4 there

#

^ 1.4

#

commenting out glfinish basically makes window snap identical between the runs

ember plaza
#

Yeah expected it

#

I’ll disable GL.finish() by default then. Already disabled it on mac because it was causing issues. Was hoping windows wouldn’t be a problem, but apparently it is

#

Using it does reduce CPU usage when the app is idle though, so maybe we could try disabling it only when there are actual interactions on screen, idk

#

Or I should try to measure frame time without GL.finish(), because that’s the actual problem that I was trying to solve, but that’s quite difficult to do reliably without GL.finish() because any GL call can be the one that will « wait() », as surprising as it sounds

#

And maybe that behaviour is also driver-specific

hexed nebula
#

i think i only ever used it when doing readbacks of screenshots

ember plaza
#

The only reason I tried to use it was to have a predictable place where I can measure the idle time between frames

hexed nebula
#

define "idle time"

ember plaza
#

The time between when the work on current frame is finished (everything sent to the gpu) and the time until when the new frame starts so that it will stay in sync with the screen refresh rate

hexed nebula
#

so you are trying to forcefully singlethread a multithreaded system? 😄

ember plaza
#

I was just trying to use less cpu on windows because it seems that it goes through an active loop that consumes CPU when waiting for next frame

#

(The problem doesn’t seem to exist on mac for instance)

hexed nebula
#

plz dont mind me poking at this, im just trying to understand

#

(and im tired)

ember plaza
#

so basically you try to explicitly sleep() the right time between frames on windows so that it does pause cpu consumption when there is no cpu work to do

#

And the part that has been difficult is to actually measure that time to sleep (if not using gl.finish())

burnt dune
#

here's the initial context

#

a 'hello world' ceramic project would run at 15% 'for nothing'

#

Jeremy was working on that particular issue

hexed nebula
#

well, isnt that the nature of the beast? actually what you really want is a different type of main-loop, one that explicitly renders fps on demand + dirty-rects

burnt dune
#

openfl and heaps didn't have the 'issue'

hexed nebula
#

hmmm

#

interesting terroritory

ember plaza
ember plaza
unborn dragon
#

The shiro games use a while loop waiting until the delta t >= the desired value...

#

Which seems more cpu intensive than the glfinish thing which isn't really my territory tbh so I don't fully get it

burnt dune
# hexed nebula interesting terroritory

yeah, the main concern I had was due to it being an app and was concerned for low end devices + battery ones, an app spinning like that seemed odd when I've seen massive games not reach the same amounts of cpu usage in comparison

#

(I understand that these things are difficult tho)

ember plaza
#

I’ll disable the GL.finish() for now, and when I have some time I’ll try another strategy on windows

ember plaza
hexed nebula
#

i have some brainfog, so I dont get it. it all sounds wrong to me

unborn dragon
#

Well they didn't call sleep(), they just let the while loop whizz away. 1 sec

ember plaza
unborn dragon
#

I never really profiled it though, so you're right maybe it's better or far worse than other options

ember plaza
ember plaza
hexed nebula
#

i need to repair my mouse. I think the left button trigger has work itself into the plastic of the button

#

the clicks and holding have become unreliable

ember plaza
burnt dune
#

lol

#

i've got other problems 😂

#

oh wait, that might be tracy!

#

yeah, that's tracy

#

now my test haxeui app no longer takes 20 seconds to start and it runs nicely 😄

humble shore
#

i didnt fully follow through the whole conversation, just parts - what was the issue?

burnt dune
#

one of the changes with that caused massive slow downs

humble shore
#

oh

burnt dune
#

i never really noticed at the time because i've been on electron until recently

humble shore
#

so back to 15% idle?

burnt dune
#

Indeed 😄

#

buuuut, the tabs feel like native soooooo i can live with it for now 🤣

hexed nebula
#

@burnt dune for the future: You can actually compare traces in tracy and compare zones between 2 saved traces.

#

just stumbled upon this while profiling cortex

burnt dune
#

watched a few vids but they're all so surface level

burnt dune
#

back from work

#

time to figure why my tab sizes are incorrect 😄

burnt dune
#

rounded is pretty much sorted I think

edgy mason
#

want me to test it on tke?

burnt dune
#

i've changed a lot more than just the borders in here

#

check out surfacereworkv2 branch

#

would be funny to see how broken it is though x)

edgy mason
#

the last commit should be one week old right?

burnt dune
#

yeah

#

i've got more changes locally as well

#

just trying to take one problem at a time

#

and each problem keeps taking me down other paths x)

edgy mason
#

huh interesting

burnt dune
edgy mason
#

i don't think so, this is just a pretty low res screen

burnt dune
#

so it is scaled right?

edgy mason
#

scaled via?

burnt dune
#

does it look as you would expect

#

it doesn't seem that broken to me

edgy mason
#

Yeah

burnt dune
#

so i'm not sure if i'm remembering correct lol

edgy mason
#

only weird thing is borders and the X on the tab breaking again

burnt dune
#

tabs look close to normal again

burnt dune
#

@edgy mason pull the latest

edgy mason
burnt dune
#

ahah

#

some details have come back

#

text being weird is expected, that's an issue that came up with daz's profiling insights

#

i just haven't looked at a fix for that bit just yet

edgy mason
#

might be an illusion, but the text rendering looks a bit crisipier?

burnt dune
#

i made a change at some point where i thought the same thing

#

but i was so preoccupied with solving some issue at the time that i have no idea what or when and if it occured 😂

#

it's hard for me to spot these things on my test monitor, it's quite low res and low quality

edgy mason
#

wait huh

burnt dune
#

sometimes gradient buttons on haxeui look like solid colours until i drag it over to my main screen

burnt dune
#

more responsive?

edgy mason
#

Maybe? This system is pretty slow to begin with

#

it is a chromebook running a fedora container

burnt dune
#

ahh

edgy mason
#

fans aren't ramping up though which is good

burnt dune
#

is that native or electron

edgy mason
#

electron

#

not completely sure if native works with tke

burnt dune
#

i'm noticing things feeling nicer on both

#

ahhh

edgy mason
#

why are tooltips so long?

burnt dune
#

wdym

edgy mason
#

looks like the background took the height of the grid itself

burnt dune
edgy mason
burnt dune
#

ya, defo a text width issue

#

i'll come to that soonish

burnt dune
#

that tool tip is a little bit rounded blobcheer

edgy mason
#

baha

burnt dune
#

tried to get the depth issue here solved again, couldn't do it so moving on to the next thing

#

borders seem to be rendered mostly correctly, style wise, now tho

burnt dune
#

lets see if I can get nine slice going :/

burnt dune
#

I'm failing at such a silly part

#

i can't even get an image to load 🤦‍♂️

burnt dune
#

@unborn dragon 👀

#

this took so long

edgy mason
#

🎉

burnt dune
#

because I had a very unfortunately placed bgAlpha = 0 that was part of different bg handling code :/

#

now to have a quick look and see if i broke anything else related to images

#

should probably check if a single image can be sliced as well... it's been quite a bit lol

#

ugly demo but it works

burnt dune
#

aww damn logo

#

i can't test TKE on native

#

keyson and json2object seem to be incompatible

edgy mason
burnt dune
#

if you typed this

#

it might get a lot further

#

i'd try locally but i can't see what type it's meant to be

edgy mason
#

instead of json2object?

burnt dune
#

this is in keyson, so i assume your own code

#

this line is left as dynamic

#

but if it was given a type hint with null<float> etc, it might clear out some errors

edgy mason
#

oh hmm

#

Seems like it would be Array<Array<Dynamic>>

#

[["Num Lock", "/", "*", "-", { "x": 0.25, "f": 4, "w": 14, "h": 5, "d": true }] here is an example snippet

burnt dune
#

ahh cool

#

I'll have a play in a bit

#

that's an awkward format to work with in haxe lol

edgy mason
#

baha, hence why we made our own

#

but we still need to be able to convert stuff from legacy kle to keyson

#

damn great job past logo

edgy mason
#

wdym

unborn dragon
#

But yeah at the time it seemed less straightforward than the other backends which I thought was interesting

burnt dune
burnt dune
# edgy mason damn great job past logo
typedef KeyType = {
    x: Null<Float>,
    f: Null<Int>,
    w: Null<Float>,
    h: Null<Float>,
    y: Null<Float>,
    rx: Null<Float>,
    ry: Null<Float>,
    w2: Null<Float>,
    a: Null<Int>,
    c: String,
    t: String,
    d: Bool
}

and then

for (column in (row:Array<KeyType>)) {
#

fixes all of the keyson related errors

#

why the hell json2obj is failling on a macro call is beyond me

#

might be a similar story though

#

just need to find the origin of the call

#

@edgy mason

#

👀

edgy mason
#

oo

#

thanks for looking into this

#

json2object is only used within keyson though

burnt dune
edgy mason
#

woah 😮

#

kinda confused on why the sidebar is scrambled in native though lol

burnt dune
#

runs really nicely as well

edgy mason
#

1U should be first

#

i'll look into it later

burnt dune
#

If anyone wants to try a haxeui ceramic native app^

edgy mason
#

could you send a pr or patch?

burnt dune
#

yea sure

#

it's hacky and just a quick fix

edgy mason
#

the entire project is hacky

edgy mason
#

Merged. thank you so much!!!!

#

i really need to get back on working on it

burnt dune
#

key and mouse is offset on native 😂

#

oh, it's not all the time

#

but app runs nice

#

does anything look wrong or not as expected that could be the fault of haxeui ceramic? @edgy mason

edgy mason
#

not really, the tab close button looks really thick though?

burnt dune
#

oh it does seem a bit off

#

oh wait

#

this isn't the new version

#

this is on master

#

i forgot how to switch branches with ceramic.yml

edgy mason
#

just git checkout in .haxelib LOL

burnt dune
#

well, lets see if everything breaks

edgy mason
burnt dune
#

that might already be fixed

#

compiling updated backend now

edgy mason
#

hm

#

could that be the hover icon?

burnt dune
#

i'm not sure, that's what it looks like in normal mode

edgy mason
#

normal mode?

burnt dune
#

normal haxeui tabs example

#

but the hover is missing

burnt dune
#

new patches has some error but I can't find the source because for some reason i'm not getting any stack traces on crashes :/

#

error only occurs on windows because it's the silly mesh colour error

#

Anyone have any ideas why I would randomly stop getting crash errors?

#

I am in debug mode

tame turret
#

Small question: All components are Visuals right?

#

Does that mean I could in theory attach a Click component to UI elements and bypass HaxeUI event system? :p

tame turret
#

neaat

burnt dune
#

but I can't guarantee how well it works

tame turret
#

I'll try

#

This week

burnt dune
#

you may need to disable haxeui interactions but I can't remember how to do that

tame turret
#

I'll let you know how it goes 😄

burnt dune
#

cool

#

sounds like a fun thing to try

tame turret
#

Ceramic is neat, u were right

#

The font rendering is glorious indeed and feels extremely snappy

#

And haxeui works... much better 😛

burnt dune
#

I'm happy you're happy with the font

#

it took me a while to sort that out with the backend 😅

burnt dune
#

Dialog misalignment issue

burnt dune
tame turret
#

I found another issue

#

Selecting an item from a dropdown straight made the app crash

#

lmao

#

Color pickers too

#

Is it just the branch you told me?

#

If so I might just switch to the main branch, since I'm gonna avoid dialogs anyway

burnt dune
tame turret
burnt dune
#

it's the new thing I've been working on

#

so there's likely gonna be some bugs

tame turret
#

So i don't even know if it's the drop down to blame here

burnt dune
#

nah, almost 100% gonna be the backend

tame turret
#

Well I'll switch to main and see what happens

#

same thing in main

tame turret
#

It just won't select anything even if I click it, but it doesn't crash

tame turret
burnt dune
#

ah okay, will have a look soon!

edgy mason
#

on the surfacereworkv2 branch sometimes the background of a button on a buttonbar disappears

placid dome
#

@burnt dune
On git main branch, I get

clay.Clay.emitTick ../../ceramic/git/clay/src/clay/Clay.hx:271
backend.ClayEvents.tick ../../ceramic/plugins/clay/runtime/src/backend/ClayEvents.hx:134
backend.Backend.emitUpdate ../../ceramic/git/tracker/src/tracker/macros/EventsMacro.hx:959
backend.Backend.emitUpdateBoxed ../../ceramic/git/tracker/src/tracker/macros/EventsMacro.hx:999
ceramic.App.update ../../ceramic/runtime/src/ceramic/App.hx:1305
ceramic.App.flushImmediate ../../ceramic/runtime/src/ceramic/App.hx:349
backend.Textures.loadFromBytes ../../ceramic/plugins/clay/runtime/src/backend/Textures.hx:167
ceramic.Texture.fromBytes ../../ceramic/runtime/src/ceramic/Texture.hx:158
ceramic.Texture.new ../../ceramic/runtime/src/ceramic/Texture.hx:170
ceramic.Texture.set_density ../../ceramic/runtime/src/ceramic/Texture.hx:79
Null Object Reference

when trying to start my app.
I can't seem to isolate where in my app it originates since the stack trace is contained in ceramic.
Is this consistent with using the canvas and number steppers which you say are unsupported?
Or maybe there's an easy way to diagnose it?

burnt dune
placid dome
#

Seems to be identical crash, @burnt dune , although it would not recognize that i had changed branch and i had to delete /out to trigger a recompile.
it makes me wonder if it picked up any changes

placid dome
#

I would not look too far into this, I think my project is not going to be feasible to work with the ceramic ecosystem

#

it seems to have global imports that shadow many of my classes, and my own resource system clashes with how it is expecting resources to be managed

burnt dune
burnt dune
placid dome
#

It will be, but it three code bases and I need to understand the licensing requirements of some resources used first

burnt dune
unborn dragon
#

Which branch should I be on for playing around? And latest core + whatever ceramic?

burnt dune
#

surfacereworkv2 to play around, technically the master should be more stable but I hear the opposite is true

placid dome
unborn dragon
#

Ok you can tell I've opened up a new project bc of the following list of questions lol

#

Why are all the performance and font things in ToolkitOptions? I'm not confident with how ceramic does fonts, but a lot of it seems like stuff the user would do themselves

#

Or would go in a backend package's helper class

#

I had animation stuff in flixel's TKO for instance that got removed after an asset refactor in core making it not necessary

#

createInstance("../assets/test.xml") not a fan of having to go out a directory by default, but I'll survive

#

I would want a warning before the asset finder starts diving into root scenes imo

#

It's weird having to use the image asset name in the XML even though that makes complete sense given the framework

#

I think I'm just highlighting how you couldn't copy paste the same code/xml into a different backend and get the same result

burnt dune
burnt dune
burnt dune
unborn dragon
unborn dragon
#

There’s a bit more custom support for asset names now in core, but I’m not sure ceramic is intended to use the file names at all

burnt dune
unborn dragon
#

Yes but internally file path => internally managed asset

#

For the other backends

burnt dune
unborn dragon
#

Not at all a priority lol

burnt dune
#

yeah, i get that the current way is unintuitive

unborn dragon
#

I got a few test UIs going, so nothing worth making an issue for

unborn dragon
#

Should issues/PRs be against surfacereworkv2 if it's supposedly more stable?

#

<image width="200" height="200" style="background-image:image:ceramic" /> doesn't display anything bc this.visual is not added to the screen or to a filter by default

burnt dune
#

but if you are gonna make a pr, it's probably better to do it against surfacereworkv2 rather than master

#

there's also a chance that something that isn't working is fixed in the branch

viscid tartan
unborn dragon
#

I actually need to figure out breakpoint debugging with ceramic bc this is different enough from the other backends that I need to see everything

clever jayBOT
#

ceramic electron

  1. Grab yourself the following files: main.js and preload.js
    • This setup comes configured to allow full sys access, adjust if needed
  2. Place these files in .../projectroot/project/web
  3. Next grab launch.json and place this in your .../projectroot/.vscode folder
  4. At the bottom of the vscode window change the build task to clay / Build Web
  5. Now when you go to the debug tab, select Electron: All
  6. Wait for all adapters to connect, it will take a little bit of time on the first launch. A drop down list will appear when completed
  7. When the dropdown list has appeared, select Electron: Renderer
  8. Now when you hit your Restart debug shortcut or button it will just reload inside of the window, rather than relaunch the entire electron instance
burnt dune
#

here's my setup tho

unborn dragon
#

It looks like runtime debugging works, but frame 0 doesn't with the default launch configs and stuff

#

Since it needs to be running already to attach

unborn dragon
#

I'll think about that later, been low on time

unborn dragon
#

Made an issue

burnt dune
unborn dragon
#

It’s a different way of thinking compared to using the graphics api for everything

burnt dune
#

wanted to use whatever ceramic had available

unborn dragon
#

Got bg clipping working which is my main use case, I'll check out 9slice to see if I broke anything there

#

Idk if it's efficient to have 8 degenerate quads if you are only clipping and not slicing, but someone can figure that out later

burnt dune
#

./src/haxe/ui/backend/ceramic/RoundedBorder.cpp(320): error C3861: 'get_radius': identifier not found
the hell is this error

unborn dragon
# burnt dune lol what did you do

Clip with no slice defaults to 9 slice with the center being the full size of the sprite, so the 8 outer quads aren’t doing anything

#

If the slice params are all 0, then your apply slice function just by default does what you want

burnt dune
#

lol, sorry haven't been looking into haxeui stuff

unborn dragon
#

But that case could be handled more elegantly I think

burnt dune
#

i defo remember not being exhaustive with that stuff when i was last working on it

unborn dragon
#

It’s fine

burnt dune
#

at some point i think I need to start cutting some obligations from life in general, there's defo somethings that are taking too much attention 😅

burnt dune
#

check it out

#

sliders working x)

edgy mason
#

aha neat

#

surprised they didn't work before

burnt dune
#

its minor depth issues here and there

#

tabs should be better now as well, but they're also still not 100%

#

just having my regular old quick lil dip to see if i can get something

#

shit like this

#

but at least the tabs are properly highlighted now lol

#

but the selected tab needs to not have that grey border

burnt dune
#

Before

#

After

#

The rounded stuff really shines x)

#

side to side is better

edgy mason
#

aha

burnt dune
#

I'm happy, I think most out of the box components are basically in a usable state now!

#

just gotta work on the NineSlice stuff

#

and I'll probably merge the branch into master

#

Master performs so much worse than v2 branch

viscid tartan
#

#haxe-go is in game framework q&a for some reason

burnt dune
#

lol I might have accidentally dragged it

#

can't position it on the mobile client

viscid tartan
#

Smth on server settings -> channels

burnt dune
#

how

#

@viscid tartan ah cool, thanks!

viscid tartan
humble shore
# burnt dune

rounded borders look great - love shit like this, tiny tiny detail but makes the whole thing seem much more pro

#

optionboxes look right now?

burnt dune
edgy mason
#

(by the way Ian, no rush at all but did you happen to see this message? #haxeui message)

burnt dune
#

Probably better to file it as an issue cause I think Ian is quite busy atm

#

I should probably do the same

burnt dune
#

works completely fine 😄

humble shore
#

perfect... the holy grail of custom backends 🙂

burnt dune
#

@unborn dragon I'm sure you asked for something

#

surprised there's no pin for it though

#

Am i not remembering right

#

ahhh its on the github 😄

unborn dragon
#

For your backend?

#

It’s been so long, I have actual time now to work on these things again

burnt dune
#

yea

burnt dune
unborn dragon
#

Oh yeah it was using the ceramic name of an asset as opposed to the file name

#

In the xml file, which is a little odd at first since the xml should be universal

burnt dune
#

it kind of is universal

#

if you use paths it uses sys to load the file

#

if you use asset ids it uses ceramic

unborn dragon
#

The others use “path” as the index into the local asset manager

burnt dune
#

from what I can tell that how it works in the other backends, but I can see if I can get ceramic to pick up an asset via the path

unborn dragon
#

I think there’s one way to do sys loading and then the typical way which uses assets

burnt dune
#

nine slice defo working

#

probably not exhaustive, but i'm also cleaning up the actual componentimpl

#

because it's a mess

#

so silly, for some reason background images aren't working

#

alpha 😄 , got one image displaying

edgy mason
#

ono

burnt dune
#

<image width="200" height="200" style="background-image:ceramic" />

#

This one works

#

<image width="200" height="200" style="background-image:ceramic;background-image-clip:0 0 200 200" />

#

this one fails

#

@edgy mason is the keyboardEditor building against master?

edgy mason
burnt dune
#

just want to make sure nothing crazy has occured

#

can you run it against the v2 branch?

edgy mason
#

uh how do i do that in my ceramic.yml

burnt dune
#

i'm not sure

edgy mason
#

i don't think you can

burnt dune
#

nope, it isn't on the site at all

edgy mason
#

i guess i could fork it and rename the v2 branch lol

burnt dune
#

i know you can do it via haxelib

edgy mason
#

i guess i could just do a quick checkout in the ci workflow itself

burnt dune
#

haxelib git haxeui-ceramic https://github.com/jarrio/haxeui-ceramic surfacereworkv2

#

lol not heaps

#

maybe you could add the cmd command to the end lol

edgy mason
#

yeah i can do that

#

alright building

burnt dune
#

my app hasn't broken or anything so hopefully yours is fine

edgy mason
burnt dune
#

not my fault 👀

edgy mason
#

ill look into this in a bit lol

burnt dune
#

ci lies

#

ohh, easy fixes i think

#

might be to do with haxe 5

edgy mason
#

@burnt dune built

burnt dune
#

feels snappy but i don't have a reference point

#

also, tabs might not be 100% fixed i guess?

#

i knew that, but i expected the highlight to work...

#

i think its odd that the first and last one doesn't have the line

#

these tabs work, the side bar one doesn't is the sidebar a custom implementation?

#

rounded corners are working 😄

edgy mason
#

ah wait no it is

#

it is a button bar

burnt dune
#

so i'll consider this a 50:50 chance its the backend

edgy mason
# burnt dune hmm... well testing button bar locally it seems to work
    <button-bar selectedIndex="0" direction="vertical" id="modes" styleName="modeSelector">
        <button id="place-mode" text="Place" icon="icons/place-mode" iconPosition="top" />
        <button id="edit-mode" text="Edit" icon="icons/edit-mode" iconPosition="top" />
        <button id="unit-mode" text="Unit" icon="icons/unit-mode" iconPosition="top" />
        <button id="legend-mode" text="Legend" icon="icons/legend-mode" iconPosition="top" />
        <button id="color-mode" text="Color" icon="icons/color-mode" iconPosition="top" />
        <button id="present-mode" text="Present" icon="icons/keyboard-mode" iconPosition="top" />
    </button-bar>
#

guessing it is the selectedIndex thing that is broken

burnt dune
#

a builder paste would be nice

edgy mason
#

all i do is set the width it seems

#

not sure why that is a full style lol

#

ah nm, github search failed me

#
.modeSelector {
    width: 64px;
    height: 100%;
    background-color: #282828;
}
.modeSelector button {
    width: 64px;
    height: 64px;
}
.modeSelector button:down {
    border-left: 3px solid $accent-color;
}
burnt dune
#

yeah its the backend

#

can't even select the button

#

so weird

edgy mason
#

the buttons work for me when i click them

#

just the first and last border doesn't show

burnt dune
#

the example fails harder than the one in your app for me

#

i don't even see a border

edgy mason
#

oh weird thonk

burnt dune
#

and i can't click and select a button

burnt dune
#

another little detail that's working good

burnt dune
#

kind of understand what's going on with the buttonbar

#

the 2 that are failing (top and bottom) have rounded corners

edgy mason
#

but i trust you

burnt dune
#

it IS so confusing

#

I don't even know why the accent border needs any rounding 😭

#

but yeah, maybe some edge case with the rounded border code :/

#

we fixed it

#

but also made other things worse

#

😄

edgy mason
#

ono

burnt dune
#

Well, there we go

#

pushed