#Fwog and co.
1 messages Β· Page 19 of 1
By the way
I recently started using gltf-transform because instancing
You can ask it to deduplicate, prune and flatten the scene tree, making nodes reference the same mesh, without duplicating vertex data
It's pretty great, gltfpack and gltf-transform are a good combo
npm π©

oh god oh fr*ck
I'm tapping into the power of the one ring for the greater good of man
PS C:\Users\jakek> npm install --global @gltf-transform/cli
added 251 packages in 9s
is this the power of webdev
time to audit 251 packages to ensure I'm not susceptible to a supply chain attack
left-pad
this is so wrong
28 packages are looking for funding
is this also the power of webdev
ads in my terminal
installing npm just to install some other binary baked from js
I was only following orders
: (
violating the geneva conventions for gltf gains
whatever hell Jaker and Deccer are entering
I am so glad I am just watching on the sidelines
btw found a funny line in ARB_bindless_texture
(1) Could this have been specified as simply making the maximum number of
texture image units and image units arbitrarily large and then
indexing into an array of samplers or images?
RESOLVED: Perhaps, but this approach doesn't involve any arbitrarily
limits. Allowing the implementation to choose the GPU handle can avoid
the need for some kind of unit->address translation. It's also
beneficial for the GPU handles to be static.
yeup
RESOLVED: Perhaps, ... π
RESOLVED: :bleakkekw:
she boots π
hmm need to figure out again how you add content from marketplace heh
its been a while
tharrr she boots
it feels like school just got out or something, judging by recent posts in gp
Maybe it's the southern hemisphere kids
damn my linker misconception that memeable huh? π
you mustn't've seen't the crap in the other channels tonight
Yea I muted all the other channels as they can be distracting (altho today i got plenty of distracted)
I just live in community-content and #questions
spill some of the tea tho 
There's like a whole dance party going on downstairs so i cant focus on shot anyways
goblins will see you casting teleport and say "he can't afford a steed"
GP will see you redirect a question and say "there's too many channels"
alright im going in
#vulkan too
i dunno if i am much better than these clowns tbh
hmm looks like i have to clone ue's source to build the bloody launcher
I belong in the circus too
If a clown knows he's in the circus, is he really less of a clown than the others?
or does that make them even more of a clown for not stealing the tiny car to escape
maybe stealing the tiny car to escape would make the circusgoers laugh even more, like the truman show
you are never really free
good stuff
me after i get jaker to write 95% of my engine (I need help you see): cheers!
Al-Hamdiyah will help... for a price
i may be a clown but at least im not a help vampire
I am a help vampire
I need someone to do cluster area classification right now
Or I will implode and take GP down with me
practice some buddhism and learn to separate your needs from your wants
only then will you be truly free
Think of your needs like your inputs and your wants like your renderer
you gotta decouple them to achieve performance in life
buddah woulda coulda
Buddha vs Cuda who'd win
ROCm
bruh my brain is fried. I nearly tried putting the milk cap on a bag of cereal (this is fwog related I swear)
you've got bwain fwog
bro making a rendering api, doesn't even know the fwog is coming π
Jakerino
how many triangles is that scene you were exporting from UE
I need bigger scenes goddamnit
do you know of any humongous scenes
Moana Island
If only I could fit that in memory
or like render a bunch of instances of sponza
its not about how a big a scene is, its how you use it
epic
quite the clusterfuck that is wine/wine64/"prefix"/winetricks esync and fs hacks
summer GP
also did you ever figure out how to forward args to vsnprintf?
void log(OtherArgsAndWhatnot, const char* fmt, ...) {
va_list args;
va_start(args, fmt);
vfprintf(stderr, fmt, args);
va_end(args);
}
this is what works for me
if only msvc would've implemented format-checked user functions
The second arg for va_start is supposed to be the arg count I thought
yeah its a weird one tbf
https://en.cppreference.com/w/cpp/io/c/vfprintf
but sure enough that's how you see it used in vfprintf examples
@long robin do you have the vertexbufferless quad vertex shader?
yus
#version 460 core
layout(location = 0) out vec2 v_uv;
void main()
{
vec2 pos = vec2(gl_VertexID == 0, gl_VertexID == 2);
v_uv = pos.xy * 2.0;
gl_Position = vec4(pos * 4.0 - 1.0, 0.0, 1.0);
}
swap the magic numbers in the first line of main to make it ccw instead of cw
i think i was thinking of the cube π i probably could've derived this one meself
oh I have that juan too
#version 460 core
#extension GL_GOOGLE_include_directive : enable
#include "Common.h"
layout(location = 0) out uint v_drawID;
// 14-vertex CCW triangle strip
vec3 CreateCube(in uint vertexID)
{
uint b = 1 << vertexID;
return vec3((0x287a & b) != 0, (0x02af & b) != 0, (0x31e3 & b) != 0);
}
void main()
{
uint i = objectIndices.array[gl_BaseInstance + gl_InstanceID];
v_drawID = gl_BaseInstance + gl_InstanceID;
vec3 a_pos = CreateCube(gl_VertexID) - .5; // gl_VertexIndex for Vulkan
ObjectUniforms obj = objects[i];
a_pos *= boundingBoxes[i].halfExtent * 2.0 + 1e-1;
a_pos += boundingBoxes[i].offset;
vec3 position = (obj.model * vec4(a_pos, 1.0)).xyz;
gl_Position = globalUniforms.viewProj * vec4(position, 1.0);
}
uh
ignore all the non-important stuff (determining that is up to the reader)
you want the CreateCube line from main
oh I think that comment is wrong btw 
it's actually a 14-vertex strip
I render it like this
Fwog::Cmd::Draw(14, scene.meshes.size(), 0, 0);
Are you sure
yes I'm sure I render it like that
I renderdoc'd it and everything to ensure it's actually outputting a cube with 14 verts
I only noticed that 24 was too much when I noticed some weird artifacts when I was drawing the cubes as partially transparent
Jaker by the way
that being said, you only need an 8-vertex strip to draw the three faces that the camera can see
how do you want it
hmm like switching between lods at different distances
Like, gltfviewer v4
Yeah
at this point, I just need to make a whole new renderer instead of cramming a million features into the gltf """"example"""
it was already getting out of hand when I added reflective shadow maps to it
This gltfviewer has cough pulls list a lotta features
well it doesn't really have that many features, but definitely more than what's needed for a fwog usage example lol
I'll be sleepy for now
I expect a fully functional nanite-style lod reimplementation when I wake up
Good luck soldier
gn
with hypr-rx on π
oh shit saved
void main() {
float x = float((gl_VertexIndex & 1) << 2) - 1.0;
float y = float((gl_VertexIndex & 2) << 1) - 1.0;
gl_Position = vec4(x, y, 0.0, 1.0);
}
FST I have saved, got it somewhere here a while ago
marttys example is just mini_renderer.cpp
should'v've called it shrimple_renderer.cpp
mini renderer lets you go very far in complexity 
CreateCube is indexed however and I don't think you can be indexed without a buffer
clamplicated_renderer.cpp
it doesn't use an index buffer
actually wait it says it right there it's a triangle strip not a triangle list
I updated it to remove the misinfo about being 24 vertices
I count 16? before it stops
15 actually
assuming you count the last FFF
I never use triangle strip so I don't intuitively know how many you need
12 isn't enough
14 seems just right
lol 14 is how many non-false lines there are in your pic
makes sense
I printed 36 since thats how many I initially expected
I totally don't have a debug cube shader with 36 vec3 constants in an array π³
hmm do any of the parallel standard algorithms in C++ have guaranteed ordering, like if I do std::transform(std::execution::par, ...) into a container, I need the order to remain so the glTF indices don't become invalid
ok surely parallel execution policy won't change this
std::transform applies the given function to a range and stores the result in another range, keeping the original elements order and beginning at d_first.
I don't think std::transform even affects the order, it works in place per element
you can have it output to any iterator range
the exshrimples on cppreference just transform in-place though
what did you give me jaker

my raster occlusion culling vertex shader
oh that's my triangle
is it not working?
its not a quad π
yeee
worry not, I have a quad shader elsewhere
// vertices in [0, 1]
vec2 CreateQuad(in uint vertexID) // triangle fan
{
uint b = 1 << vertexID;
return vec2((0x3 & b) != 0, (0x9 & b) != 0);
}
vTexCoord = CreateQuad(gl_VertexID);
vec2 aPos = vTexCoord - 0.5;
I should've put the other code in a function called CreateTri to make it obvious that I gave you the wrong thing 
void misinfo(
btw I can't remember if this quad is ccw or cw, so you may have to swap the magic numbers
i may just not cull
wow that is like the worst grid ever concieved
martty hit the griddy
but thanks, quad be quaddin
Need a name for a Fwog renderer library... Pownd? Swamp? Tadpowle?
Bababoowey
use the power of unicode to call it πΈ
codename \U+1F438
huh
too much ext perhaps i tried to send
maybe your message contains a banned word by accident
no filters have been triggered and as an admin i am immune
clang also reports on the no overloads for emplace
upper one is gcc
also - unrelated - https://www.unrealengine.com/marketplace/en-US/product/brutalist-architecture-office
Wow these ue environments have been getting so good
The lighting does all the work here, because the asset quality is awful
Also looks like a cheap copy of Control's offices
from wish
orange pipes with the concrete walls and random stuff thrown on the floor
but with bad reflections
The texture work here is abysmal. It's all the default stuff you get in Substance Painter, barely any kind of work, it's just basic materials with too strong normal maps/roughness values.
https://cdn1.epicgames.com/ue/product/Screenshot/20-1920x1080-30341fa947c6952b8881bd9693d0622e.jpg?resize=1&w=1920
yeah I see what you mean
wait a sec, even the direction signs and the railings are literally the exact same as you see in control
someone got a little too inspired 
this is from this month's free ue assets : )
I was going to add "not worth the money" :p
Jaker, I am awaiting
I am weak habibi
wtf, this ain't c#
naughty
my asserts aren't triggering breakpoints 
ah, it's because the asserts were triggering on other threads due to using a parallel algorithm
Yeah, assumed it was something like that considering there is more than one message box. π
yeah look how dark the outline is in the middle lol
I still hate it that Discord doesn't have a "scroll to top/beginning" option for forum posts.
I have no idea what the original topic of this post was, I remember it being some engine project.
#1019779751600205955 message
#1019740157798273024 message
Whatever it was, it has morphed into everyone else's project, with Jaker mentoring us
JMentor
Now the question is, did you scroll all the way up to the top to get that link? π
I just searched "fwog" and sorted by oldest
Cheats unlocked.
Loader's lookin' solid. Where the deccer cubes at
I posted it long ago
My PC is already slep, I plan to fix the texture loading crash tomorrow
Haha, nice.
my man
"Remember the Cant."
the issue I had was kinda funky
but now it worky
let's see if the deccy cubies still workie
what was the boog?
I don't think these are the right ones
it's kinda hard to explain, partly because I don't fully understand it
the goblin processing unit was unhappy with the working conditions and tried to unionize
basically I had a bufferView with mimeType=ktx2, but the buffer got its data from a fastgltf::Vector (I guess because I used the flags to load buffers and images into vectors), which itself had a mimeType of GLBbuffer, and that caused my logic to fail to see that I was loading a ktx2 image
I discovered the fix by hovering stuff in the debugger until I saw something with the ktx2 mimetype 
Interesting, we could use goblins instead of meshlets, revolutionary
tl;dr idk what a mimetype is
what a terrible name for it tbh
Multipurpose Internet Mail Extensions (MIME)
Jakerone
suppose I have 100k meshlets and no debugger
how do I pick a very specific one
wdym "pick"
based solely on a pixel color
Let me explain, so I have this dumb group of meshlet right here
no, the answer is this one
Which is red, it should not be red
I want to look at its AABB but there are too many meshlets 
you could render fewer meshlets
why are they blue
They are colored based on their screen space area
and how does the classic assign-everything-a-color-and-readback strategy not work
It does work, it's just painful to setup, so I was hoping for a sort of "third eye" you might've had and told me "this is meshlet #58328"
uh
well you could hack some thing up in imgui which lets you select a range of meshlets to draw
then you can perform manual binary search by just fiddling with widgets, rather than having to implement an actual picking system
its not painful if you use renderdoc
I have never wished to use RenderDoc so hard in my life
are you using an unsupported ext
yes π
I think you already said that and I just have dementia
cring
kwite annoying how gltfpack will use texture transform if you don't put -noq
like bruh, that significantly changes how I need to handle stuff, much more so than mesh quantization
da cubicles are looking good still
that looks neat
switching from tinygltf to fastgltf be loike
noice
and no more nasty hacks to load ktx
rsm looks neat too
this little scene looks super neat as is
with sunlight and shadows et al
im jealous π
the cubes dont habe any pbrisms anyway π
you have iblisms too
indeed
what you are seeing here is advanced autoformatting
that doesnt even look bad at all
its just weird to see "greyed out" identifiers, that means to me they can be removed π
asset, image, view and vector
ah I just realized that formatting actually makes sense
color scheme should be adjusted for resharper c++isms
it just looks funny with buffer.data in a void by itself
why does it randomly switch to two spaces though :(
hehe
randomly?
ah the 2 space indent is ugly indeed
Autoformatting is a mistake for C++
like what's going on here
jaker swallowed the glsl formatting pill
here's a more biggerer picture of it
lambda galore
the editor just didn't add the lines in some places for some reason
can you properly step through with a debugger in this lambda hekk?
ye
I count 7 lambdas 
there's another lambda a few lines above the code in the pic too 
well that's just what it's like to use std::variant
I guess I could use get_if instead of a visitor
but tbqh the skeleton of this (3000 lambdas of allah) is copied from the fastgltf readme
I prefer to switch
Only visit in a template context
E.g:
template <typename... Ts>
struct ir::akl::hash<std::variant<Ts...>> {
using is_avalanching = void;
using is_transparent = void;
IR_NODISCARD constexpr auto operator ()(const std::variant<Ts...>& value) const noexcept -> std::size_t {
return std::visit([]<typename T>(const T& value) {
return ir::akl::hash<T>()(value);
}, value);
}
};
this visit is clean (sort of)
so you just switch on variant::index?
Either variant::index or my own tag
for example descriptor_type
I have variant<buffer_info, image_info, texel_buffer_info> but I also know the descriptor_type
So I can shrimply use that
Perhaps switch appeases the lack of match in C++ 
the thing I don't like about switching on the index is that it's not obvious what your cases are
why not use std::get_if or std::get
just chain some if statements
least degranged c++ programmer
i also prefer the if vhain with grt_if a lot
i also like that fastgltf is fastgltf:: and not fg:: like sometimes seen in sean's code
yeah it do be more readable without all the visit bs
I still had to help myself to a little lambda, as a treat
wdym now
no
hmm ok
yeah
it's nice when heavily nested code doesn't turn half your screen into whitespace though
while having a >30" widescreen monitor
I have multiple panes of code open simultaneously
usually .cpp on the left, .h on the right
i cant find that picture of that one of our frogs upgrading his desk thing
where i pointed that white space out already π
This is the way
I was gonna write some code today, but I got carried away by hours of color mismanagement in #off-topic-πΈ 
today was a terrible day to have trichromatic vision
Was the code you were going to write for my LOD system
I was thinking of doin some pbrisms in da gltf viewer
I think I should just make a separate project for a renderer tbh, then I can go ham on random features without worrying if it's a fit for fwog examples
then deccer's bewanted clustered light culling may finally make it in
do you hate LODs or sumthin
tbh I dunno where to start for automated lods without diving into a massive rabbit hole
is meshopt good at generating simplified meshes
I guess gltfpack has an option to decimate the mesh
yeah I've heard meshopt is pretty good at it
imo auto-LODing is a preprocessing helper tool for artists at best, you're gonna want them premade and given a manual look-over anyway
yeah my impression was that auto lod isn't good enough to not involve artists at all
too bad I'm not an artist
Nanite begs to differ 
nanite is built different fr
yeah just build nanite tbh its simpler
I am
100 hours writing code beats 1 hour in blender after all
yes
the lod strat of the base lod being way too high 
I have a secret weapon, if I can decipher this thing I will have unlimited power https://vcg.isti.cnr.it/~ponchio/download/ponchio_phd.pdf
I'm mainly interested in pbr and colorimetry atm
I have an even secreter weapon
But it's a 100 page long PhD thesis
I will wait for you to finish and look over your results
Progress has been steady tbh, I think I have reached the "state of the art triangle rendererβ’οΈ" that Unreal is describing in their slides
state of the art being: meshlet and 64-bit visbuffer driven
hybrid hardware/software raster is coming soonβ’οΈ
The utterly ridiculous part is LODs 
lustri my man
i wonder if its possible to slide into UE-people's DMs and exchange actual "nanite"esque work
either by sending them messages proactively somehow, or perchance by writing about it and spreading the link across the niverses
dont we all
And by secret access I mean: I linked my github to epic games 
you should write about your findings π
just spread misinfo on purpose and have them correct u
wouldnt surprise me that this could be the foot into many doors
Cunningham's Law moments.
Nanite doesn't actually rasterize triangles guys, they are deceiving you
They implemented Euclideon's unlimited detail in secret without telling anyone, justice for Euclideon
I never suggested asking questions by posting wrong answers. This is a misquote that disproves itself by propagating through the internet as Cunningham's Law.
erm sweaty, I think you mean Poe's law
the gpu cannt do 2d graphics
.ush is ΒΎ of kush, which they were probably smoking when they made that
its actually 55stri
stri stands for "sestertii"
What tools do you use to manage fwog docs?
schwinxs
even when the type is inferible, i think it's just easier to read left to right, like here, i'd prefer
- auto descPos = Fwog::VertexInputBindingDescription{
+ Fwog::VertexInputBindingDescription descPos = {
.location = 0,
.binding = 0,
.format = Fwog::Format::R32G32_FLOAT,
.offset = 0,
};```
I think the latter is just more familiar to most C and C++ devs
yes
I prefer the former since it makes it easier to read variable names
i was going to say that
huehue
but the thing is
people don't know your code, they don't even know if your variable names will be descriptive
the type is on the same line still 
yeah it's a dumb bikeshed pet peeve thing
you don't even have to scan horizontally to read the variable names 
same thing as me complaining about not using z-up so that i can't truncate my vec3's in one of the many cases that i work in only top down 
the shader variable names are useful to me, but the rest aren't
the "issue" is that the type names are really long, but yeah feel free to bikeshed
auto descPos = Fwog::VertexInputBindingDescription{
.location = 0,
.binding = 0,
.format = Fwog::Format::R32G32_FLOAT,
.offset = 0,
};
sometimes i wonder about using niche but relatively useful things in intro examples
cause it's genuinely a good way to expose it
maybe positionInputDesc is more descriptive
like this auto inputDescs = {descPos, descColor};
i did not realize you could auto here
initializer lists are lit
a magically blessed std:: type that has special integration with the language
I'm only disappointed that std::span has no initializer list constructor, so you cannot do SomeFuncThatExpectsASpan({1, 2, 3});
what is it called when you return a type as a reference so you can chain member calls on it?
builder pattern
it's interesting how similar that looks to named initializers sometimes
auto descPos = Fwog::VertexInputBindingDescription{
.location = 0,
.binding = 0,
.format = Fwog::Format::R32G32_FLOAT,
.offset = 0,
};
auto descPos = Fwog::VertexInputBindingDescription()
.location(0),
.binding(0),
.format(Fwog::Format::R32G32_FLOAT),
.offset(0);```
yeah they have subtle tradeoffs
like being able to put them in any order for a builder
having to implement the methods is the main downside for it imo π
i'd imagine perf might be a minor consideration? or can that be entirely optimized
yeah it should be trivially optimizable
but also you probably won't be making enough of these structs for it to be a perf concern
ye but that's the sort of thing that should stay consistent across a whole project imo
i might consider preferring the builders if i could do actual preprocessing
i.e. jai (assuming i understand what that language lets you do correctly)
idk jai except that it has nice compile time programming
jai lets you do preprocessing AFAIK
so you could add some tag to a type like HasBuilderFuncs
and you could write a little mini program that would implement builder functions, maybe for your public members
i do not know the exact details, considering i have not heard a word about the man or language since i left my last job where i got weekly updates from my manager π
was your manager a jblow fanatic or something lmao
gn my frog prince
ngl it's pretty pog that my state has a fwog
UNLIKE these two pet peeves, the entt documentation is a real issue 
Are you starting a new fwog project for that pbr viewer you mentioned?
you need to keep jaker on his toes, J
Yeah gotta keep checking on PBFwog
hehe
Maybe
maybe I will do it after all
keep ya eyes peeled
https://github.com/JuanDiegoMontoya/Frogfood
huh
If it doesn't use my rendering engine (which I totally did not copy from Unreal Engine) I'm not playing
jakek said like dogfooding
what could it mean
that you make something with fwog π
guess I have no choice but to do that
Amazing
What could this possibly be??
aka dogalaga
the graphics aren't advanced enough for that
ok then you have two choices
sad
either put an AR in a first person perspective
I'll revisit that when I feel like doing more networking bs
jaker made 2 already π
nah I'm just gonna make sponchza rendererer #12345
heh
except it will specialize in decker cubes and balls
M... Ruin C renderereererer #1
Well the overlord of all is Jaker
I would like to contribute, so I'll submit to your orders my lord
start a new GP meta
the jeepee meta is already bindlessisms+visbufferisms
I might consider visbuffer at least, but for now I'll start with basic deferred (by copying 03_gltf_viewer)
no i mean content, not the rendering side
with pbr and ibl
i haven't seen any teapots in a while
deferred = cring
clustered volume thingy, if viz biz is no option
can do bof
man this fucking unreal marketplace thing
you dont find shit there
and no indicator of stuff you own already
its too bad that baked lighting is the sketchfab meta
all those crappy webgl renderers don't have le epic gi like my thingy will
Wait so this is the pbfwog project? Thatβs awesome
Yeah, one day
ye it will be
pssht
deccer can you pin that image so I have something to look forward to in a few years
needs a better name than frogfood though
Do you intend to beat me to my Nanite race?
interesting
hehe I thought about putting something that frogs actually eat, but they were all lame things like bugs
hehe, they eat flies too
no, I'll leave that to you
Subdivide the shit out of it 
Tri Count: Assets range from 536 to 4826 Tris.
LODs: No
Number of Meshes: 46
DivDivide
holy crap 5000 tris 
so like 150k if instanced properly
does that actually matter for modern stuff
150k triangles?
no, instanced vs non, ignoring memory usage
thats when you upgraded to 128gb ram, and the Pro W7900
But that was because I was importing 1 billion (instanced) triangle scenes 
https://sketchfab.com/3d-models/base-yrs-25c68dc285aa42a7941f2cb7a2df5b3d
i like this model, too bad it is once again baked lighting!
My artstation: https://www.artstation.com/user-51871
Iβll be happy if you share your opinion about it! - Base YRS - Download Free 3D model by Egor Liashchuk (@egorliashchuk)
that looks neat indeed, kinda like the style of your game, in a future preset
this would also be a fun minimal test scene
@long robin when is the project starting I am impatient
I'm making the cmakelists rn
https://sketchfab.com/Mad_Lobster_Workshop/models they seem to have a bunch of neat assets
also make a new post for the new thing π
and tmorrow we make fwog build on loonix again
Where is this from? looks cool
git refrog
wow it looks just like 03_gltf_viewer
what would the numbers mean
resolution scale?
I think I need to unfuck the UI first and foremost
i believe the suggestion was made in jest
in reference to the version numbers, not the quality
and more of a troll-x UI element?
@golden schooner how difficult is it to use imgui docking
its not
cool
well, it depends on what you mean
rendering to a window can be kind of annoying actually
I'm already rendering to a texture
yeah you'll probably be fine
fortunately it's one of those things that once you plug in, you'll (probably) never have to touch again
i have no memory of what my root dockspace looks like, but i'm checking
ye, its quite alright
oh but you also need decent input code if you have like
first person cameras or whatever
hmm
nother good slider idea: index of person for camera
or it can force you to make a bunch of code less shit, if it happens to be
https://github.com/cajallen/spellbook/blob/main/src/editor/gui.cpp#L89
this is the root dockspace
what gerry said
really just this
ImGuiViewport* viewport = ImGui::GetMainViewport();
ImGui::SetNextWindowPos(viewport->Pos);
ImGui::SetNextWindowSize(viewport->Size);
ImGui::SetNextWindowViewport(viewport->ID);
ImGui::SetNextWindowBgAlpha(0.0f);
ImGuiWindowFlags window_flags = ImGuiWindowFlags_MenuBar | ImGuiWindowFlags_NoDocking;
window_flags |= ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove;
window_flags |= ImGuiWindowFlags_NoBringToFrontOnFocus | ImGuiWindowFlags_NoNavFocus;
ImGui::PushStyleVar(ImGuiStyleVar_WindowRounding, 0.0f);
ImGui::PushStyleVar(ImGuiStyleVar_WindowBorderSize, 0.0f);
ImGui::PushStyleVar(ImGuiStyleVar_WindowPadding, ImVec2(0.0f, 0.0f));
ImGui::Begin("DockSpace Demo", nullptr, window_flags);
ImGui::PopStyleVar(3);
ImGuiID dockspace_id = ImGui::GetID("Dockspace");
ImGuiDockNodeFlags dockspace_flags = ImGuiDockNodeFlags_PassthruCentralNode;
ImGui::DockSpace(dockspace_id, ImVec2(0.0f, 0.0f), dockspace_flags);
ImGui::End();```
then do all your windows
id for dockspace is not required, when you have just one
do I need all those PushStyleVar
yes
i dont use styles for the root window
i'm fairly certain i yoinked this from omar
this places a full-sized window at 0,0 and disables all of the stuff
so it's essentially invisible
I'm a wee confuzzled. When do I need to create actual OS windows?
just do this after ImGui::NewFrame
or does imgui do that for me via callbacks
ImGui.NewFrame();
ImGui.DockSpaceOverViewport(null, ImGuiDockNodeFlags.PassthruCentralNode);
...
thats not docking
oh you're saying for viewports
thats a different thing
ah
thats what i needed to enable docking though, inside the window, no external windows
i have viewports disabled since i don't find them very useful, so i'm not sure
for some reason I recall the docking exshrimples having separate windows (like, the docky bits are outside of the main window)
its very possible this could've been improved, so maybe my large block is outdated
do you want to support external windows?
no, that sounds hard
a lil bias innit
i've never found this useful in any program i've worked in
but at the same time, i have a coworker who uses like 3 monitors
ok yeah the feature is called multi-viewport
https://github.com/ocornut/imgui/issues/1542
well at least in unreal it could be useful
level editor on one window, blueprint/code on another
dis your coworker?
i would say it's that, but it's usually random windows
like a material library or an info panel, i think he just prefers windows over tabs lmao
i guess there are some people like that. i'm glad to not be one of them, though
there's spaces, tabs, and then this
separate windows is sometimes useful, generally speaking
i dont π
what do you think mister deccus
You have achieved sponza renderer #4629896
to hide that ugly dropdown-chevron-downarrowthingies-next-to-the-tab there is another flag to be set
this layout is more better imo
oh yeah the NoCollapse flag or whatnot
ye i wasnt able to decipher from my code which one it was
the name doesnt say what it is iirc
oh this is a different one
nocollapse means you cant collapse altogether
are you also going to render to a texture and show the world in an imgui window? or just in fb0
hmm the demo doesn't have the flag
just fb0 for now I guess
but to put it in a window would be more betterer
its in the style editor
sorry for conchfusing it with a flag, its a style
what's the var called
style.WindowMenuButtonPosition = ImGuiDir.None;
it wurked 
do you also want to add icons?
now I gotta get me one of them fancy fonts with all the icons
haha
can you post a pic of your thingy so I can rember
btw stuff is pushed to new repo
running it would require removing the line where I hardcoded the absolute path of a model to load though
plus I'm not doing anything interesting yet
epic
I'm afraid I won't be doing any bindlessisms since I like being able to use renderdoc
not epic
which means gpu-drivenisms are also epically nerfed π¦
Damn
so I'm essentially useless in this project 
I think I can still do gpu culling without any texture batching even
yeah
But le readback π¦
I'd have a bunch of MDIC calls instead
pushed to main branch still?
but texture arrays is an option. I'd just have to massage all incoming textures somehow
i was able to do it earlier, so you should be too π
?
you said you pushed the changes
ah
is that the latest commit
just c++20
try replacing the for and two ifs in FrameBufferCache with these
for (const auto& colorAttachment : renderInfo.colorAttachments)
{
attachments.colorAttachments.emplace_back(TextureProxy{
colorAttachment.texture.get().GetCreateInfo(),
detail::GetHandle(colorAttachment.texture),
});
}
if (renderInfo.depthAttachment)
{
attachments.depthAttachment.emplace(TextureProxy{
renderInfo.depthAttachment->texture.get().GetCreateInfo(),
detail::GetHandle(renderInfo.depthAttachment->texture),
});
}
if (renderInfo.stencilAttachment)
{
attachments.stencilAttachment.emplace(TextureProxy{
renderInfo.stencilAttachment->texture.get().GetCreateInfo(),
detail::GetHandle(renderInfo.stencilAttachment->texture),
});
}
trying to build with gcc12 first
should I add CI for newer GCC
perhaps
that fixes it
otherwise with gcc12 same problem
schtrange
and that gl.h stuff is also still present which is weird
nowhere do you include gl.h yourself
it's the order of glad and glfw includes
I'll add CI for GCC 13 I guess
didnt we have clang there too?
just gcc10 and 11 it seems
mayhaps we got rid of it again for some reason
but I mean clang is basically the same as gcc :^)
im not asking you to add it
it was never there I guess
https://github.com/JuanDiegoMontoya/Fwog/blame/main/.github/workflows/cmake.yml
ok I schlep now, π¬π³
13 for frogfood
πΉπ«
it's using the busted version of fwog
oh well, it won't matter once I update it
π¬π³ once again
perhaps frogfood doesnt build the fwog examples ;p
ye but the broken stuff I had you manually patch is used everywhere
C++ moment
rest my wallpaper man
That reminds me something, is that a public scene ?
san miguel cafe thingy perhaps?
its this, baked lighting unfortunately though https://sketchfab.com/3d-models/an-afternoon-in-a-persian-garden-b13afbaf1aae4f6aad03aaa081ce471e
MAKE SURE TO SET THE TEXTURE QUALITY TO HD. In your viewer select on Settings and set the texture quality to HD instead of SD to get the maximum resolution.
The day version of a persian garden scene I modeled for my fluid simulation in Unity. I made it with Blender and Substance, you can view my reference board here: https://www.pinterest.de/sh...
cute little scene
Thx !
It came to me in a dream that I could render the scene bindlessless style (but still gpu driven) if I did deferred texturing or visbuffer
@dapper gorge consider your employment offer unreneged
absolutely epic
duccus made this for me: #1128020727380054046
fwog compiles again btw
and we have to conditionally link tbb somehow
did we not address that already?
I thought you added a thingy for that in the cmake already
examples/cmakelists.txt
frogwood sounds like a place
Frogwood Place sounds expensive
it better be
it's after boardwalk and park place on the monopoly board, in a secret location
how do you call these white pavillon-esque wooden constructs you seein parks sometimes?
gazebo?
the fancy one is exactly what i had in mind
like a bikeshed
Off topic but on phone I just realized if you tap the top of the screen it jumps to the first post
My problems are finally solved
oh do you mind linking the top post from here and over in enginekit?
then i can pin them
#1019779751600205955 message
@long robin (sidenote, i just typed @fwog without thinking about it) about the multiplayer galaga, but unironically, how did that go?
thinking about tinkering around a bit with something with networking on the side
oh, that thread is still alive and actually provided the answer relatively recently
Yeah it's kinda in limbo
any thoughts on the fun/learning aspects of it? worth it for you or not?
I didn't get very far, but it was kind of fun while I was doing it
And definitely very informative
It's satisfying watching a second copy of the game correctly receive inputs from the first, much like rendering hello triangle is
I will say it's been very hard to make an architecture that supports networking. Perhaps that's a krill issue though
was the networking side just win32/std interacting?
I used enet because I didn't want to deal with socket bs
Just sending messages and whatnot
kk, ty
Sockets are not that hard. I have the basic building blocks ready but I have too many other things to do 
with the engine or with life? :P
I have time allocated for both.
Engine is more of a mess. Life is mostly simple enough.
i usually have like 5-10 hours a week to work on personal projects 
Yeah that time is limited
I am currently on vacation, but that time is mostly for "life"
I managed to make one 36kloc commit to erhe though 
ye i have 26k sloc lol
I deleted 20k+ lines, added 15k+ lines, according to git. A lot of search and replace
net -5k lines 
#1019965526434394173 message
meanwhile, fwog has 0 tests
but asserts
true, no need for tests in that case 
unit tests do make more sense for fastgltf
there are a few testable things in fwog
like CopyImageToBuffer and vice versa
could also test rendering in various ways, like making sure attachments are correctly written to in the right places, etc
could also make sure certain invalid behavior is caught by the asserts
yeah all the things where createXXXInfo is involved
and begin/endrenderin makes sense with graphics/compute isms
without any glXXX nonsense
it is pretty hard to test this stuff
not really
it only requires all akchual glCalls to be refactored out into an interface of sorts
then you can mock those functions during test (ie not invoke them at all, because they have been overrrrrridden by empty funcs)
but you can test your logic around them
I was thinking about testing actual functionality rather than API usage
which requires a driver of some sort
ah
perhaps one could implement something in mesa
where glXXX is just logging to some stringbuffer
which you can assert on
ah no you just said, actual funktschionality
ye like making sure CopyImageToBuffer doesn't fook up the format or something
id not test that
y not
id add validations as part of the program logic
and unit test those
image and buffer descriptor have all the info needed
and you made assumptions around those when implementing CopyImageToBuffer
why can't I unit test individual functions
i think the problem is the amount of setup required for a lot of test scenarios involving graphics
if that involves glGetImage/glGetBuffer then this could be done prohabs
creating a pipeline, resources, etc
out of curiosity, do you look back on any problem in recent past with the thought that unit tests would've helped with?
it just requires a bit more glue
idk 
its not about whether unit tests are useful or not
but I've had a lot of bugs, so they'd've probably helped at some point
especially for everything else, which isnt pure api calls
just like sean's thing earlier, where someone tried to load a model, but didnt provide a proper option, which lead to some nuh uh
I suffer from edge cases causing issues, and idk if unit tests could help with that
there are a lot of edges
you should use voxels then 
least broken OpenGL implementation
https://github.com/JuanDiegoMontoya/Fwog/issues/91
erroring because there isn't a newline after a line directive is lame
redundant fbo is meh
passing 0 for the size in glBindBufferRange also gives a debug message on my rx 5700 xt
hmm how should I "unbind" buffers then
hecc
GL_INVALID_VALUE is generated if size is less than or equal to zero, or if offset + size is greater than the value of GL_BUFFER_SIZE.
I guess I can make a dummy buffer with 1 byte of data in it
or maybe this
glBindBufferRange(GL_SHADER_STORAGE_BUFFER, index, 0, 0, 1);
I think it'll still error
[...] or if offset + size is greater than the value of GL_BUFFER_SIZE.
I'm going to presume intel is anal about this and will still error
perhaps @dire badge could try that kwikly, he has an intel xe at hand
other idea:
glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 0, 0);
hmm perchance
need someone on intel to test these
I think I'll be safe just binding a dummy buffer and no one has to test
basil also has one
what's a better interface for clearing buffers?
https://registry.khronos.org/OpenGL-Refpages/gl4/html/glClearBufferSubData.xhtml
https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkCmdFillBuffer.html
the gl one does format conversions and shit which is meh
it's also really easy to use it wrong
ok I'm convinced
which did you pick?
oppa vulkan style
pick the gl one, but limit extent of clear based on draw state and scissor (liberal interpretation of coordinates allowed)
its been a second since i looked at fwog, does Buffer know its format?
non't
hmm
basically no
i got it
but there is a TypedBuffer template which simplifies a couple things
then one could do xxxClear(buffer, offset, extent)
and format is inferred/taken from buffer->desc->format
you can't really set a struct layout and clear to that unfortunately
in gl, your largest "clear element" is basically vec4
hmm that explains why i fill vec4s too
in vulkan, the buffer is treated as being filled with uint32, and you set one value to clear to
we are in gl space though
yeah but the gl way is annoying with having different format sizes
simplifying it to this is nice
struct BufferClearInfo
{
uint64_t offset = 0;
uint64_t size = WHOLE_BUFFER;
uint32_t data = 0;
};
i was about to ask, whether you usually clear the whole buffer or rects in a buffer
rects 
talking about buffer buffers btw, not texture buffers (in the sense that opengl calls framebuffer attachments "buffers") π
fair, offset/size then
unrolled rects π
perchance provide 2 ways then
one clear clears the whole thing, the other provides an unrolled rect way
if you specify no parameters with {}, then it will clear the whole thing to 0
that sounds like idiomatic c++
the GL way of having "internal format" and "upload format/type" and type conversions is kinda icky
vulkan way is shrimple and easy to use correctly, which I likey
ill withdraw my commentary
here's an example of real usage
// Clear all the indirect draw fields to zero, then set the instance count to one (this way should be more efficient than a CPU-side buffer update)
meshletIndirectCommand->FillData({});
meshletIndirectCommand->FillData({
.offset = offsetof(Fwog::DrawIndexedIndirectCommand, instanceCount),
.size = sizeof(uint32_t),
.data = 1,
});
ok the part after the comma is a horse conch
heh
nein
fill commands are cheap because they actually happen on the device and don't require any sync/shadow copies with the host
i am ok with fill/clear calls, no questions asked
downside is that you are limited in how much data you can upload (4 bytes in vulkan, 16 bytes in gl), kinda like push constants
the {} is conchfusing, or is that how c++ frogs would make that interface
I'm using a parameter struct just for consistency, but yeah that's how you would default initialize one with maximum ease
WHOLE_BUFFER is 0 then
ah i get it
the field will be initialized to whatever I put in the struct definition
I'm also not saying this is necessarily the most idiomatic way, but it does seem decent as far as C++ ways go
I think default being "clear whole buffer to 0" is reasonable
ah i probably worded it weirdly
i didnt mean that you did some c++thing which makes no sense
i was wondering if thats how c++ frogs would akchually do/design such a thing (pass {} like that)
ill go back into my corner of the cave π
I just changed the function to have a default param so you can actually pass "nothing" π
: )
because ({}) is kinda weird
it do be looking funny
{} is a normal way to default init structs in other contexts, but yeah it do be kinda odd for params
lol
yeah, i am aware of that
I'm sure the idiomatic C# way would require 10x less bikeshedding to figure out
or maybe I'm underestimating the average C#acean's ability to 'shed
portfoilo π 
"The creator of Fwog is active and easy to collaborate with on a community that I am involved in" π
are you referring to "...easy to collaborate with..."?
hehe
that is clem's site btw
i know
i like the darker theme muh more than the one before
in c# alot of people would also just provide params
but then you end up with 3000 parameters of allah
not necessarily
and thats outrageous as well
either some nonsense like Create/Upload-isms
for the update unrolled rect way, or a complete different method for clearing the whole as is, without any param, other than the buffer
clear might just be part of the buffer construct as well, and not of context
eh, i like your way better
remember the buffer of theseus
my buffer API be looking like that fr


that's like my entire project size