#Rosy

1 messages · Page 18 of 1

cloud rivet
#

and enterprise contracts aren't month to month

wraith urchin
#

What did you do with the funding? Is it actually in cash?

#

Some of your customers might go belly up

cloud rivet
#

that's how VC fun raising rounds work afaik

#

I probably can't talk about what we're doing specifically

#

but I can vaguely tell you that vc fund raising is all cash

bronze socket
#

as a lump sum?

wraith urchin
#

I'm just thinking if the funding isn't literally cash in the bank it might go poof

cloud rivet
#

well, of those customers that we have we are allowed to publicly disclose they are unlikely to go belly up

#

and the ones we can't disclose are even bigger

#

and if they go under

#

it's pretty much another great recession or worse

wraith urchin
#

It's definitely gonna be worse in some sectors

#

I fully expect to lose my job

cloud rivet
#

I hope you don't

wraith urchin
#

I hope I do KEKW

bronze socket
#

as much as I don't love my job, it's nice to be in banking

cloud rivet
#

I'd have weekends and holidays if I lost mine

#

but I like my job

bronze socket
#

I am just trying to live slim and save big so one day I can lose my job forever

wraith urchin
#

Same

cloud rivet
#

aren't we all lol

bronze socket
#

true enough

true moon
#

What's Autodesk's exposure to AI?

#

I wouldn't think it would be that much

#

I guess you probably can't say

wraith urchin
#

Here's what I will say, because it's all public, we didn't do much during the initial wave of AI hype but we kinda pivoted a bit harder into it in 2025

#

Hence the increase of grumbling in the ASO channel

#

And my decision to apply for grant money was not independent of these developments

cloud rivet
#

I wish you luck on your grant application!

#

if Maya gets AI features I can't turn off I will hate it lol

cloud rivet
#

so I haven't made any changes yet, but the relative orientational stability on the other side of the track where the normals are roughly the same I think confirms my suspicion about the plane normals fighting each other, and I need to detect the correct normals more accurately and interpolate them

wraith urchin
#

Is the track a spline by any chance?

cloud rivet
#

yes

#

the spline isn't defined in my code like it is in your game

#

I defined mine with Houdini nodes

wraith urchin
#

Ah cool

#

so how are you getting the normals?

#

are they generated by houdini?

#

the normal that goes to the side there looks kinda messed

cloud rivet
#

I plan to, but right now I am using a cross product of the vector from one point to the next

#

well it is a cross product of a cross product

#

p1 - p0 = forward, then right is the cross product of y up (which is an error) and forward, and the normal is the cross product of right and forward

wraith urchin
#

so do you calculate the two face normals that touch the vertex then lerp them?

cloud rivet
#

that's what I need to do, I am not right now

#

well

wraith urchin
#

One thing that is nice is to blend between them based on the ratio between the areas of the two faces

cloud rivet
#

I actually want to generate the normals in houdini since I want loops and twists in the track

#

it's an antigrav track

#

it should be like a roller coaster

wraith urchin
#

Yeah I saw some of your previous videos

#

I've been lurking

cloud rivet
#

me too

#

I lurk in a bunch of threads, and I click around ones that I'm not following and read them too

#

I felt like I was spaming people threads too much and cut back a while ago

#

I'm using houdini because I don't want to get bogged down into building an editor again like I did with my previous project, idk, editors are cool though

#

I also really like using houdini

#

I could see myself just doing stuff in houdini if I ever got tired of programming my own engine

wraith urchin
#

Houdini looks nuts to me lol, but people seem to love it

cloud rivet
#

yeah there's a lot to it

#

I'm gonna try keeping the orientation logic off while falling to see if that helps with the initial instability

wraith urchin
#

So does the vehicle steer automatically?

cloud rivet
#

no I use my xbox controller

wraith urchin
#

so what is the orientation logic basically?

cloud rivet
#

oh so when the vehicle is on the track I want it to orient itself such that it is aligned with the track

#

so if it is going up a slope

#

it is oriented as if it is going up the slope

wraith urchin
#

We are working on a really similar problem right now

cloud rivet
#

oh interesting

#

I have no idea what I'm doing

#

I'm just kind of figuring it all out

wraith urchin
#

literally the bézier stuff I was talking about

cloud rivet
#

this is for your flight path for your bird?

wraith urchin
#

Yeah

cloud rivet
#

amazing stuff

wraith urchin
#

at any given point a Bézier curve has a defined normal and tangent

#

which you can use to construct a matrix or quaternion

#

So you just gotta find the closest point on the bézier curve

#

Which is what I'm working on right now

cloud rivet
#

that's really cool

#

there's a thing called Plücker coordinates, which has this thing called "m" called the moment of a line, I am thinking about also

#

I dont' know if it's useful for orientation honestly

wraith urchin
#

So is the curve a Bézier (or similar spline) in houdini?

#

possibly a b-spline?

#

or Hermite

cloud rivet
#

I'm relying on some houdini features for bezier curves and I get (and can define) some variables I can adjust, so it's not my own math

#

I have done my own hermite curves though in my foundations project

#

with tangents

wraith urchin
#

A bézier curve is fully defined by its control points, so maybe you can export those from houdini?

cloud rivet
#

I am using a feature called "Curve U"

#

via resample node

#

I am exporting just the points

#

via a python script

#

I then use a mesh shader to draw the track

#

using the points

#

and the physics using the points

#

I will export the normals too

wraith urchin
#

oh, maybe you can just export the normals from Houdini

cloud rivet
#

once I generate them

#

yeah that's the goal

wraith urchin
#

oh you literally were typing that lmao

cloud rivet
#

it's not really houdini exporting them, more of a python script that reads the values from the attribute wrangler node

wraith urchin
#

Is the track one way?

#

Because you probably want tangents too

cloud rivet
#

it's just track, you can drive it anyway you want

#

once I have an actual race game play yeah I will want tangents

wraith urchin
#

the tangent is probably more important for your case actually

#

What is your coordinate system btw?

#

I have some code I use all the time you might find handy

cloud rivet
#

just your basic opengl right handed y up

wraith urchin
#

-Z forward?

cloud rivet
#

yeah

wraith urchin
#
quat co_math::look_rotation(vec3 forward, vec3 up)
{
    assert(!co_math::contains_nan(forward));
    assert(!co_math::contains_nan(up));

    vec3 f = forward.normalized();
    vec3 s = cross(up, f).normalized();

    assert(!co_math::contains_nan(s));

    vec3 u = cross(f, s);

    quat q;

    auto sum = s.x + u.y + f.z;
    if (sum > 0.0f)
    {
        float a = sqrt(sum + 1.0f);
        assert(a > 0.0f);
        float c = 0.5f / a;

        q.w = (a * 0.5f);
        q.x = (u.z - f.y) * c;
        q.y = (f.x - s.z) * c;
        q.z = (s.y - u.x) * c;
    }
    else if ((s.x >= u.y) && (s.x >= f.z))
    {
        float a = sqrt(((1.0f + s.x) - u.y) - f.z);
        assert(a > 0.0f);
        float c = 0.5f / a;

        q.x = (a * 0.5f);
        q.y = (s.y + u.x) * c;
        q.z = (f.x + s.z) * c;
        q.w = (u.z - f.y) * c;
    }
    else if (u.y > f.z)
    {
        float a = sqrt(((1.0f + u.y) - s.x) - f.z);
        assert(a > 0.0f);
        float c = 0.5f / a;

        q.y = (a * 0.5f);
        q.x = (s.y + u.x) * c;
        q.z = (u.z + f.y) * c;
        q.w = (f.x - s.z) * c;
    }
    else
    {
        float a = sqrt(((1.0f + f.z) - s.x) - u.y);
        assert(a > 0.0f);
        float c = 0.5f / a;

        q.z = (a * 0.5f);
        q.x = (f.x + s.z) * c;
        q.y = (u.z + f.y) * c;
        q.w = (s.y - u.x) * c;
    }

    return q;
}
#

you might need to modify this because it's left handed

#

but you just feed it the tangent of the track and the up vector (+Y)

cloud rivet
#

oh that looks a bit like my code, except with the conditionals

#

well

#

just the first part

#

auto sum = s.x + u.y + f.z;

#

what's this doing?

#

oh

#

I understand

#

s is a vector pointing along the x axis, and u is pointing along the y etc

#

you're trying to find the axis in which your forward is pointing the most to

wraith urchin
#

basically yeah

cloud rivet
#

really cool

#

thank you

wraith urchin
#

You may need to flip some of the signs for right handed

cloud rivet
#

aren't you right handed?

wraith urchin
#

nah ASO is left handed

cloud rivet
#

you point into the positive z?

wraith urchin
#

Yup

#

+Z forward

cloud rivet
#

oh, how come?

wraith urchin
#

I dunno, it felt right

cloud rivet
#

I picked right handed because my essential math and every other book I have used it and I gave in

wraith urchin
#

Thats a fine reason

cloud rivet
#

I don't know a lot so I don't want to make things harder for myself

wraith urchin
#

There's not really an advantage either way

cloud rivet
#

yeah

#

well in my case I can follow the math in my books a bit easier

#

although essential math is z up agonyfrog

#

thank you for this I will add it to my notes

wraith urchin
#

I guess I have the Unity coordinates and you have Houdini, which is nice for your workflow I bet

cloud rivet
#

oh true, man I guess I lucked out, I didn't even check that

#

but yeah the track looks the same in houdini as it does in my game

cloud rivet
#

next thing is collisions

#

is also still really wobbly

wraith urchin
#

What did you change?

cloud rivet
#

I added ray intersection to surface plane to test to get the track normal, and then I made it so that each ray used the same normal for the torque applied to it

#

so basically better track normal detection and then using just one normal for all the orientation torque

wraith urchin
#

I have a suggestion to make it less wobbly

cloud rivet
#

sure! what's your suggestion?

wraith urchin
#

current_normal = lerp(current_normal, track_normal, 1.0f - expf(-rate * dt))

cloud rivet
#

oh yes that makes sense

wraith urchin
#

that will smooth it out

cloud rivet
#

I think part of it is that I am not applying torqe to all the points sometimes, when one of the rays gets too high so its distance from the track leads me to not think it is over a surface, and that causes all kinds of problems, if any of the points gets orientation they all should

#

like if I go too fast up a slope

#

the two points at the front will be so high they think they're not on the ground anymore and I stop orienting them

#

and then the torque applied to the rear points dominates the vehicles full orientation

#

what I need to is apply gravitational torque to those front points

#

so they rotate the vehicle back down using the gravitational force * mass of the vehicle I think

#

I'm going to try your lerp also

#

I will try your lerp first

wraith urchin
cloud rivet
#

no

#

well

#

it ends up being the center of mass

#

I take the cross product of the point in local space and height error

#

times a hover strength

#

it works

#

I have a lot of 4d math

#

cross product is 3D obviously

wraith urchin
#

So is there gravity on the vehicle?

cloud rivet
#

there is when it's not on the track

#

the track triggers antigrav

#

so the gravity is the inverse of the track normal

wraith urchin
#

Ok, I was thinking, what if you always applied gravity

#

then the track added a bouyancy force

cloud rivet
#

I'm not sure about that

#

I will add the gravitational force to the wheel torque

wraith urchin
#

and you apply force proportional to the distance to the track at each of the 4 corners

cloud rivet
#

when they're too far away from the track

#

or well they don't detect they're over the track

#

and when none of the points are over the track it's just y up gravity

#

I had gravity and it just complicated things, but that was before I fixed all the bugs

#

does your game apply gravity to the bird?

wraith urchin
#

Actually no

#

I was thinking about my water

cloud rivet
#

I'm going for fun factor

#

I'm not creating a simulation

wraith urchin
#

Physics are fun KEKW

cloud rivet
#

well I think it's something I can fine tune later

wraith urchin
#

I'm sure you will figure it out, but it's eepy time for me

cloud rivet
#

thank you for your help, hope you have a good sleep

wraith urchin
#

Thanks froge_love

cloud rivet
#

definitely smoother, but still a bit wobbly. my biggest problem is just still when the ray is too far from the track and isn't intersecting. I will tackle that tomorrow

cloud rivet
#

so I think the source of instability in the orientation is due to equally applying torque to all axis and I need to account for the dimensions of the vehicle. I noticed the instability is all along the z axis, and I need to dampen the torque by ratio of the length, width and height of the vehicle, so the torque needs to be applied in the vehicle's object space

#

so I think I will try that today

#

like if I apply the some amount of torque to the z axis, the force of that rotation will cause a greater rotation when compared to when that force is also being applied to the x axis and its impact for the rotation along that axis. This is I think similar to the angular momentum that a figure skater uses to go faster by bringing their arms in closer. that's the theory, I will have to see after work

cloud rivet
#

I'm going to spend a lot of time on being able to customize the vehicle

brisk chasm
cloud rivet
#

small steps

#

the wobble is gone but I'm having trouble with the orientation still for some normals

#

I think I just need a graviational force and collisions and that will solve it, because it gets stuck hanging in the air and orientation isn't going to solve the problem

solid grove
#

are you going to automatically re-orient karts if they get flipped over?

cloud rivet
#

not sure what I am going to do

#

I guess

cloud rivet
#

made it so I can hold my left shoulder xbox controller button to run physics only while pressed to debug issues

cloud rivet
#

my structs are huge

#

my application context is so big

cloud rivet
#

I haven't actually even looked at what its size is, it's probably criminal

#

I just keep adding to it

solid grove
#

well here's my kart state struct

cloud rivet
#

oh it's not that big actually since it's just a bunch of pointers to additional memory, I allocate the subsystem contexts separately,152 bytes

#

I'd hve to add it all up

#

you know

#

I think I will

hushed creek
# solid grove

I mean if you only have a few of them active at any one time...

solid grove
#

yeah there's only 12 racers at a time rn

#

but even if i had 100 racers it wouldn't matter

hushed creek
#

yup

cloud rivet
#

54 kb

solid grove
cloud rivet
#

this is just the application context including all the sub system contexts

#

my overall memory footprint is tiny since I don't support textures

#

I don't think I'll support textures in this game, it's just going to be all vertex colors I think, at least for the forseeable future

#

I dont want to load bmp images or write png/jpg/exr loading code nor bc transcoding code rn

#

or generate mipmaps or do any of that

hushed creek
cloud rivet
#

I probably spent a month or more on just image work in my last project

hushed creek
#

my ram usage is also something absurd like 3GB because I allocate a ton of vram that I only use like 4% of

solid grove
#

my engine punts the image decode logic to stb_image and dds_image

#

i don't haev any build-time image transcoding

cloud rivet
#

I currently don't have any dependencies outside of windows and vulkan headers

#

and the C stdlib

astral hinge
hushed creek
#

your stack as soon as your program runs

cloud rivet
#

alright I have now added a timescale to my physics, and I can adjust it with the xbox controller dpad, and I can speed it up with the right shoulder button, and I can toggle my UI with the controller start button

#

I also added a bunch of ui helpers to debug vectors and improved my ui code to make it easier to add debug text

#

and I can of course step through my physics by pressing the left shoulder button when physics are disabled

#

I just have the thing spinning to test these changes

#

I honestly don't know what to call the "vehicle"

#

I don't want to call it a car or a pod or a ship

#

I really don't like either of those things

#

but I am tired of calling it a vehicle

#

it's not a car and it's not a pod

hushed creek
#

I'll name it for you

#

it's a cuberoach

#

it has legs and feelers

#

cuberoach

cloud rivet
#

those are debug lines 😩

astral hinge
#

hovering personal transportation apparatus

cloud rivet
#

hpta

#

phat

#

personal hovering apparatus transporter

#

idk

#

something short

astral hinge
#

how about gort

cloud rivet
#

what are roller coaster things called, cars?

hushed creek
#

possibly hovering automatic transporter

cloud rivet
#

hrm

hushed creek
#

anyway it's a cuberoach

cloud rivet
#

alright enough writing debug and utility code, time to make progress

#

the new frakenstein movie on netflix is really cool imo

#

I liked it a lot

cloud rivet
#

haven't added persistant gravity and collisions yet, but I got orientation working so well now though

#

the reason it gets stuck in mid air is because it's not close enough to the track to apply any force, and that's because of conditional logic that applies gravity, but it should just always have gravity and collision detection will allow that to work. I was just removing gravity when I detected it was on the track and did not add any collision logic but that's obviously not working out

#

but the orientation is now very close to being good

cloud rivet
#

I need to make the track bigger, it's not easy to drive with how small and narrow it is, I still have collision work to do but have made a lot of progress, I think making the track better is more important now.

cloud rivet
#

increased the scale of the track in houdini and then added a UI slider to change the track width. I'll need to add smaller interpolate track point values so physics works

#

then I need to fix my third party camera since the code for it is still from before I had any of this

#

tracy has LLM AI support now

brisk chasm
#

also support for republic of china 🇹🇼m

cloud rivet
#

yeah I don't know what rocprof means

brisk chasm
#

profiler for rocm probably

true moon
#

ROCm is AMD tooling

brisk chasm
#

rocm is amds cuda, no?

bronze socket
#

yeah

brisk chasm
#

the whole gpgpuverse

cloud rivet
solid grove
#

i plan to raycast from the kart to the camera and snap the camera to the hit point if there is one

#

but i haven't done that yet

cloud rivet
#

I need to get the orientation for the camera correct as well, and make it less nauseating

#

I just do my collisions with rays now

#

because it is a hovercraft I have steering and propulsion when falling and it hardly ever collides now because of high it hovers, so when it does collide it's pretty rare

#

I don't have any drift and if you stop giving the vehicle power it will not slowly come to a stop, I need to separately attenuate the player propulsion. I need to do that separately otherwise it will not apply steering to previous contributions of player supplied velocity

#

I want to add banking to enable drifting

#

I definitely did not build any of this from first principles lol

#

but it's much better than it was when I couldn't do really anything at all

solid grove
#

i implemented my camera kinda like an NPC that is programmed to look at stuff and maintain a distance away from its focus

#

it's not attached to the kart that it's following

cloud rivet
#

oh interesting

#

I don't have any NPC logic

solid grove
#

when you boost the karts get a little extra distance from the camera and this comes for free due to how I implemented the camera

cloud rivet
#

I noticed that I was paying close attention to your camera

#

I'm happy with my progress this weekend, I think camera collisions and then working on the camera orientation is what's next. It should always be looking at the skimmer (I'm going to start calling it that I think), from a little bitg of an elevated position looking down

#

once the camera is better I'll generate more points to smooth out the track

#

oh in Houdini I can add a resample SOP after my wrangler and maybe use it to sub division my curves

cloud rivet
#

all my physics code is in a single function called p_integrate_forces_with_dt, it's about 180 loc

#

I don't hate it

#

it just generates two values:

  float4 total_linear_velocity;
  float4 total_rotational_velocity;

It does also have the side effect of stopping a collision when it detects one by moving the hovercraft back when there's penetration of the track surface

#

it moves it back along the normal of the track

#

by the inverse of how far it penetrated past the plane

#

well the inverse of the distance to the plane

#

which is a negative number

pseudo dock
cloud rivet
#

Thanks!

cloud rivet
#

I used to think people who used C were weird tbh, like how could you program anything meaningful with just C

#

Hasn’t been an issue though, I don’t like find myself limited or anything ever

true moon
#

My c++ style is basically c-like

#

I do definitely prefer C++ for a variety of reasons, but structurally it's easy to translate back to C if I had to

#

Probably the #1 thing is just having math types, that's definitely a big bonus in C++ for doing linear algebra and stuff

#

Namespaces are nice too

cloud rivet
#

I don’t miss operator overload because I use clang language extensions for vectors and matrices

true moon
#

Ah alright

#

Yeah it'd be pretty close then

cloud rivet
#

I multiply matrices and vectors with *

true moon
#

I still get enough mileage out of the other features to prefer C++ but if I had to use C I would be perfectly happy for the most part

solid grove
#

i use a lot of templates

cloud rivet
#

I also get division and scalar multiplication

#

I don’t need meta programming

#

My polymorphism solution are tagged unions

#

Works for me idk

astral hinge
#

if I used C, I would be bitter every time I came across a problem that could be trivially solved with a C++ feature

cloud rivet
#

Like what

astral hinge
#

that's how I felt when I was changing the glsl backend for shady

#

well right now my screen is covered in c++-only features

cloud rivet
#

Oh you did shady stuff?

astral hinge
#

yeah but it didn't get merged

#

I have an open pr I think

cloud rivet
#

Neither did mine KEKW

solid grove
#

at work I wanted to make a resizable array of structs, but because that part of the codebase was in C, our resizable array (that we NIH'ed becasue C doesn't have one) only stored pointers. so I had to make an object, allocate it, and manage it's lifetime instead of use something like std::vector

cloud rivet
#

Stretchy arrays or whatever, the Sam Barret thing

#

It works

solid grove
#

we aren't allowed to import any 3rd party code

cloud rivet
#

You can trivially write it yourself

#

It’s like 20 loc

solid grove
#

i wasn't allowed to do that either KEKW

#

no new containers unless approved

cloud rivet
#

Where the did you work lol

#

Idk I think I like C mostly so I don’t have to learn C++ stuff

astral hinge
# cloud rivet Like what

references, namespaces, lambdas, templates (and metaprogramming), the stdlib (I use so much from it), constexpr, range-for, exceptions, destructors, C++ libraries like glm, jolt, etc.

solid grove
#

in C you namespace just be prefixing the functions

cloud rivet
#

Yes

#

Works for me

solid grove
#

sometimes I prefer that over C++ namespaces

#

:: is annoying

astral hinge
#

indeed and if you look at nabla glsl you know what that leads to bleakekw

#

random thing I found
nbl_glsl_sampling_generateSphericalRectangleSample

#

the annoyingly complex rules of name resolution in C++ do serve a useful purpose

cloud rivet
#

Of course it’s horrible

#

Oops

astral hinge
#

that's not my code

cloud rivet
#

Replied incorrectly

solid grove
#

my codebase contains the wonderfly-named SingleAudioRenderBuffer_t_readwritetrack

astral hinge
#

using foo_bar_ for namespaces in C is as good as it gets in C

solid grove
#

xlib doesn't bother to namespace anything, so you better not have a type named "Color"

astral hinge
#

at least modern C libraries have the decency to namespace stuff

cloud rivet
cloud rivet
#

Sometimes I forget

true moon
#

I use namespaces everywhere and C++ ones are better than C because you can using some of all members of a namespace so you don't have to qualify them in a context where they're being used a ton

true moon
#

References I use everywhere too

cloud rivet
#

That’s exactly what I look like

true moon
#

Templates and lambdas I don't use often but when I do they're pretty irreplaceable

#

Stdlib use for me is 90% std::vector which replaces most uses of malloc in C

solid grove
#

my ECS works entirely using templates. tbh it's pretty cool but it also means adding a scripting language is basically impossible

#

it reads the function signature of your system, extracts the types, and builds the queries automatically, along with doing parallelism checks by building a graph of resource usages and dependencies

astral hinge
#

I'm using entt (100% templates) and I was able to add scripting language support

solid grove
#

mine's welded to the C++ type system meaning if I wanted to add a scripting language I'd need to codegen trampoline code in C++ to hook it up

astral hinge
#

the trick is to generate separate functions for operations like adding and querying components

#

oh also I use reflection to generate that stuff btw

#

and I use none of it btw (I have a single 4-line test script in my game)

solid grove
#
struct FishingBobberSystem {
    struct DataProvider : public RavEngine::FPSScaleProvider, public RavEngine::WorldDataProvider, public RavEngine::OwnerProvider {};

    void operator()(DataProvider& dp, FishingBobberComponent& fb, RavEngine::Transform& t);
};

eg this is what a System looks like. the DataProvider lets you access global resources (along with informing the engine about it so that it can properly validate), and the rest are the components you want to use

astral hinge
#

my mind cannot comprehend everything being visible to everything else all the time

solid grove
#

well that's what i'm trying to limit with this setup

#

all of the different dataproviders are opt-in and each one has a different level of checking that's required. ie the FPSScaleProvider requires no checks, while the WorldDataProvider prevents the engine from scheduling anything else when that system is running because it could make arbitrary changes to the world

#

the components in the query allow the engine to detect read-write and write-write conflicts between systems

#

the checks are automatic, and they've saved my ass repeatedly because I keep forgetting what my own rules around thread safety are

astral hinge
#

so presumably you have some epic automagic graph thread scheduling thingy for system updates

#

how much parallelism do you get normally

solid grove
#

less than I would like because it turns out it's hard to parallelize a game

astral hinge
#

I would expect most systems to be extremely cheap and one or two really phat ones

#

that's how it be in my game

#

sometimes they are trivially parallelizable things which is nice. means I can just use std::for_each + std::execution::par

solid grove
#

if I was doing this in C i'd have to put the checks in manually and so I would forget to do it

#

idiot-proofing for myself

astral hinge
#

the lack of static type safety in C makes me shrivel

#

when my stroustrup-goldberg machine finally compiles, I can at least be reasonably sure that the types aren't fucked

#

uh and I love me some destructors

#

this is off topic

brisk chasm
#

🇮🇲🇵🇷🇦🇺🇩🇪 of @solid grove using flag speak ❤️

cloud rivet
#

I have always have found type parameter syntax for generics to be unreadable across every language that has the feature. Maybe a small brain skill issue, but I don’t want it in my personal project. I think some people love type theory more than they love building things and that’s the reason they actually use it.

#

I asked in the past about reflection and meta programming amortization and I get shrugs. You would think given the cost of the time sink this investment in research, writing, maintaining and compiling that code requires there would be a clear and compelling case to make.

brisk chasm
#

you usually write that part once and then reuse it everywhere, its not like these systems have to be reinvented every time

cloud rivet
#

That’s a nice story

brisk chasm
#

yeah, some stories are true though 🙂

#

but its also ok to hand wire serialization everytime from scratch

cloud rivet
#

There’s definitely cases where it is very valuable

#

And the tradeoff is clear

#

My plan is to use python to write C in those cases I think

brisk chasm
#

yeah

#

or write a c program which generates c 🙂

cloud rivet
#

Yeah wouldn’t require a python runtime and environment if I did that

#

And I wouldn’t have to worry about python changing over time

broken fog
#

c++ template abominations are a different story

cloud rivet
#

would you be willing to show me an example of a simple generic

true moon
#

std::vector

cloud rivet
#

no I mean the type def

cloud rivet
#

I think the use of auto for type inference is very cool in C++

solid grove
#

I think clang has __auto_type for C

#

I don’t think you can use it in function signatures tho

cloud rivet
#

I have a single template <typename T> in Rosy I used for determining equality for floating point values

#

I think I could have just used auto maybe

#

__auto_type behaves the same as auto in C++11 but is available in all language modes.

#

TIL

#

I'm gonna start using that jfc

#

thank you!

#

I gotta look at what else there is

#

if there are references

#

I'm going to use those too

solid grove
#

#define let const __auto_type and now you’re writing rust

cloud rivet
#

__nullptr is an alternate spelling for nullptr. It is available in all C and C++ language modes.

#

Clang supports _Alignas, _Alignof, _Atomic, _Complex, _Generic, _Imaginary, _Noreturn, _Static_assert, _Thread_local, and _Float16 in all language modes with the C semantics.

#

what's _Generic

brisk chasm
#

c has auto too since c11 no?

cloud rivet
#

C11 generic selections
Use __has_feature(c_generic_selections) or __has_extension(c_generic_selections) to determine if support for generic selections is enabled.

As an extension, the C11 generic selection expression is available in all languages supported by Clang. The syntax is the same as that given in the C11 standard.

solid grove
#

it’s a cut-down version of templates that they added to C

cloud rivet
#

ok

#

In C, type compatibility is decided according to the rules given in the appropriate standard, but in C++, which lacks the type compatibility rules used in C, types are considered compatible only if they are equivalent.

Clang also supports an extended form of _Generic with a controlling type rather than a controlling expression. Unlike with a controlling expression, a controlling type argument does not undergo any conversions and thus is suitable for use when trying to match qualified types, incomplete types, or function types. Variable-length array types lack the necessary compile-time information to resolve which association they match with and thus are not allowed as a controlling type argument.

#

I'll try using this see if I hate it

cloud rivet
bronze socket
#

I love how you can set up a concept to use in place of a typename

true moon
#

Yeah concepts make them downright comfy

bronze socket
#

so I can have stuff like template <std::floating_point T> and it's implicitly clear the type is only valid for floating point types

cloud rivet
#

yeah concepts are pretty cool

#

I like type constraints

#

for generics

#

I know I am contradicting myself, but I am allowed to do that in my thread

brisk chasm
#

😄

cloud rivet
#

taking up tab space on the chrome title bar for the gemini button is mindblowing

#

that's worse than copilot in edge

#

precious tab space!

solid grove
#

the button outline isn’t the same on all sides

#

they probably vibe coded that button

cloud rivet
#

I use Brave on mac and Edge on windows

#

I should have been using auto all this time

wraith urchin
#

almost always auto

#

It actually prevents you from making conversion mistakes often

broken fog
#

but also they are like the most convoluted way to do generic constraints ever

#

which is a very c++ thing to do

tight torrent
broken fog
#

not using vertical tabs

wraith urchin
#

I need to figure out how to remove it

bronze socket
#

I just use LibreWolf these days

#

ditched ungoogled chromium since they didn't account for manifest v3

solid grove
#

I’m still a Firefox diehard

bronze socket
#

LibreWolf is unmozilla'd firefox

#

so I think you'll be fine

wraith urchin
#

Yeah its the least worst browser I've tried

#

LibreWolf sounds like it might be nice

#

All browsers are terrible though, since the web is inherently terrible

bronze socket
#

yeah, though the literal minimum you can do is download the fork of your preferred browser that has the worst shit ripped out

#

hence why I've been on ungoogled chromium/librewolf

cloud rivet
#

I use vertical tabs

#

on edge

#

but on my laptop it is no good

broken fog
#

i'm not switching from arc until someone else figures out proper tab management

tight torrent
#

i use adnauseam, its built on ublock but instead of hiding the ads it clicks on all of them

bronze socket
brisk chasm
#

i bought yt premium monday a week ago : /

#

yt didnt load anymore with ublock origin, no matter what i tried

true moon
#

Still works for me hmm

solid grove
#

Yeah I’ve been using ublock origin with Firefox on YouTube for years and it’s never not worked

brisk chasm
#

it worked great forever, until last week monday

#

no matter what browser actually

wraith urchin
brisk chasm
#

tried everything

#

but, now i have premium for a year, if its back to worky then then ill cancel

true moon
#

Some people talk about IP banning smart TV ads or something does that work for YouTube too

brisk chasm
#

with an external dns filter, like pihole ye

#

i never got it to work on the same machine, a pihole (or similar) filters for your whole network, since you set them up as your dns pretty much

true moon
#

The thing is I almost exclusively listen to music on YouTube in incognito mode so YouTube premium doesn't really help me

#

I also can't log into Google on my work network it's blocked

brisk chasm
#

i wouldnt mix private stuff with work stuff anyway

tight torrent
#

fair

wraith urchin
tight torrent
#

just bing it :)

#

for youtube i basically exclusively watch on my phone with revanced

true moon
cloud rivet
#

you guys are on fedramp yeah?

true moon
#

Idk how it works internally

cloud rivet
#

we have to support FedRAMP customers

true moon
#

Our parent company sells cyber security as a service so it's mostly their own infrastructure afaik

cloud rivet
#

yeah

#

it's very locked down

#

you can have a slack for example, but it has to be a fedramp slack

#

GovSlack is FedRAMP High authorized and runs in an AWS GovCloud data center operated by U.S. personnel

true moon
#

We use Microsoft stuff mostly that's all hosted in the CONUS

hushed creek
#

It s worth it

brisk chasm
#

i dont need any feature of it, im not using it on mobile, i dont need download, i dont need playing music when mobile screen is locked

hushed creek
#

You get ad free vids

#

Same for yt music

brisk chasm
#

no shit

hushed creek
#

Yt music is like a better spotify

brisk chasm
#

ublock did a very good job with blocking ads

#

and i dont listen to anything mainstream either

#

and what i want to listen to is not on yt music : >

#

a lose lose situation hehe

broken fog
#

as much as i hate giving google any money

#

downloading videos on my ipad for long flights is nice too

brisk chasm
#

nice, its like 13 times more, here

#

always wanted to move to patagonia 😛

broken fog
#

yeah i absolutely wouldn't pay for it at that price lmao

#

i'd probably just stop watching youtube and get back so much time

brisk chasm
#

i wonder how odyssey is doing these days

broken fog
#

would totally move to some remote town in patagonia if i could get a nice remote job

broken fog
brisk chasm
#

and help 🇬🇧 to write software which helps them conquer fire land

broken fog
#

i'd rather not rely on it for music but atm i cba to build up my own library

cloud rivet
#

At work I got a jira issue for a request for some work to do and after dilligent research we determined the request was not possible due to a third party API limitation and then we got a resonse from the person who filed the issue who said yes you can do it and pasted in a chatgpt hallucination

brisk chasm
#

smh

wraith urchin
brisk chasm
#

i hope this fucking bubble implodes soon

wraith urchin
#

Things have been a bit choppy since august, but it's too early to tell if we've peaked

cloud rivet
#

well if all these astronomically scaled and expensive datacenters don't produce the results that pay off the datacenter construction fees, which seems unlikely that anything possibly could, it will happen then

wraith urchin
#

Alot of them are sitting idle because they can't power them lol

cloud rivet
#

yeah should be soon then

#

maybe in < 2 years I think the bubble will pop

solid grove
#

and by the time they come online, the chips will be obsolete

brisk chasm
#

~~let them pay for the electricity themselves and not people who live around them, oops 8️⃣ ~~

broken fog
wraith urchin
#

Those gpus though, I would buy a couple surplus

broken fog
#

they really should streamline the process, ship from the fab straight to the landfill

solid grove
#

And we know they will have the chips destroyed instead of resold

#

because doing that is cheaper

wraith urchin
solid grove
#

Was gonna say we could repurpose the data center buildings but they’re constructed to such a low quality standard that they’d need to be torn down

brisk chasm
#

let them use the datacenters to fold molecules, predict weather or cure diseases

cloud rivet
#

not sure they would fit

#

wall mounted gpus

wraith urchin
brisk chasm
#

they fit right under that big ass mixer board thing, you have in the back of your room

slim oak
#

ASO in 16K

brisk chasm
#

16? only?

slim oak
#

64K & 144 Hz?

brisk chasm
#

HDR69

wraith urchin
#

would 4 x 4K monitors be 16K?

slim oak
#

and async compute to mine bitcoins (reales) KEKW

hushed creek
#

You shut up and take it

#

When youtube does it a random person will reupload it

#

And you can listen

#

Yt is legal piracy

#

Because yt music includes songs uploaded by people on yt proper

#

This also means the library of obscure music deccer loves and spotify wouldnt touch is far larger on yt music

#

Thus making the service a perfect fit for deccer

#

For example

#

It would be impossible to listen to this absolute banger on spotify

#

But on yt music I can

#

This vid is the only one I m aware of containing it I think

brisk chasm
#

"absolute banger" 😄

#

that made me chuckle

hushed creek
#

Well it is

#

Anyway

brisk chasm
#

i still like you fly

wraith urchin
#

We like what we like

hushed creek
#

Tldr is yt music is better than spotify because yt music has everything spotify has and more

brisk chasm
#

it doesnt have my audio plays, spotify has them

hushed creek
#

You ll build a new history and library in no time

#

And the real real benefit of yt premium is having no ads wherever you decide to log in

#

Like on a tv, console etc

#

You dont have to install adblockers on your router

brisk chasm
#

yeah, it still takes a second to load, like it started doing when they added adblock-blockers for some reason

#

you should have ad blockers on your network to block any ads for any software tbh, not just buy yt premium 🙂

wraith urchin
brisk chasm
#

absolutely, stuff like pihole

hushed creek
broken fog
#

i've just had spotify on a family plan since forever so no reason to move off of it

#

i'd rather not use any streaming service tbh and just download my own music library, gotta do that sometime

#

but spotify is pretty good for music discovery sadly

#

it's weird they have simultaneously the best and worst recommendation algos

bronze socket
#

reaching levels of smh never before thought to be possible

#

after I switched from chromium based browsers youtube worked again

broken fog
#

if only firefox was less meme

true moon
#

What's meme about it

cloud rivet
#

devs aren't testing in firefox anymore

#

it's just a matter of time before it's unusable

#

and becomes another chromium browser

broken fog
#

support for most of the fun browser apis takes forever

solid grove
#

I’ve been using Firefox since the days when it was single threaded and there was no tab isolation and I’m gonna hold on

cloud rivet
#

gl

broken fog
#

afaik still no webgpu support

cloud rivet
#

I'm rooting for you

broken fog
#

and a shitty js engine

solid grove
#

I tried it and it’s complete enough to run Unity webgpu builds

broken fog
#

i'm also not giving up arc's tab management, though ig there is that one ff based arc clone browser

brisk chasm
#

nobody needs browser features, it needs to render html

cloud rivet
#

yeah also you can just ignore firefox not supporting a feature since nobody uses it

brisk chasm
#

a lot of corporate policies also ignore firefox, and (force) use edge by default

solid grove
#

though it’s been quite a while since I’ve had a site not work in Firefox

cloud rivet
solid grove
#

at work I use whatever browser the company tells me to because it’s not my computer so I don’t care

broken fog
#

then again mdn says it's also partial support on chromium because it doesn't work on linux agonyfrog

solid grove
cloud rivet
#

I think mdn docs being the go to source for browser dev is probalby how firefox is clinging on

broken fog
#

very funny that the only browser that shows up as having full webgpu support now is safari of all things

solid grove
broken fog
#

ye

#

meanwhile ff on android KEKW

#

might get it in 2035

#

i still use it cause it's the only mobile browser that supports ad blockers afaik

cloud rivet
#

still using a browser on a phone in 2025

brisk chasm
#

still using a phone in 2025 😄

cloud rivet
#

the only thing I do with my phone is music, podcasts, sudoku, work slack and discord

#

sometimes I review a PR on the github app

brisk chasm
#

i use it to track parcels for pickup and when my family members need IT support -,-

cloud rivet
#

oh and order coffee

solid grove
cloud rivet
#

I have a one hour bus commute

#

so sometimes it's all I got

solid grove
#

mobile websites don’t have to be ass but nobody seems to know how to make one

cloud rivet
#

I made the imgur mobile website in 2015

#

it was good

#

me and three other people

#

I think one of the top traffic websites in the US at the time

solid grove
#

they might have massacred your boy

broken fog
cloud rivet
#

they did, imgur is dead now

broken fog
#

i almost don't

#

it's basically a music player and occasionally discord tbh

#

i'd probably get rid of it if it wasn't for literally all communication relying on whatsapp

brisk chasm
#

the constant bing and rumble on my fone because of some chat app would drive me crazy

broken fog
#

istg i hate that fucking chat app

broken fog
solid grove
#

I muted all notifications on my phone except for text messages

brisk chasm
#

600 unread messages of allah

broken fog
#

the device does not get to demand my attention

#

know your place, device

true moon
#

Yeah mines silent all the time too I always get phantom vibration syndrome when I have it on chronically

brisk chasm
#

also, keeping the device in the pocket is weird

#

weird how people stuff their pockets with all sorts of shit, im just weird i think 🙂

broken fog
#

wdym pockets are great

#

i would put my laptop in my pocket if i could

true moon
#

Yeah my pants always get holes in the front where the shit in my pockets wears a hole through the outside

solid grove
true moon
#

I stopped carrying as much in them because I realized it was contributing to my back issues since my phone is big enough that it limits my hip flexion

#

Jeans have shallower pockets these days

#

I used to have no trouble carrying like 12 things in my pockets

solid grove
#

they should bring back mini phones

#

I would buy one

true moon
#

My phone is 7" and it's not a problem on its own but with shallow pockets it is

broken fog
#

they should bring back not having to be reachable 24/7

brisk chasm
#

dont trap yourself in these kind of arrangements, say no

broken fog
solid grove
#

Civilization managed for 10,000 years without 24/7 reachability

true moon
#

I want something halfway to a flip phone

#

I'm torn because it would mean getting rid of discord

broken fog
solid grove
#

lol this channel has become general-2

broken fog
#

sorry bjorn

true moon
#

Maybe a custom android ROM that is ultra locked down and leaves discord as the only distraction

astral hinge
broken fog
#

this is now offtopic 2

brisk chasm
#

opengl-4 you mean

broken fog
broken fog
#

i quit all the social media bs a while back and it made my life better

solid grove
brisk chasm
cloud rivet
#

It's the only pants I wear

brisk chasm
#

in beige too? like your carpets and walls? 😄

astral hinge
cloud rivet
#

I have different colors

true moon
#

I'm wearing a black pair of jeans I have rn that I normally keep clean but am wearing in between replacing my everyday jeans and they have 9" pockets which is excellent

#

The rest are like 7" or something I'll have to measure when I get home

cloud rivet
#

can't stand denim

brisk chasm
#

with a reserved pocket for a caliper

solid grove
true moon
brisk chasm
#

i keep reading " as seconds

true moon
#

511 is good stuff though

cloud rivet
#

I ain't going to no rodeo or wrangling cattle

broken fog
#

isn't denim originally miner pants

#

great for working in the web mines

solid grove
#

the crypto mines

true moon
#

If you can't carry a ruler in your pants pocket I don't want them

#

I should just extend the pockets on the pair I just got

brisk chasm
#

first piece of the exoskellington

broken fog
#

anything bigger would be annoying even if it did fit so it just goes in the bag

brisk chasm
#

demon soon, (also solves the broken back)

broken fog
#

get pung

#

oh you didn't mean the ping lol

#

use the right gifs smh

true moon
#

I call it "pink elementary school ruler metrology" when discussing it with others

broken fog
#

you work on planes?

true moon
#

Airborne and spaceborne lasercom HW

broken fog
#

that's cool

#

your job is literally space lasers

true moon
#

Yes lol

broken fog
#

do they go pew pew tho

true moon
#

No unfortunately

brisk chasm
#

demon is the 13year old nerd from Real Genius

#

who fixes the las0r wattage problem

cloud rivet
#

huh auto works, nice

#
#define choose(T) _Generic(T, \
    int: "int type", \
    const int: "const int type", \
    float: "float type", \
    default: "other type")

int main() {
    printf("%s\n", choose(int));        // "int type"
    printf("%s\n", choose(const int));  // "const int type"
}
#
C:\Users\Bjorn\projects\code\c_generics>clang -std=c11 -Wall -Wextra -o gx.exe main.c

C:\Users\Bjorn\projects\code\c_generics>gx.exe
int type
const int type
#

I can do reflection

#

lol

#

I can use this for my math library mindblown

#

I see it's just a type switch

#

but that's pretty awesome

#

oh it's a fully qualified type switch

cloud rivet
#
#include <math.h>
#include <stdio.h>

typedef float f32;
typedef f32 float4 __attribute__((ext_vector_type(4)));
typedef f32 float3 __attribute__((ext_vector_type(3)));

#define vec_len(v) _Generic((v), float4: vec4_len, float3: vec3_len)(v)

static inline f32 vec4_len(float4 v) {
  return sqrtf(v.x * v.x + v.y * v.y + v.z * v.z + v.w * v.w);
}

static inline f32 vec3_len(float3 v) {
  return sqrtf(v.x * v.x + v.y * v.y + v.z * v.z);
}

int main() {
  printf("%.3f\n", vec_len(((float4){1.f, 0.8f, -0.2f, 1.f})));
  printf("%.3f\n", vec_len(((float3){1.f, 0.8f, -0.92f})));
}
#
C:\Users\Bjorn\projects\code\c_generics>clang -std=c11 -Wall -Wextra -o gx.exe main.c

C:\Users\Bjorn\projects\code\c_generics>gx.exe
1.637
1.577
#

still have to write out the definitions

#

hrmm

#

idk

#

interesting

astral hinge
#

auto and decltype/typeof are awesome features

cloud rivet
#

can't use auto in a function parameter in C, which makes sense

#

C's version of meta programming is worked into macros I guess

#

a typeof makes sense in a macro I think

#

_Generic does not exist in C++ and neither does typeof so these are different languages

#

you can't write C in a C++ file, you can only write C++

pseudo dock
#

Yes... yes... I can feel you getting tempted by C++, even though you started out by saying you didn't miss anything writing C 🙂

cloud rivet
#

well what I think I tried to say is that I didn't understand how anyone could write C and now I feel like I'm doing just fine being productive with C

pseudo dock
#

Yeah, I guess you did say something closer to that hehe

cloud rivet
#

yes I don't doubt I gave the impression that I also kind of meant what you said

true moon
#

In the kinds of applications where I've actually written C for real (mostly embedded) I never even missed having C++

#

because you care so much about the exact memory footprint and execution of the program that you can't really afford to use any abstraction at all

cloud rivet
#

that makes sense

true moon
#

The last thing I worked on I couldn't afford to even do one extra floating point arithmetic operation

cloud rivet
#

what ISA?

#

there wasn't an FPU? or something like that?

#

that's a single instruction in x86-64

true moon
#

No there wasn't

#

It had this exotic coprocessor that was better at that stuff but I couldn't really be bothered to use it

#

it was a pain to set up and there wasn't a C compiler for it so I just used the regular CPU

cloud rivet
#

interesting

#

no C compiler for something! wtf tbh

true moon
#

The coprocessor had a very limited and specialized ISA for doing certain calculations so there just wasn't much point I guess

#

It didn't have control flow or anything like that

#

Just banging through a hard-coded bank of commands on repeat

cloud rivet
#

that's kind of cool though

true moon
#

yeah it was a neat device

#

dual core

#

never programmed a multicore device bare metal before

astral hinge
astral hinge
astral hinge
true moon
#

For what I was doing there wasn't really any negative cost anything it was pure arithmetic at high frequency

#

acting on external inputs from an ADC and writing back to the DAC

cloud rivet
#

I don't think Demon said C++ couldn't be used, he said he didn't miss C++

astral hinge
#

jason turner had a cool talk about writing c++20 code that ran on some old processor, I think a 6502 or something

cloud rivet
#

which is kinda what I said too

#

which is being interpreted as an attack on C++

#

or something

#

it's more like wow C can be useful

true moon
#

Yeah I know it can run on anything, that's what Elias is using for the PS1 stuff etc

cloud rivet
#

and not like C is better than C++

astral hinge
#

I'm just saying that c++ offers a lot even for code that runs on pathetic computers

#

Even if you can't use 80% of it

#

Well most of what you can't use in an embedded context is the stl

true moon
#

We're talking about code that accesses random magic-number addresses in a memory map and stuff there wasn't really anything to abstract it was just pure procedural code mostly issuing register reads/writes and then some arithmetic

#

I think it may have had a C++ compiler but it only supported C++98 or something

astral hinge
#

Every arduino library I've used for an external device abstracts away the magic addresses

true moon
#

Yeah they were abstracted in the sense that there were macros and functions for them and stuff

#

but like it's not like I needed any data structures more complex than a flat static array

#

I would have remembered if I ran into any instance where I wished I had access to C++ but I distinctly remember never having that feeling

astral hinge
#

And some devices have a contract that the program must uphold or you risk getting bad data or damaging the device or something, and libraries can abstract that away too

#

That's just from my limited experience with arduino tinkering

true moon
#

I couldn't use any conditional control flow either because I needed cycle-accurate deterministic execution time

#

Under those constraints and doing such a constrained task one basically doesn't need anything besides some structs for basic data organization and arithmetic/assignment

astral hinge
#

Yeah I'll agree that if your program is very small and simple, you don't need much abstraction

#

And embedded device programs tend to be in that category

#

We see enough awful premature abstraction in hello triangle already frog_sweat

true moon
#

There's only so much software floating point trig you can do in a 100kHz loop on a 200MHz microcontroller

astral hinge
#

I was slightly surprised that a 16MHz Arduino uno could do srgb->oklab->srgb in real time (with emulated floats)

#

I was controlling an RGB LED as you might imagine, and no, the result was not interesting

cloud rivet
#

neovim can't color auto correctly in C :(

#

why is it two different colors, it is semantically the same thing

#

my C is too advanced now 😩

astral hinge
#

regarding the previous convo, I'll try to refrain from c++ evangelism in this thread since it can be annoying

cloud rivet
#

it's not annoying

#

I learn stuff

#

it's appreciated

astral hinge
#

well I still don't want to be the smug "this problem you're having would be trivial to solve if you had THIS c++ feature 😏" guy

cloud rivet
#

I feel like I'm just as annoying when I talk about compile times

astral hinge
#

I'll be happy to express my thoughts within the confines of C

#

newer versions of C add great features like you showed

cloud rivet
#

yeah I'm excited to find uses for them

astral hinge
#

and they extended the cstdlib to have threads and sync primitives

#

so you don't have to use OS APIs for those anymore

cloud rivet
#

yes that's awesome, I just used those win32 job things to save time, I need to rewrite it in C

astral hinge
#

are you using #embed yet?

cloud rivet
#

I was kind of experimenting with how mt might improve my software rasterizer at the time

#

no I am not using embed right now, I hope to have live reload for my shaders and files and stuff I think

astral hinge
#

oh yeah, that will make it harder to reload stuff

true moon
#

Yeah shader hot reload messes stuff like that up

#

it's also a pain when you are using an API with an external shader compiler

#

I'm sure it's not that bad I've never tried

#

with GL it's just trivial since you literally just load the shader again as you would on init

astral hinge
#

I'm using glslang's api so I can reload shaders as simply as one would in opengl

cloud rivet
#

I had shader reload in rosy, it's not hard

astral hinge
#

it has a C API btw

cloud rivet
#

well it wasn't hard for shader objects I guess

#

I guess it's not hard for graphics pipeline either

#

I just have to recreate it the way I was recreating the SO

#

I don't use SO anymore

#

they're dumb

#

it almost gives you nothing, you still have to maintain the entire graphics pipeline state, and you still have to bind something, the shader objects (as opposed to the graphics pipeline) and you still need a pipeline layout anyway

#

write a couple of helper functions for a graphics pipeline and it's same amount of effort to change whatever you want

solid grove
#

afaik shader objects were something nintendo mostly championed as a way to make porting dx11-era code to vulkan easier

cloud rivet
#

that's a myth, that's the myth that got me to try vulkan

astral hinge
#

then it worked

cloud rivet
#

that with SO, vulkan was now just fancy opengl

astral hinge
#

it wasn't a myth, but rather a bait

cloud rivet
#

yeah a bait

#

a con

cloud rivet
#

that's what happens when you're a newb and you think people on discord who know a bit more than you are right about everything

#

by the time I realized they were wrong it was too late

#

:\

#

nintendo wrote the renderdoc SO support so I don't doubt that something like that is true I guess

#

I'm interested in the SO rework in progress

cloud rivet
#

I'm surprised nintendo gives a shit about dx11

#

it's not like they shipped windows games

#

I guess dx11-era would mean any apis from that time

solid grove
#

in fact they accidentally shipped one of these

#

this build path is used even more extensively for launch titles because the hardware isn't ready but development on the game cannot be held up by that

cloud rivet
#

kind of fun camera though

broken fog
broken fog
cloud rivet
#

It’s got some cinematic angles at times

#

Hard to see where you’re going though KEKW

cloud rivet
#

Feeling cute, might delete later

hushed creek
#

nice

cloud rivet
#

finally bought the book, I really need help lol

brisk chasm
#

a friend of mine sent the author bugfixes for his first edition 🙂

cloud rivet
#

that's a cool thing to do

brisk chasm
#

indeed, author was happy too

pseudo dock
#

Nice book!

cloud rivet
pseudo dock
#

Haha, I remember! Hopefully it ends up being useful

cloud rivet
#

indubitably

cloud rivet
#

I keep rewriting my camera, I think I have a good plan that makes sense in my head now though. I will just have the camera follow the player at some distance on a rail on the center of the track that's oriented along the track normal. it sounds just the easiest intead of some fancy camera that follows the player

hushed creek
#

the easiest camera is always the one that's parented to the player

#

but it's also the worst feeling

#

the secret to good cameras is always in the easings used when following the player and reacting to the action

#

but if you really want an easy camera parent it to the player

#

it will move wherever the player will move

#

when the player rotates, the camera rotates with it

cloud rivet
#

I don't have any sort of scene graph right now so there's no means by which I can parent anything

#

I'm not sure I'm going to have a scene graph for this game

#

your camera is really great

#

I'm taking notes

#

unless I add NPC skimmers to race against the only things that move are the player's skimmer and the camera

#

and the vehicle itself is just always going to be a static mesh

#

that's why I decided to make this game, it doesn't need a scene graph and it doesn't need textures or images

#

I'd have to make gltf parser, which requires writing a json parser, a png & jpg & exr decoder and basis universal compression 😅

#

I think though all those things would be easier than writing my own physics

#

which is what I'm doing now

#

since I could write tests for those things and then make the tests pass

#

and then it would just work

hushed creek
#

why write a gltf parser use assimp or the parser everyone else here uses #1019965526434394173

wraith urchin
#

Because Bjorn is a true frog

#

He loves NIH

hushed creek
cloud rivet
#

my only dependencies right now are win32 apis for window management/input/threads and vulkan headers

#

hoping to keep it that way

#

also this is written in C

#

I could have C++ deps with wrapping though

#

would be tough with highly templated libraries like gltf parsers are

brisk chasm
#

there is cgltf

cloud rivet
#

yes I used that with zig

#

it's very bad imo

solid grove
#

you could also write a python script for whatever DCC you use that exports data in a simple format for you to read

brisk chasm
#

why is it bad?

solid grove
#

and there are tools like compressonator which have prebuilt binaries you can run to make block compressed textures that don’t require any meaningful parsing to load, you just give the data to the GPU

cloud rivet
#

so I would have no idea what a particular mesh's actual integer index was in the gltf, especially if it didn't have a name

#

it's just allocating a bunch of memory with pointers to pointers

#

it was horrible to work with for even a trivial thing

#

my little enderman in blockens was parsed from a gltf with cgltf

broken fog
cloud rivet
#

the nice thing is I build all my own assets so I can just build a custom thing that just works for me, I'm never going to have to build a library that can work for anything and follows a spec to the letter

#

that goes for images too

#

I'm going to rely on win32 for audio probably

#

I'm not going to NIH audio

brisk chasm
#

famous last words

solid grove
#

I think windows has a built in midi api

bronze socket
#

yeah it does, I've played with it before

brisk chasm
#

it was recently reneweed even to support midi 2.0

bronze socket
#

even sent midi signals to my keyboard

brisk chasm
#

mmXXXX

#

and you can open and close your cd drives with it too hehe

cloud rivet
#

handmade hero uses win32 for audio iirc

#

but it used some legacy thing

#

I will look at that

bronze socket
#

pretty sure there is some default thing for playing audio in windows, I've seen it as one of the backends in soloud

broken fog
cloud rivet
#

it's not midi

#

it's real audio

bronze socket
#

yeah there's 100% a real audio thing

#

wav files and flac files are easy to parse yourself too

cloud rivet
#

midi lol

brisk chasm
wraith urchin
#

midi is fun

broken fog
#

oh i was learning programming by basically messing around with wondows apis and being an annoying little shit

bronze socket
#

real ones remember Beep()

broken fog
#

fuck yea

brisk chasm
#

BeepEx

#

PlaySound

broken fog
#

on winxp and older it used the pc speaker which was great because it meant you couldn't mute it froge_love

bronze socket
#

in high school C++ class I made battleship as a final project and used Beep() and Sleep() to play little tunes

broken fog
#

cue 12 year old me leaving the school library and 5 minutes later all the computers start playing shitty unpausable music

bronze socket
#

like when you sank a ship

brisk chasm
#

Sound and Sleep were my intro to actual programming in Turbo Pascal too

#

a friend of mine programmed Micheal Jackson's Moonwalker with it, funky color output too, before that i only fiddled with gw and qbasic

broken fog
#

of course i quickly learned how to make programs that didn't show on the taskbar or tray and gave them important looking exe names...

#

i was basically writing harmless but annoying malware lol

cloud rivet
#

oh maybe I'll make a beep in my game to start with, like when you reset and when you plummet off the track, just so I can have any audio at all

bronze socket
#

you should not use beep, it's awful

broken fog
#

should've continued down that path, maybe i had a bright future as a security researcher

bronze socket
#

even using the midi api is better

bronze socket
#

beep is global in the entire OS, so you can't stack them

#

I remember trying to use multithreading and even spawning subprocesses to try to play chords

brisk chasm
bronze socket
#

but I never could

broken fog
brisk chasm
#

you chordnt

brisk chasm
broken fog
#

fr, who knows maybe i can actually get into giraffics after uni

cloud rivet
#

you can't stop the beep is what I'm hearing

#

I think my users will love it

#

I can read their minds since it's just me

broken fog
#

every windows version since vista it just uses system audio iirc

#

most pcs don't even have the shitty post beep speaker anymore

cloud rivet
#

nice