#Fwog and co.

1 messages · Page 12 of 1

golden schooner
#

fair

#

hmm when i read it again it actually makes much more sense

long robin
#

Yeah I should remove dat

#

Wait

#

I keep it because of ImGui

golden schooner
#

my imgui is currently washed out with srgb enabled 🙂

shell inlet
#

that is normal

golden schooner
#

jakers isnt

shell inlet
#

that is abnormal

#

he might be using a custom imgui shader

long robin
#

I'm just rendering imgui with srgb off

shell inlet
#

how would that work

golden schooner
#

not even adhering to his own standards

long robin
#

Why would you render a gui with srgb on

golden schooner
#

shrimply glDisable(GL_FRAMEUFFER_SRGB)

shell inlet
#

is it a separate framebuffer? still, you are haiving a srgb swapchain

#

its gonna get wased out if you present it

golden schooner
#

you can enable/disable that thing whenever you like

shell inlet
#

but the scene is then also presented in linear

#

rendered image

long robin
#

You can switch it dynamically in gl

shell inlet
#

how does that work

long robin
#

It just makes the linear->srgb not happen when it's disabled

shell inlet
#

ok so it's applying transfer function on write then ok

#

actually ok that I think is how it should be

long robin
#

I presume imgui colors were authored in srgb, so it doesn't make sense to do the conversion

#

Only problem is that the color picker is screwed up, but that's because omar doesn't understand how sRGB works

shell inlet
#

that makes color picker use srgb values also

long robin
#

Yeah that's fine

shell inlet
#

unless you want linear

long robin
#

It's just the blending that's jacked up

shell inlet
#

when you use float vectors

#

for hdr

golden schooner
#

i was also sinking (in context of beginrendertoframebuffer) to only enable srgb, when a color attachment has a SRGBy format

shell inlet
#

should be per pixel if you are sane

#

it's using hsv color space iirc for picking

#

or hsl

long robin
#

I mean interpolation, my b

#

Not blending as in compositing

#

The problem is they interpolate between colors in srgb

shell inlet
#

tbh it's gonna appear more uniform like that I think

#

wait nope

#

only if black and white

long robin
#

It just means the colors look like poopoo

shell inlet
#

color gradients will get dark spots

#

srgb is nonlinear

#

ok that's also not right

#

should be fine but perceptually more linear than if you were to use linear colorspacce to generate gradients, and also should distribute precision uniformly

#

generating in lkinear and ten converting to srgb is going to compress blacks and expand whites

#

ok wait need to test my clain about orecision

#

if we generate gradient in srgb its gonna require no change before presentation and bits will remain uniformly distributed

#

sounds riht

#

generating gradient in linear will shift bits towards blacks and you might get bigger banding around whites

#

linear, srgb transfer function and difference

#

no wait it;s the opposite

#

hmmmmm or maybe not

#

yeah it's not

#

all I said is right I tried to plot bit shifts

#

got this but remembered that the transfer function is linear->srgb

#

so it's decoding

#

encoding would give oppsite effect it would compress the white

long robin
#

just don't do linear operations in a nonlinear encoding

#

shrimple as dat

long robin
#

you begin a fake command buffer when you start a render pass in fwog

#

so I just put all the stuff that can only be called in that scope in the Cmd namespace, mostly because I couldn't think of a better name

fiery sorrel
#

They disappeared so it k

#

So heres somethin @long robin

#

Like

#

Buffers need to have data passed in when constructed i think

#

gltf viewer just clears their buffres after construction

#

Nvm i need to look again to see i kinda frogor my point

long robin
#

frogor

wind trout
#

Quick fwog question: can it target GL 4 lower than 4.6?

long robin
#

I haven't tried, but you'll probably get errors if you make a sampler (since it uses anisotropic filtering) or try to use one of the Draw*IndirectCount commands

#

so 4.5 is probably 95% supported, while anything below will require an extension to enable DSA

#

and you'll need more extensions as you decrease the version

#

but tbf, most of the extensions you'd need are rather ubiquitous

wind trout
#

Interesting ok. The version I had in mind was 4.3, I need to check what all .4 and .5 added

long robin
#

4.3 might be doable with the right extensions

wind trout
#

That web page is great. Also I’m shocked how old 4.3 is, I probably shouldn’t be shocked but I am lol

long robin
#

I'd need these to support 4.3

  • ARB_buffer_storage
  • ARB_clear_texture (optional)
  • ARB_texture_barrier (optional)
  • ARB_direct_state_access
  • ARB_clip_control (optional)
  • ARB_texture_filter_anisotropic (optional)
  • ARB_indirect_parameters (optional)
#

the optional ones just mean that some features of fwog use these, but they aren't critical

#

so really just DSA and immutable storage are necessary to have

wind trout
#

Ok awesome makes sense

long robin
#

somehow I made my toctree have both bullets and numbers

#

it appeared after I added :numbered: to the toctree directive, but now it won't go away even after a rebuild nervous

shell inlet
#

it must be using some sort of caching

#

can't see any other reasons why it should remain after being deleted nervous

shell inlet
#

btw I have no time to work on fwog rip

fiery sorrel
#

i dont have the skill to work on fwog yet but i got the skill to work with fwog

shell inlet
#

I only wanted to add static probe GI sample

#

and maybe add pbr

long robin
#

okay.gif

#

the issue must be that these bullets only update when I add a new section (and I guess rebuilding the project doesn't clear the docs)

oak garden
#

“Creating a Fwog”

fiery sorrel
#

What is fwog usin to load gltf rn

long robin
long robin
fiery sorrel
#

Was considerin puttin @wind jasper 's fast gltf for my fwog game

wind jasper
#

hello

fiery sorrel
#

Hi

long robin
#

basil using all the gp discord projects at once

fiery sorrel
#

Would that be my contribution to the gp diacord

#

An actually finished non bikesheded game

#

That uses the gp projects i need

long robin
#

and alpha testing all of our libs at the same time KEKW

fiery sorrel
#

Yea

#

Dogfooder Tess

#

I think im gonna make a mouse clicking scene in fwog

#

And load a car

#

Later tonite

valid oriole
#

be sure to use zink to translate GL to vulkan and then test on radv

fiery sorrel
#

whats radv n zink

long robin
#

zink: gl-to-vulkan layer
radv: 🅱️ulkan driver for AMD geepeeyous

long robin
oak garden
#

wtf is that extension lol

#

are they trying to make this gl with extra steps

#

also what does this solve that dynamic state doesnt

long robin
#

I guess you can use this fake GL stuff to issue draws really quickly without compiling a bunch of stuff first, and in the background make actual optimized pipelines to swap in when they're done

oak garden
#

seems anti vulkan

long robin
#

but it all depends on how drivers implement this thing. It sounds familiar, doesn't it bleakekw

oak garden
fiery sorrel
#

hi @long robin how should I think about DYNAMIC_STORAGE

#

i want to create an index buffer and vertex buffer not declared on the Application startup

long robin
#

if set, you can call subdata on the buffer

#

otherwise you can't

fiery sorrel
#

but the constructors for the vertex buffers are like

#

'we need data now pwease'

#

so do I just make it dynamic storage and subdata my data later

long robin
#

if you want to upload data later, use a map flag or add the dynamic storage flag

fiery sorrel
#

yea

#

but the buffers cant be resized right?

#

so rn i got this

#

but I want to add to squarePos later (and squareIndices)

#

so do i just make those vertex buffer dynamic storage

#

and subdata those in without issue

#

here it says constant size

long robin
#

you could put the buffer in a std optional and delay its init

fiery sorrel
#

and i am like 'but why use big buffer if small buffers do trick'

fiery sorrel
long robin
#

You have to make a new one

#

You can just do buffer = Fwog::Buffer(...) to delete the old one

fiery sorrel
#

thats also another option yea

#

oh i can also just overload CreateInfo cant i

long robin
#

Not sure what you mean

fiery sorrel
#

well so the thing i am tryin to do here is

#

I cant pass in the vertices and indices to a constructor here

#

but I want the pos, colors and indices to be dynamically allocated at runtime before i construct my applciation

#

and ofc i wanna try n solve it without creating a separate constructor by copy and paste

long robin
#

ah, you're using the example framework?

fiery sorrel
#

ye

#

I know I dont need to

#

but its fun to try n figure out how to overcome this annoyance with the limitations here

long robin
#

I have idea

long robin
fiery sorrel
#

I can if they are constexpr

long robin
#

Because fwog isn't loaded?

fiery sorrel
#

but like

#

oh wait yea nvm im tired

#

I can use initalization list just like i was earlier

#

lmfao sorry

long robin
fiery sorrel
#

just so used to constructors doin stuff inside them

long robin
#

I think in my thing I shrimply put the buffers in std optional and load the vertices in the app constructor

long robin
#

And the way Fwog types work basically makes it a requirement

fiery sorrel
#

yea u forced me to re-learn to give a shit about ininitalizer list

#

instead of Init() function calling stuff

long robin
#

But std optional is a way to subvert that in a safe way

fiery sorrel
#

I remmebered as a baby C++

#

I had like

#

really long ininitalization lists

#

before switching to Init() lifestyle

#

or passing in CreateInfo type references

long robin
#

Go to RsmTechnique.cpp for a long initializer list

#

It's in examples/common

fiery sorrel
#

ive made longer

#

for really trivial shit

#

like a gameobject instance

#

was not very shrimple

#

but ty Jaker for teaching me about std::optional

#

now I no longer need to use pointers for that 'does this exist or not' logic

long robin
#

std::optional is based

#

C++23 adds std::expected which is baseder

fiery sorrel
#

whens C++29 gonna add std::based

oak garden
#

std::expected is the Result<T, E>type right

#

yes, cool

#

bleakkekw new gateway to UB

#

why is it designed this way bruh

long robin
#

operator* is like that for optional

#

I guess it's supposed to be the cheapest way to access the object

#

if you want the access to be checked, you use .value()

oak garden
#

yeah

#

doesnt feel like something that should be exposed to the api tbh

#

maybe im too influenced by rust nowadays

long robin
#

perchance

#

Think of it like operator[] and .at() for vectors and associative containers

oak garden
#

yeah this is kinda everywhere in c++ i guess

#

Actually rust has this too, but its obviously unsafe

long robin
#

Reminds me of the C Analysis Tool (aka cat) which checks for unsafe lines in C/C++ programs

oak garden
#

so static analysis

long robin
#

when you run cat foo.cpp it shows the unsafe lines

oak garden
#

sounds useful

#

does it just list all unchecked operator[] calls and dereferences?

long robin
oak garden
#

oh wait

#

that totally flew over my head

long robin
#

Gotteem

oak garden
#

i thought it was just a cleverly named tool lmao

long robin
#

I love cmake I love C++

#

I wonder if the cmake for tinygltf is fooked, since I've encountered this error before

#

or maybe I needed to set TINYGLTF_HEADER_ONLY

#

lol that fixed it

#

now cmake keeps splitting my copy commands into multiple invalid commands, probably because some path has a space in it or something

#

too bad the output log is unreadable

oak garden
#

VERBATIM

long robin
#

how do I enable that on windows/msbuild

#

I could only find a cmake verbose thing for makefiles

golden schooner
#

vs can debug cmake now

long robin
#

hrm

oak garden
#

add it in add_custom_command

long robin
#

btw this is my work pc, where something is fooked, preventing me from opening the local folder with VS (so I have to generate a VS solution instead)

oak garden
#

Use of VERBATIM is recommended as it enables correct behavior.
top kek

#

when correct behaviour is optional

long robin
#

lol I thought you misspelled verbose when you said that

#

I'll give it a shot

oak garden
long robin
#

hmm so do I put it like this, or does it go at the end
add_custom_target(copy_shaders ALL COMMAND VERBATIM ${CMAKE_COMMAND} -E copy_directory "${CMAKE_CURRENT_SOURCE_DIR}/shaders" "${CMAKE_CURRENT_BINARY_DIR}/shaders")

oak garden
#

i think thats fine

long robin
#

putting it at the end seems to not make it fail immediately

oak garden
#

oh wait not right after COMMAND tho

#

yeah end is what i used to do i think

long robin
#

holy frog it worked

oak garden
long robin
#

cmake is cursed

shell inlet
#

how to learn cmake

oak garden
#

yes

long robin
#

optional correct behavior bleakekw

oak garden
#

even worse backwards compatibility issues than cpp

long robin
#

even worse is that it's opt-in

oak garden
#

its also just really poorly documented

shell inlet
#

I tried to learn cmake but I could not figure it out because things kept behaving not as I expected

oak garden
#

thats intended behaviour for cmake

shell inlet
#

I only use it nowdays for programs with 1 file like this

cmake_minimum_required(VERSION 3.10)

# set the project name
project(HelloWorld)

# add the executable
add_executable(HelloWorld main.cpp)
long robin
#

it works if you just post your problems and hope that other people with tribal knowledge can see it

shell inlet
#

to compile and run it like this without loading visual studio crap

mkdir build
cd build
cmake ..
cmake --build . --config Release

"./Release/HelloWorld.exe"

pause
oak garden
#

ninja drakeyeah

shell inlet
oak garden
golden schooner
#

this ninja guy should be cancelled

shell inlet
#

what is ninja though

oak garden
#

its a build tool

golden schooner
#

build schystem

shell inlet
#

some build system

long robin
#

schmuild bystem

oak garden
#

pretty shrimple

#

I used it for a while, its quite nice

shell inlet
#

I've seen one project either use it or fail due to it not being present

golden schooner
#

the cmake plugins for vscode are also quite neat, voidy, if you are using vscode by any schance

shell inlet
#

was it librocket? 🤔

#

can't remember anymore

#

I used vscode on ubuntu

#

on my home pc I use visual studio but it's so slow, gets worse with each new edition

golden schooner
#

vscode is still super kwik here

shell inlet
#

yeah I used those

#

they are a staple for vscode and C++ I think

golden schooner
#

oui, when you do cmakeisms, absolutely

golden schooner
#

hmm

#

i wonder if TextureView descriptor should have swizzle facilities

#

so that i can display my depth texture in imgui as rrr rather than r

#

or perhaps some float texture as rgba8 somehow

#

display as in ImGui::Image

oak garden
#

thatd be useful if possible

#

i had to hack that into the imgui backend

golden schooner
#

hmm textureview descripor is probably the wrong location

#

i just provide my own ImGui::Image which has swizzle facilities

long robin
#

Mayhaps swizzling should be part of the sampler

shell inlet
#

if you don't have texture view yes

long robin
#

I'm pretty sure swizzling is part of the texture view in Vulkan, but I'll have to see what OpenGL does

golden schooner
#

im also winderong why you never reset the swizzle in the fwog examples, you probably never need the alpha channel anywhere, and therefore "ignore" the messed up schwizzle mask

long robin
#

If it's sampler state then it'll be easier to put it in the sampler

golden schooner
#

you change the texture parameter before displaying it in imgui

#

oui

long robin
#

Ye

golden schooner
#

but never set it back

long robin
#

It's indeed not part of the sampler

golden schooner
#

probably because of ... "you probably never need the alpha channel anywhere, and therefore "ignore" the messed up schwizzle mask "

long robin
#

Yeah

#

It's haccy

golden schooner
#

makos sensos

long robin
#

I'll have to add a swizzle thing to texture view

golden schooner
#

let me add an iShoe for you

long robin
#

index page no longer puts everything under F

golden schooner
#

its kinda strange that all those c++isms bleed through

#

overloaded operators etc

#

ah its just the members as well, nvm

fiery sorrel
#

are UBOs and SSBOs compulsory for Fwog. The examples use them and I see a BindImage, BindSampledImage, BindStorageBuffer and bind UniformBuffer

long robin
#

yes

fiery sorrel
#

nothing for binding variables tho

long robin
#

no uniform variables for you

fiery sorrel
#

im ok with that

long robin
#

well technically you can call glUniform* yourself

#

but I consider those to be stinky and not worthy of wrapping

fiery sorrel
#

use fwog for fun opengl cosplaying as vulkan

#

end up learnin how to gp better

long robin
#

vulkan cosplay

heavy cipher
#

meanwhile vulkan: uniforms are back

fiery sorrel
#

this doesn't return an error in compiling

#

altho its easy Skill Issue tho (this works as intended)

#

dunno if its worth doin something so the constructor goes 'yo urm... u sure?'

long robin
#

implicit conversion moment

#

let me fix the thingy

#

oh, it's not an implicit conversion issue

#

it's a GL issue

#

look at the constructors for Buffer

#

@fiery sorrel you're calling this constructor by providing one integer argument

    explicit Buffer(size_t size,
                    BufferStorageFlags storageFlags = BufferStorageFlag::NONE,
                    BufferMapFlags mapFlags = BufferMapFlag::NONE);
#

I can't do much there

fiery sorrel
#

yea

#

Just Skill Issue™️

#

and hope ppl arent careless ig

long robin
#

well it doesn't make much sense to make a buffer with no size

golden schooner
#

you shouldnt construct these things in the app's ctor

fiery sorrel
#

yea Jaker

golden schooner
#

"shouldnt"

fiery sorrel
#

smh my head

golden schooner
#

some loading function feels more sane for some reason

#

but i understand why you do all that in the ctor

long robin
#

I think it's fine to make some resources in the constructor (e.g., uniform buffers that never change size)

golden schooner
#

sure

#

as long as base.Application() inits all the things, context et al

fiery sorrel
#

for context those are example programs too

#

not like part of Fwog's engine proper

long robin
#

I could make a load function that just returns a massive object containing all the schtuff

#

but I won't

golden schooner
#

i didnt say anything

heavy cipher
#

the 2023 implicit enum conversion incident

long robin
#

mfw gl enums shrimplicitly convert to size_t 😔

heavy cipher
#

complicitly, one might say

#

btw just don't use the glnums

#

make strong versions instead

fiery sorrel
#

i dont think he does actually

long robin
#

correct

fiery sorrel
#

I made a typo with intellisense

long robin
#

fwog only uses strongly typed enums

fiery sorrel
#

so it seemed like a common possible mistake that can happen and I can see someone goin 'i have no triangle on screen how fix'

golden schooner
#

for the most parts

fiery sorrel
#

but mostly only noob tho

golden schooner
#

if you made a typo with intellisense, it shouldnt compile?

long robin
#

do you need me to make a strongly typed size type so you can't accidentally convert gl enums to sizes frogstare

fiery sorrel
#

i dont need it rn

golden schooner
#

: )

#

type safety > all

#

fwog-sc when

fiery sorrel
#

I just brought it up as like 'do u want this to remain as Skill Issue or actually find a way for a compiler to go 'wtf bro''

long robin
#

deccer the kind of froge to make color, direction, and bivector types

heavy cipher
#

but doesn't the example do the same thing thonk

fiery sorrel
#

no it doesnt

fiery sorrel
#

everythin glm in examples

long robin
golden schooner
#

this is fine

fiery sorrel
#

honestly if u say 'skill issue'

#

im ok with that

heavy cipher
#

ah i c

fiery sorrel
#

just dont write bad code

golden schooner
#

at the beginning of fwog you said you leave those kind of things open for the uninitiated

heavy cipher
#

fun tiems

long robin
#

I'm not sure what to do to prevent that conchfusion

golden schooner
#

not much you can do there, other than split it into 2 libs/nail it down with #defines

heavy cipher
#

detonate a small nuclear warhead to set off the nuclear annihilation of the human race

golden schooner
#

heh this is even better

heavy cipher
#

in minecraft

golden schooner
#

mmh

fiery sorrel
#

i think minecraft actually has threading now its just bottlenecked to only a single core rn right?

golden schooner
#

back to topic

fiery sorrel
#

yea deccer im makin car

#

im gonna load that boy in

golden schooner
#

otherwise we wont be getting any car game made with fwog anytime soon

fiery sorrel
#

i keep it shrimple a cube and two cylinders

golden schooner
#

cars usually have 4 wheels at least

long robin
#

long cylinders

golden schooner
#

fair

fiery sorrel
#

'why two cylinders and not four'

golden schooner
fiery sorrel
golden schooner
#

as soon as they accelerate they lose the back wheel, as soon as they break the lose the front one

fiery sorrel
#

perfection

#

dw its placeholder

#

actually i should add a cone to denoate forward

long robin
golden schooner
#

hehe

fiery sorrel
#

perfection

golden schooner
fiery sorrel
#

I am just keeping it super shrimple so i can use the gltf loader inside first

#

before I put in a more complrex placeholder

#

this is like reverse bikeshedding

golden schooner
fiery sorrel
#

oh yea i should put that as the next one

#

somethin like that

#

honestly i just too lazy to take out my mouse rn

heavy cipher
#

but yeah you could ship your own ogl header

long robin
#

I could

golden schooner
#

glog

#

oggl 😄

long robin
#

I ship glad/gl.h and give users the choice to replace it with their own header

#

good enuff 4 me

golden schooner
#

does it really make sense to use something else, other than glad these days?

long robin
#

probably not, but you never know what cursed setup people are running

golden schooner
#

those people prohabs cant even >=gl4.3

long robin
#

plus it was a trivial addition, so why not

golden schooner
#

but fair enough

heavy cipher
#

glug.h

long robin
#

grog.h

fiery sorrel
#

cmake noob question but is there a better alternative to including header files than

golden schooner
#

what was that oop-y bin. ah glbinding

#

yes

long robin
golden schooner
#

check the cmake template

fiery sorrel
#

why is "RsmTechinique" in quotations

#

but not sceneloader

golden schooner
#

too lazy to copy it from there

long robin
fiery sorrel
golden schooner
#

cmake template is inspired by various things, fwog is one of them

long robin
#

globbing is in fact what you want here, but I don't like it

#

you're free to use it though

golden schooner
#

ill should also get back to my shit 🙂

#

you keep me distracted

fiery sorrel
#

at least im not procrastinating on car :) @golden schooner

#

so that should make u happy right pleading_smiling

long robin
# fiery sorrel fuk

you want something like this

if (MSVC)
    target_compile_definitions(03_gltf_viewer PUBLIC STBI_MSC_SECURE_CRT)
endif()
fiery sorrel
#

yea I just saw that

#

and added it thinkin 'hmm this is the difference....'

#

cmake noob question but does this only copy if there is a difference

#

or does it do it every run

#

copying files every run is gonna be super cringe as the project scales so id need to adapt for that later on

#

but that'd be a bikeshed to worry about rn

heavy cipher
#

also you don't need to add h files

fiery sorrel
#

the examples have that

long robin
#

I like being unnecessarily exschplicit

fiery sorrel
#

shrimple

#

its prob just not in the right fi-

#

oh yea its named wrongly

#

imma eat a dinner

long robin
#

docs v1 are almost done btw

#

noicee 😄

#

I still can't remember if there is an algorithm that uses logic ops 😄

#

perhaps fwog's most pointless feature is supporting those

golden schooner
#

we established that there is none

#

logic ops deactivate blending as well

long robin
#

I thought there were some ancient programs that used em for something

golden schooner
#

yes

#

martty mentioned some 🇳🇮🇨🇭🇮🇸m

long robin
#

hmm I think it was a voxelization program

#

but these days there are probably better techniques

#

also I bet they are used in cad apps for something obscure, as usual

golden schooner
#

wouldnt surprise me neither

#

mayhaps try a github code search, if something other than 230948398573987th variant of gl.h comes up there might be a use

long robin
#

page 5 and so far I've only seen wrappers

#

hmm I found some editors using glLogicOp for some things

golden schooner
#

magnum renderer has it too but doesnt use it anywhere

long robin
#

I bet minecraft uses glLogicOp to draw the xor'd crosshair

golden schooner
#

scummvm might be using it

#

and nintendo 3ds simulator citra

#

mobile also doesnt have it

#

"I told you how to do it. Just use glLogicOp the same way we use glBlendFunc etc, don't put stuff in the shader." random comment from a psp simulator issue

long robin
#

hmm, you can also get the minecraft crosshair by drawing a white thing and subtracting the dst color

#

using just blending

golden schooner
#

no need to support logicop until someone (other than martty) opens a ticket, id say

long robin
#

too late, it's already added bleakekw

golden schooner
#

"Won't Fix" ;P

fiery sorrel
#

hell yea

#

fwog is so chill to use

oak garden
#

copyrighted for 100 years

#

ill be waiting

heavy cipher
wind trout
#

How’s the documentation coming along?

long robin
#

I'll probably push it tomorrow

#

Tired rn so I'm gonna schlepp

golden schooner
#

gn8 : )

long robin
#

ah actually that one seems easy

#

the build status one seems a bit more opaque, but I think I can reverse engineer the one vuk is using hehe

heavy cipher
#

CI passing badge but it is actually using the vuk repo bleakekw

long robin
#

I know that's not the case because my CI is failing and the badge shows that bleakekw

#

though I'm busy trying to figure out why gcc doesn't want to compile this
return *new (this) Fence(std::move(old));

#

it never had a problem with my texture move assign operator that does the exact same thing frogstare

#

I have to include <new> to use placement new bleakekw (and I guess any other version of global new if I want to be 100% correct)

stray warren
oak garden
#

Creating a fwog is in frogeheart

long robin
#

the build has passed mashallah

#

now I can schleep while deccer and basil can bikeshed the contents of the docs

rugged notch
long robin
#

global new is defined in <new>

#

but most compilers seem to make it available even without that header (except gcc doesn't make placement new available)

heavy cipher
#

gnomes

fiery sorrel
wind trout
#

Fwog’s looking pretty good

golden schooner
rugged notch
#

Pamplemousse

golden schooner
#

🇵🇦 🇲🇵 🇱 🇪 🇲🇴 🇺🇸 🇸🇪

#

oops 😄

long robin
#

I like seeing these exotic flags

golden schooner
#

🇲🇪 🇹🇴 🇴

long robin
#

Idk what the mp and mo flags are though

#

Ah

#

🇲🇵 is northern Mariana islands

#

I'm having trouble googling 🇲🇴

#

Macau 🙂

golden schooner
#

: )

long robin
#

@fiery sorrel how would you feel if the gl header wasn't leaked

fiery sorrel
#

Itd be neat if i had to manually include it if i wanna do stuff outside limitations of Fwog

long robin
#

then it would be harder to make the mistake you did

fiery sorrel
#

Yea. I was able to spot that mistake super fast because i knew what i was doing

#

But i thought abt the "where triangle" logl newbies

long robin
#

making the gl header not leak should be an easy change

#

I can also add some convenience features like vuk's dispatch_invocations (which automatically rounds up to the next workgroup)

shell inlet
#

yes

long robin
#

ok pushed DispatchInvocations and fwog no longer leaks GL headers

#

rip CI failed

#

fixed

#

at some point I ought to use semantic versioning

golden schooner
#

jaker bending to deccer's will ideas?

long robin
#

mayhap

golden schooner
#

who've would've thought've

long robin
#

problem is that I make breaking changes so often, the major version would be in the hundreds

golden schooner
#

you can tie versions to releases which you manually trigger

#

doesnt have to be a release every time you commit/push

long robin
#

ye but semver.org says that releases with breaking changes should increment the major version

#

hmm

#

I guess I could release version 0.x.x now, then make 1.x.x when I'm happy 😄

#

feels like unnecessary bookkeeping until I have more than one actual user

golden schooner
#

ye

#

thats fine

long robin
#

the idea of having a version number is cool, but the reality is pain bleakekw

golden schooner
#

you could however treat it as an exercise with githubactions and how that versionism work

#

and its kinda also quite shrimple 🙂

#

you have a ci.yml and a cd.yml or build.yml and release.yml - the former just builds your things and you can have your builds/tests ok badge if you wanted, and whenever you trigger a release, you create/selectexistingtag tag, and from that tag a version is built

long robin
#

hmm I thought the point is to not automate it

#

that I can tag a commit as version x.x.x when I'm happy

golden schooner
#

or you dont release anything, and shrimply tag commits, ye

#

then people can submodule/fetchcontent from that specific one

#

rather than encouraging people to download source.tar for version xxx

#

and you may or may not create releases still where you can nicely list the changes since last version

long robin
#

I was thinking about that

#

would be nice to automate that to some degree

golden schooner
#

either hand written, or you let it auto generate one from all commit messages inbetween the 2 releases

#

(there is a button for that when you create a release)

long robin
#

I'd want to autogenerate it, but then remove the useless stuff (e.g., changes to ex🦐les)

#

heh the last time I used releases was 6 months ago

golden schooner
#

when you properly write commit messages, you could prefix those or tag them somehow

long robin
#

it was for ldjam, and I was in a delirious state, so I forgor everything

golden schooner
#

exshrimple1: fixed imgui button or whatever

#

and when you see the autoigenerated list of commits, you shrimply remove those with the prefix/tags you dont've want've them've to've be've in've there've

#

tiny manual labour, not worth the automation i guess, since you wont be releasing 24 times a day

long robin
#

I could use major version 0 and proceed with semantic versioning

#

just making releases occasionally when new features have accumulated

golden schooner
#

yep

#

technically, any version is fine. (i dont mean different versioning schemes)

#

fwog provides a good foundation already, therefore could also technically be a 1.x

#

it could also attract more people, potentially, because they could see/think "ah 1.x already, not some 0.0.0.1-alpha"

long robin
#

heh

#

I make breaking changes too frequently to want a 1.x.x release

#

fwog 2 would be next week

golden schooner
#

then just increment the version as needed

#

there is no need to keep the major version artificially "low"

long robin
#

if I'm following semver, then major version 0 is reserved for rapid iteration

golden schooner
#

and people can clearly still grab any version before if they wish

#

that would mean fwog 2 starts from 0.0.0.0 again

#

and be treated as a complete different project/product

long robin
#

version 0.x tells people that things will break frequently, which is true

golden schooner
#

yes yes, im aware 🙂

long robin
golden schooner
#

i figured

long robin
#

the 2 just means it has breaking changes from 1

golden schooner
#

but then there cant be no 0.x technically speaking although you "rapidly prototype for a major version 2"

long robin
#

smh just read the link I sent 😄

golden schooner
#

nah ill just be quiet

long robin
#

How should I deal with revisions in the 0.y.z initial development phase?
The simplest thing to do is start your initial development release at 0.1.0 and then increment the minor version for each subsequent release.

How do I know when to release 1.0.0?
If your software is being used in production, it should probably already be 1.0.0. If you have a stable API on which users have come to depend, you should be 1.0.0. If you’re worrying a lot about backwards compatibility, you should probably already be 1.0.0.

Doesn’t this discourage rapid development and fast iteration?
Major version zero is all about rapid development. If you’re changing the API every day you should either still be in version 0.y.z or on a separate development branch working on the next major version.

golden schooner
#

yes

#

basil will 🇧🇪 the first 🇹🇴 use 🇮🇹 🇮🇳 production 😛

oak garden
#

hey my flag is in there

#

im learning all these new flags thanks to deccer

long robin
golden schooner
#

🇩🇪 🇨🇨 🇪🇷 😄

oak garden
#

hint: its the same country as a certain mvp in this server

golden schooner
#

waffle

oak garden
#

aye

golden schooner
#

hehe

#

pengu el beljeek

oak garden
#

im from the dutch speaking part though :P

golden schooner
#

flandern?

oak garden
#

yep

#

is that what its called in german

golden schooner
#

the cheesemunchers corner of beljeekistan 😄

oak garden
#

quite appropriate that it starts with switzerland

long robin
#

deccer with the assist

golden schooner
#

were a good team

long robin
#

now I gotta look up all these flags

#

🇨🇨: The Cocos (Keeling) Islands
🇪🇷: Eritrea
🇲🇺: Mauritius (my beloved)
🇳🇨: New Caledonia
🇪🇹: Ethiopia

wind trout
#

I need to learn how to read deccer flag speak

golden schooner
#

isle of man's (smol island between ireland and gb) flag looks also quite cool

#

🇮🇲

oak garden
#

That’s pretty cool ye

golden schooner
#

turning into a vexillologist here XD

oak garden
#

Irl flag collection when

golden schooner
#

i gave all mine away some years ago

#

collected flags from countries ive visited

#

wasnt a lot anyway

#

you might have an actual chance to get a flag from every country, if you just contact all embassies in your and surrounding countries 🙂 or the countries themselves

oak garden
#

heh that actually sounds doable lol

#

i dont think theyd pay for shipping though

#

so it gets increasingly expensive with the distance

golden schooner
#

youve shouldntve worryve aboutve thatve

rugged notch
# golden schooner 🇮🇲

Funnily enough the emblem of Sicily, the trinacria, is also this but with a head added in the middle for comedic effect

golden schooner
#

reminds me of a character in vampire survivors

#

haha it looks exactly like that

long robin
#

I haven't played in so long that I've no clue who that is

golden schooner
#

trinacria one of the bosses

#

12th or 14th a new DLC is going to be released for VS

long robin
#

Lol there's so much content I haven't seen

#

I remember when there were like 4 maps

#

Last time I played was around the time they added the bone zone

daring surge
#

da bone zone

golden schooner
#

🇧🇴 🇳🇪 🇿 🇴 🇳🇪

#

i still miss 2 secret characters : > other than that i have every secret/achievement

rugged notch
#

Rip 🇧🇴 🇿 🇴

long robin
#

texture swizzling pushed

#

still gotta finish adding it to the ex🦐les, but it at least appears to work for imgui in one of them

golden schooner
#

i just saw 🙂

#

my queschin still remains tho

#

why do we gltexparameter the schwizzle, but never unschwizzle

#

is this not some sort of global state per texture

#

affecting shaders etc as well

long robin
#

I dunno what you mean

#

The swizzle is per texture. That's why you set it in the texture view create info

#

Then you can make as many different swizzlings as you want by making a texture view for each

golden schooner
#

yes its per texture

#

but does it also not affect how shaders sample from it

#

when you swizzle gb to r... and do a o_color = texture(s_tex, uv).rgb

#

arent .gb treated as red there too?

long robin
#

yes

golden schooner
#

thats what i mean

#

is that the right behaviour you want

long robin
#

That's in fact the only behavior I want (or at least care about in this case)

golden schooner
#

right now we want swizzle to make imgui show textures when alpha is 0 or depth texture become greyscale

#

ok for the latter part its irrelevant since depth is usually read from .r anyway, and .gb dont matter really

#

but if you have no alpha ... eh brb

long robin
#

Anyways, I make a view of the texture with alpha swizzled to 1, then I only use that for ImGui

#

ImGui backend then samples the texture in a shader, and alpha is 1 (instead of 0) so it appears

golden schooner
#

eh sorry

long robin
#

The swizzled view is not used anywhere else

golden schooner
#

ah

#

thats the clue

#

i forgot about textureviews, although i just saw the code

#

you create the view from the actual texture, and just swizzel the view, not the actual texture

long robin
#

I didn't push the example code that calls it yet, btw

golden schooner
#

if you dont use textureviews, but raw textures

#

and you swizzle your fbo color attachment 2, which has rgba as well

long robin
#

I figured it only makes sense for views to be swizzleable

golden schooner
#

but doesnt use a for alpha but for lets say metalness, then you uold mess up the whole renderer, is what i meant to say

#

yeah

#

sorry for my weird rambling : )

long robin
#

Yeah I won't want to use the swizzled texture for actual rendering

#

Just for debugging in this case

#

Unrelated, but I feel like there are a bunch of bugs lurking in my texture view code

#

I haven't tried taking a view of a view for example

#

E.g., taking a view of mips 1-5, then a view of mips 2-3 of that (which should correspond to mips 3-4 of the base texture, I think)

golden schooner
#

i found a bug in mine recently 😛

#

had min/numlayers and min/numlevels schwapped

golden schooner
long robin
#

Yeah I gotta test it

#

My point is that it's untested, so idk if it's completely broken or not

golden schooner
#

fair

#

maybe render a scene with cubes, 1 per moplevel

#

then render 2 other cubes, next to the originals, showing those 2 views in action

long robin
#

Or perhaps even squares

golden schooner
#

mayhaps with a modified texture with distinct moplevel colors or text

long robin
#

Or I could press a button to switch the mip shown on a rectangle

golden schooner
#

ye

long robin
#

Then just display a big number in the mip

golden schooner
#

but its boring

long robin
#

Heh

golden schooner
#

a default scene thing would be kewl

#

for every example/demo

long robin
#

Hmm wdym

#

Like an example with all the examples?

golden schooner
#

when you open a starter project in UE you have a floor, some shrimple sky, shadows are going and basic pbriblisms do their thing

long robin
#

Ah

#

06_ue_renderer

golden schooner
#

😛

long robin
#

I feel like the gltf viewer is already attempting to be that

#

It just needs more PBRisms and clustered light cullingisms

golden schooner
#

its also super easy of me requesting these things

#

while i am struggling with shrimpler shit myself 😛

long robin
#

I'll update my prio list

#

secret article -> a touch of PBR and clustered lighting in gltf viewer -> galunga

golden schooner
#

you mean one thing leads to another? 😄

long robin
#

You could say that

long robin
#

If you knew, then you should've impersonated me and posted it for me

#

Like the April 1stisms you guys did 😄

golden schooner
#

but then i could'vent've played the dreddjiff.gif

long robin
#

couldn't've done it

golden schooner
#

how many times have you used schlepp and isms outside this discord since its introduction? 😄

long robin
#

heh not much I'm afraid

#

I say shrimple irl though 😄

golden schooner
#

hehe

wind trout
#

do you use Fwog irl a lot though?

long robin
#

I use it for all my graphics projects nowadays, so I guess yeah

wind trout
#

Oh true I guess I meant the word Fwog

long robin
#

Ah

#

I don't say that word much IRL because I don't talk to people about this hobby IRL 😔

wind trout
#

Oh no 😦

long robin
#

I talk about it with you guys plenty 🙂

golden schooner
#

"hey pa, did you know im working on this cool engine of mine, i called it fwog"

#

"holly frog, i didnt know you like frogs!"

long robin
#

The average person doesn't even know what a graphics API is

golden schooner
#

"damn right i do, hmmm mmmh showing favorite frog pic"

long robin
#

They might've heard of Vulkan or DirectX

oak garden
#

Whenever I tell my family what I do, my mother always asks "Has someone not done that before?"

long robin
#

My dad knew what physx was when I brought it up once

#

It shows up in splash screens and whatnot

golden schooner
#

your dad is a cool frog

#

does he code too? or know his way around in computerisms?

long robin
#

He's not a programmer of any sort

#

He's a PC gamer though

golden schooner
#

oi

#

my dad knows 0 about anything computer :S

long robin
#

Mine plays lots of TF2 and DoD:S 😄

golden schooner
#

i plaed dod alot too back when 😄

long robin
#

Sometimes I walk in and ask if he's winning

golden schooner
#

xD

#

and he hears it as "are you whining?" ?

long robin
#

Nah he's always at the top of the scoreboard

golden schooner
#

noice

#

time he gets to know the fwog 🙂

#

and mayhaps finds love in making games

long robin
#

I can hear him laughing from other rooms when he rekts some fools

wind trout
#

Fwog must be known

golden schooner
#

: D

#

imagine a DoD clone made with Fwog

long robin
#

Lol

golden schooner
#

on the back of the cd box you see a liddle pic of littlejaker and papa grinning into the camera 😄

#

with a little backstory

long robin
#

Heh

golden schooner
#

XD

long robin
#

But yeah he's interested in learning to code now that he's close to retirement

#

I sent him the website for my CS class where I learned C programming

golden schooner
#

thats cool

#

Jaker 1 is always welcome here lol

long robin
#

I'm trying

fiery sorrel
long robin
#

the camera is moveable already

#

press the grave accent key to toggle mouse lock

fiery sorrel
#

oh

#

y-yea i knew that

golden schooner
#

back to work basil 😄

fiery sorrel
#

Sleep*

golden schooner
#

by sunday i want to see some car driving and physics action 😉

long robin
#

I should do something like for rsm 2

#

my current filter tends to delete detail in corners

long robin
#

I'm creating and destroying the textures and their views at the same time, so idk what gives

#

it's a bit sus how the view remains corrupted while my cursor is just holding the resize bit, but not actually triggering resize events

#

then it suddenly becomes "uncorrupted" when I release click, even though no resize event happened (so the textures are still the same)

#

I'm gonna blame nvidia for this one

oak garden
#

nvidia moment

wind trout
#

How weird. Which gpu do you use?

long robin
long robin
#

the weird resizing behavior happens on AMD too nervous

#

at this point I just wanna say it's a windows or glfw quirk

shell inlet
#

inb4 happens on linux

fiery sorrel
#

did my task breakdown for Fwog Racing

#

yea i waited until now to start work fr fr smh

long robin
#

what's the bug?

#

it looks kinda laggy, but probably because 400 samples of unfiltered RSM is the default

#

I got the github issue btw, I'll reply there @fiery sorrel

fiery sorrel
#

oh its super minor u dont even have to fix it

#

It's the G-Buffer clear thing I wanted u to be aware of it in the example

long robin
#

it's actually not a bug

fiery sorrel
#

meant here

long robin
#

indeed

fiery sorrel
#

ah ok. The reply explaining what's going on there can still be helpful

long robin
#

reply made

fiery sorrel
#

oh that's helpful reply

#

thanks

#

oh no @long robin what have u done

#

using that word... that word that should not be said... summons the @robust bough

#

:p

long robin
#

which one is that in

fiery sorrel
#

02_deferred.cpp

long robin
#

ah

fiery sorrel
#

it was just for the gCubeVertices

#

I am just poking fun at caio's trigger

long robin
#

and the indices

#

I should make them both static and constexpr

fiery sorrel
#

im gonna do that yea. I am stealing ur cube primitives

#

because i dont want to get out paper to remember whose face has whose vertices

fiery sorrel
#

is Vulkan experience meant as a pre-req for fwog

#

The only way I knew to render lines was because I used Vulkan before and knew about the InputAssemblyState when creating the pipeline but there's no examples provided that shows how to use it otherwise.

robust bough
#

Global bad

#

No global

#

Take it back

long robin
#

it's not supposed to be a requirement, but I can see it being confusing have to put stuff in the pipeline

fiery sorrel
#

I will post an issue to describe the observation I made

long robin
#

now that there're docs, you can actually read them

fiery sorrel
#

tldr: one extra line of code in hello_triangle can also be a 'soft tutorial' for this concept I guess

#

because I only was able to figure out what to do because I already used Vulkan before

long robin
#

you can also look at pipeline.h to see what state is available to set

fiery sorrel
#

I knew to check there and follow the rabbit hole around pipeline stuff to do it

#

but only because like I said I knew Vulkan stuff already

#

in OpenGL people are used to setting the primitive in the draw command

long robin
#

ye, I'll update the example

#

bit too much implicit stuff in it atm

fiery sorrel
#

I mean yea they could see it from here

long robin
#

my faith in opengl users is low

shell inlet
#

understandable considering what you'd see in #opengl

long robin
#

I also realized I'm using spans (pointer + size) in some places where ranges (iterator + size) are a more correct abstraction, but idc tbh

fiery sorrel
#

there is no 'default depth texture' for the SwapChainRenderning stuff right?

#

If I want a depth buffer I have to use BeginRendering instead

long robin
#

there is a depth texture

#

you just can't read it because lul opengl

fiery sorrel
#

how do I write to it then

#

ive tried all three ops lol

#

and looked at the header and stuff but i dont get it

#

The examples use BeginRendering for depth buffer stuff

long robin
fiery sorrel
#

like yea I have to ue BeginRendering if I want these boys I think?

fiery sorrel
#

oh

#

but I didn't specify my attachmentloadop

long robin
#

the rendertoswapchain stuff just exposes rendering to the default fbo

fiery sorrel
#

ok so if I do that and then nothing shows up what am I missing

#

if I dont want to use BeginRendering() I mean

#

so like I thought its because the default swapchain doesnt seem to have a depth buffer so it'd always 'fail' the test or something

#

I dont see any place to attach the depth buffer to the default fbo

#

I will be using BeginRendering() anyways but I was just wondering if I was missing something in SwapchainRendering for a depth texture

long robin
#

there is already a depth buffer

#

assuming you got one from your windowing system

#

so you don't need to attach anything, it's just there

fiery sorrel
#

is there a tldr on how to use it with just 'BeginSwapchainRendering'

#

if not its ok I can look at the documentation

#

All examples use BeginRendering() to render to a texture and have a depth buffer attachment and then render that texture into SwapChain

#

oh I forgot to consider my rasterizationState

long robin
#

it's just like regular opengl, but different

#

BeginSwapchainRendering has an implicit color target and depth/stencil target

fiery sorrel
#

well in regular ogl I can just 'haha glDepthMask(gl_true) go brr'

heavy cipher
#

template<typename... Args> inline requires (sizeof...(Args)<=4) ClearColorValue(const Args &... args)
ah yes, dokumentation

fiery sorrel
#

ok I figured out how I was retarded

#

it was an OpenGL brain rot

#

I forgot to set a clear depth value. I noticed it through RenderDoc lol

#

I just thought it'd always be 1.0f by default idk why

#

wait i got an idea I can edit simple_scene.glb to get an easy ground for placeholder

#

genius

#

deforestation

shell inlet
fiery sorrel
#

its cool but im not at a deferred rendering skill level to full appreicate it yet

shell inlet
#

wack without occlusion?

fiery sorrel
#

but both it and the gltf_viewer are really good example scenes

shell inlet
#

if only we could find a good way to use rsm with specular back then it would be more epic

long robin
#

ray tracing sample when

shell inlet
#

this is the best I could manage but the sample count is a meme

shell inlet
#

use madmann's lib I'll assist you (when I finish my thesis lmao)

oak garden
#

GL_FWOG_ray_tracing

long robin
shell inlet
#

clustered volumeisms? frogepinkhappy 🔪 ?

long robin
#

that's also on da list

shell inlet
#

god I wish I could add a probe sample tho

#

I absolutely did not expect college to turn out as busy as it did

#

pure madness with how they require things way ahead of time because they optimize the diploma creation pipeline at the price of overworking staff and students

#

I'm not even supposed to have a definite thesis topic yet by schedule, but in reality I must have a draft the day after tomorrow

#

and I have 0% ready lmao

heavy cipher
#

EXT_diploma_objects soon

shell inlet
#

quickly grabbed my old project as the topic to write a paper on, fr productive leisure helps to move in life

golden schooner
#

let me try the resizing thing

#

🇹🇫 this is there again

fiery sorrel
#

the macro misread the & as &&

long robin
#

I saw dat

fiery sorrel
#

was such a stupid question LMFAO

long robin
#

it looked like you were asking what 1 was bleakekw

fiery sorrel
#

I was like 'how tfw this and conditional even work what?'

#

then I realized it was an &

long robin
#

in theory there will be more than one flag

#

it's future proofing

fiery sorrel
#

why sampler state constructed every frame

long robin
#

samplers are cached, so it's basically free

fiery sorrel
#

woah based

fiery sorrel
#

yea I confirmed @long robin

#

I think its becasue of

long robin
#

I don't get that error in my things for some reason

fiery sorrel
#

hold on did it disappear

#

when I created a fork just to test it out I can now compile my other project

long robin
#

weird

fiery sorrel
#

I still get some warnings but they aren't treated as errors

#

OH

#

I found out why

#

You commented out Werrors but not Wx

#

let me test if thats the case and if so i can make a pR

long robin
#

I only compile with msvc btw

#

I don't have werror for the other ones because the warning diverge too much I guess

#

The crt thing is fixed with a define

fiery sorrel
#

I think if Werrors is commented out, Wx should also be commented out

#

since that's just msvc's version of Werrors

long robin
#

maybe I'll try to enable werror again

#

the problem is that ci compiles for gcc 🐸

#

but yeah ideally everything should have werror or wx, but I only enable it for the platform I can quickly iterate on

#

also fwog's werror things shouldn't impact your project that includes it as a dependency frogstare

fiery sorrel
#

I wish there was 'Werror, Wx but only for my code not other libraries'

fiery sorrel
fiery sorrel
#

what is it

heavy cipher
#

system includes

long robin
#

Maybe my problem is that I'm using the wrong scope for the compile options

heavy cipher
#

wait

#

you are asking about the easy thing

#

just compile your thing with Wx

heavy cipher
#

that doesn't affect fwog

golden schooner
#

can you TLDR it basil?

heavy cipher
#

but i guess if you get warnings from fwog headers you still want system includes

fiery sorrel
#

ok so the tldr is @golden schooner

I tried to include Fwog into my project that was born from the Deccer CMake Template

golden schooner
#

that should be virtually the same

fiery sorrel
#

When I forked Fwog and comment out /Wx and used FetchContent for that

#

then suddenly I can compile again

golden schooner
#

i set warnings as error on the project level in my cmakeisms iirc

fiery sorrel
#

no but before I included Fwog it was fine

#

unless I removeed Werrors and forgor I did that

long robin
#

How are you including Fwog in the project

fiery sorrel
#

in which case it was prob W4 instead

golden schooner
#

was aout to ask the same

fiery sorrel
#

when in rome do as the romans

#

followed everythin like the rest

golden schooner
#

yes

fiery sorrel
#

So that fork does run

#

but if I change it back to Jaker's id prob get back the errors

golden schooner
#

in the 2nd you add teat warnings as errors

fiery sorrel
#

let me test and see

fiery sorrel
#

how

golden schooner
#

hmm still have headerfiles in tehre, should re 🇲🇴 🇻🇪 those

#

you are worse than me, you talk like a weasel with severe adhd

fiery sorrel
#

what does that mean

golden schooner
#

every other sentence its another topic 😄 or im just to slow to follow

long robin
#

You press enter instead of , or .

#

And that

fiery sorrel
#

i dont get it. I only talked about Fwog include FetchContent

golden schooner
#

hehe, weasel made me giggle

long robin
#

Smh trying to beat my message record