Guild icon
DDraceNetwork
Development / developer
Development discussion. Logged to https://ddnet.tw/irclogs/ Connected with DDNet's IRC channel, Matrix room and GitHub repositories — IRC: #ddnet on Quakenet | Matrix: #ddnet-developer:matrix.org GitHub: https://github.com/ddnet
Between 2023-07-28 00:00:00Z and 2023-07-29 00:00:00Z
Avatar
how's this look for the ui? the text disappears & the list view occupies that space once again when finished
00:37
looks weird how it is but all i did was add that text block & pad for it lol the weird gap above was there before
Avatar
Avatar
Ewan
seems there's still a problem. loading the textures all at once creates a tremendous lag spike w/ my 2000 skins, i guess this should be expected but this is exactly the sort of thing i was trying to avoid. but instead of it happening in the loading screen, now it can potentially happen while in the game
How huge is the lag in milliseconds? Xd
01:02
we are talking like
01:02
15+ seconds on each of the threads
01:02
i have added a 10ms delay on the other thread for testing and it's pretty smooth, as much as i hate this it might have to be
Avatar
Wtf
Avatar
yea it just takes a sec for skins to fill in but with 2k that should be expected & with a normal user's rational amount of skins it'll be completely unproblematic
01:03
the average amount of time it takes the average user's pc to load the average amount of skins is still probably less than the time it would take to even join the game
01:03
with this 10ms
Avatar
Mh i dunno
01:04
I'd have expected multi threaded reading of 2k skins takes around let's say 200ms max
Avatar
Ok let's say a second
01:05
But not 15 seconds
Avatar
you know i just have 1 other thread for all the skins
01:05
not a pool
01:05
it's multithreaded in the sense that it's not on the main thread :D
Avatar
Oh so there isn't really an advantage for client loading
Avatar
my internet is shitting the bed
01:06
it takes that time off of the initial loading time
Avatar
Just for downloaded skins
01:06
it's for downloaded skins
Avatar
So u download 2k skins at once? Xd
01:07
That explains your favorite skins list xd
Avatar
the other thread reads the file data, decompresses the png, and prepares the CImageInfo for the main thread on a skin-by-skin basis, in the order they are returned by the OS's list directory mechanism
01:07
yea
01:07
oh my favorite skins list is all the worst ones
01:07
they are so funny
Avatar
Avatar
Ewan
the other thread reads the file data, decompresses the png, and prepares the CImageInfo for the main thread on a skin-by-skin basis, in the order they are returned by the OS's list directory mechanism
I see sounds good
Avatar
yea and then whenever the main thread gets a chance it uploads this CImageInfo to the gpu basically
01:08
it's a bit more complex than just that but most of the processing is done on the other thread
01:08
like for example the process of splitting up the image into parts is on the main thread still
01:08
but pretty inconsequential
Avatar
But the process takes 15 seconds.. but it creates no lag on the main thread, does it?
Avatar
not 15 seconds total, 15 seconds per turn of hogging the mutex
01:09
which usually happens 3 or 4 times lol
Avatar
Ok I would sleep lmao. I can't think rn
Avatar
the other thread's and the main thread's loops don't line up
01:10
i give them a chance to & eliminate lag by adding the delay on the other thread
01:10
or at least a chance for the main thread's loop to try and lock the mutex so it can do its thing often enough
01:11
i don't think i'm ready for review yet but i would appreciate some from you, specifically as it pertains to the graphics code because i'm kinda tapping into it an uncomfortable amount
Avatar
I'm not quite sure what u even trying with some second loop etc. xd The idea about skin loading sounds correct. But why don't u simply use the job engine for that. It is also a thread pool
01:20
That would speed the loading up
Avatar
I'm not quite sure what u even trying with some second loop etc. xd
what do you mean? it has to iterate on the files
01:20
and yeah i would have used the job engine if i knew about it
01:20
it's quite late for that
01:21
and having a bunch of threads doing disk work at once might speed things up but it would chew up the disk unnecessarily
01:21
a low and steady load like this is probably better
01:21
especially since it will matter pretty much 0 for most people
Avatar
Avatar
Ewan
a low and steady load like this is probably better
Mh on HDDs maybe
01:21
But I'm future human
01:21
I have ssd
Avatar
Avatar
Ewan
I'm not quite sure what u even trying with some second loop etc. xd
what do you mean? it has to iterate on the files
Yeah I guess I currently cannot imagine your implementation^^
01:22
So it's not even the main thread preparing the list of skins to load?
01:23
Or does it get the list and is like... Here we go
Avatar
main thread gives it the criteria and other thread gives it the textures
01:26
p much
01:26
but it's not quite so simple
01:26
you'd have to see it
Avatar
If we'd properly implement it, we'd need to use futures anyway
01:29
Blocking a while thread while reading the disk is probably not the best solution
01:29
Whole
Avatar

Checklist

  • [x] Tested the change ingame
  • [ ] Provided screenshots if it is a visual change
  • [ ] Tested in combination with possibly related configuration options
  • [ ] Written a unit test (especially base/) or added coverage to integration test
  • [ ] Considered possible null pointers and out of bounds array indexing
  • [ ] Changed no physics that affect existing maps
  • [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-ad...
Avatar
ws-client1 BOT 2023-07-28 07:38:57Z
<Jupstar> @Ryozuki FFR. What would not have happened this week if you would have used Rust instead of whatever you used? xd
Avatar
i use rust so idk
07:39
i have a theorical car exam in 1h xd
Avatar
ws-client1 BOT 2023-07-28 07:40:49Z
<Jupstar> wtf xd
07:40
<Jupstar> can u only drive with 21 in spain?
Avatar
no u can with 18
07:41
i just didnt get it before
07:42
xd
Avatar
ws-client1 BOT 2023-07-28 07:42:07Z
<Jupstar> future human you are
07:42
<Jupstar> no need to learn a skill you dont need
07:42
<Jupstar> ;)
Avatar
i never needed cuz barcelona metro is nice
Avatar
ws-client1 BOT 2023-07-28 07:42:50Z
<Jupstar> in germany cars are the holy grail
Avatar
does anyone know if it's possible to code a program that searches for specific coordinates of a select player in a demo and points towards it with a time stamp? (edited)
Avatar
ws-client1 BOT 2023-07-28 08:44:13Z
<Jupstar> possible: i guess so. easy: probably not
Avatar
Avatar
Ewan
how's this look for the ui? the text disappears & the list view occupies that space once again when finished
Do the skins appear gradually or all at once when the loading is finished? If they appear gradually, the loading indicator should be drawn as a listbox item. For now just render "Loading...", I already got the loading indicator covered.
Avatar
Avatar
ws-client1
<Jupstar> possible: i guess so. easy: probably not
what would i need for that?
08:52
to be clear i dont know anything about programming
Avatar
ws-client1 BOT 2023-07-28 08:59:03Z
<Jupstar> well without coding skills it's not really doable. you need to understand how the demo renderer uses snapshots.. how the position is calculated etc
08:59
<Jupstar> it's not trivial enough to explain it in 5 minutes xd
Avatar
Avatar
Iza
to be clear i dont know anything about programming
Some minimum knowledge about coding is probably required. You could try to modify the client to just stop demo playback when a specific player reaches a position that you specified (for simplificy with a config variable and not via UI). Then you can play the demo on fastest speed and it will stop at the position you are looking for. (edited)
Avatar
Avatar
Robyt3
Some minimum knowledge about coding is probably required. You could try to modify the client to just stop demo playback when a specific player reaches a position that you specified (for simplificy with a config variable and not via UI). Then you can play the demo on fastest speed and it will stop at the position you are looking for. (edited)
that doesn't sound tooo complicated.
09:02
do i have to know just the basics of c++ for that or more advanced stuff?
Avatar
Well, the basics of C++ should be enough, but you also need to find your way around in the DDNet source code
09:03
Seems like a good beginning project though
Avatar
yes it does
09:04
do you recommend any specific guide or topic where I can start off?
Avatar
alright thank you
Avatar
Avatar
Iza
does anyone know if it's possible to code a program that searches for specific coordinates of a select player in a demo and points towards it with a time stamp? (edited)
Might be a tad easier to extract it from the teehistorian files instead since they record positions directly too
Avatar
Avatar
Ewan
15+ seconds on each of the threads
I think theres a lot of people that get 10+ second lag from texture loading.
Avatar
chillerdragon BOT 2023-07-28 10:09:07Z
RUST FRIDAY
Avatar
Avatar
Learath2
Might be a tad easier to extract it from the teehistorian files instead since they record positions directly too
from my experience the teehistorian program does not playback the inputs very accurately
Avatar
The old code looked pretty weird. It checked for CFGFLAG_SERVER | CFGFLAG_GAME being set above, and then used the passed-in parameter to find the command. I think it'd be better to just look for CFGFLAG_GAME and then find the command using CFGFLAG_GAME.

Checklist

  • [ ] Tested the change ingame
  • [ ] Provided screenshots if it is a visual change
  • [ ] Tested in combination with possibly related configuration options
  • [ ] Written a unit test (especially base/) or added covera...
Avatar
Avatar
Iza
from my experience the teehistorian program does not playback the inputs very accurately
Not the demo generated by teehistorian2demo, the actual recorded teehistorian file. They are 100% accurate as with demos btw
Avatar
Avatar
Learath2
Not the demo generated by teehistorian2demo, the actual recorded teehistorian file. They are 100% accurate as with demos btw
where's that located? i'll have to come back to that after I gained some basic knowledge of c++
Avatar
exam done
10:24
i think i passed
Avatar
ws-client1 BOT 2023-07-28 10:24:40Z
<Jupstar> do you not get immidiate response?
10:24
<Jupstar> my exam took like 3 minutes and i directly got the result xd
10:24
<Jupstar> speedrun
Avatar
Avatar
Ewan
can we get cpp20 so i can do atomic<shared_ptr<T>> troll (edited)
you can do that before c++20 I believe
10:25
I think I do it in the logger
Avatar
idk they said at 6 today
10:25
i did it on a tactile computer xd
Avatar
Avatar
Iza
where's that located? i'll have to come back to that after I gained some basic knowledge of c++
Currently not available but we can provide them for you to test, and/or your tool can be added to the teehistorian tools available to mods online
Avatar
Avatar
Iza
do i have to know just the basics of c++ for that or more advanced stuff?
this looks like a pretty complicated problem. as a start, try compiling ddnet. then maybe add a chat command to the server that just prints something
Avatar
Avatar
Ryozuki
i did it on a tactile computer xd
what's a tactile computer?
Avatar
Avatar
heinrich5991
what's a tactile computer?
touchpad
10:30
my bad
10:30
xd
10:30
it made sense in my spanish mind
10:30
catalan*
10:30
xd
Avatar
Avatar
Ryozuki
exam done
What sort of exam?
Avatar
in spanish u say tactil
10:31
@Learath2 driver license
10:31
but the theorical one
10:31
not practical
Avatar
Bizarre that you don’t get immediate feedback on a computerized exam. I think I got mine within like 5 minutes
Avatar
Avatar
heinrich5991
this looks like a pretty complicated problem. as a start, try compiling ddnet. then maybe add a chat command to the server that just prints something
looks like i have to start at the very beginning then, that'll be fun
Avatar
@Robyt3 Shouldnt Shift + Right click be Shift + right click or even Shift + right-click?
Avatar
Avatar
marmare_314
@Robyt3 Shouldnt Shift + Right click be Shift + right click or even Shift + right-click?
right-click would be the most correct one, it should also be used for the tangent handles then
Avatar
c695fd7 Remove inverted round rectangle corner drawing - Robyt3 564a595 Merge pull request #6940 from Robyt3/Graphics-Rect-Remove-Inverted-Corners - heinrich5991
Avatar
62ee646 allow multiple selection in envelope editor - Marmare314 8b209f0 Merge pull request #6872 from Marmare314/envelope_contextmenu - Robyt3
Avatar
Avatar
Learath2
Bizarre that you don’t get immediate feedback on a computerized exam. I think I got mine within like 5 minutes
In those situations, I like to think that someone has to take your exam, print it on a piece of paper, evaluate it, digitize it back again, then it gets shown to you
Avatar
Avatar
Cipy29
In those situations, I like to think that someone has to take your exam, print it on a piece of paper, evaluate it, digitize it back again, then it gets shown to you
pepeW
Avatar
7069d74 Check for errors when reading and decompressing datafile data - Robyt3 8b0f317 Merge pull request #6939 from Robyt3/Datafile-Data-Decompress-Check - heinrich5991
Avatar
Avatar
Learath2
Bizarre that you don’t get immediate feedback on a computerized exam. I think I got mine within like 5 minutes
i wonder too, maybe its in case someone is detected cheating, to have a grace time
12:20
Avatar
f3353e8 improve offset adaption for envelope zoom - Marmare314 c237959 Merge pull request #6941 from Marmare314/zoom-adaption - Robyt3
Avatar
kinda sad that rust decided to let Drop take self as reference partial moving is really cool, and not depending on Default or Option can make sense too if i implement destroy (self) it would work, but ofc requires explicit call :/
Avatar
What would you have drop take instead? It makes sense to me that drop is moved to as the final "drain"
Avatar
i mean the Drop trait
13:33
i'd like it to take self as value
13:33
moved value
13:33
and it order to not drop again it has to do some compiler specific stuff xd
Avatar
Ah. It can't tho can it? I guess it could be moved to then moved back, but how is that better than a mutable reference?
13:34
(As in it can't take self)
13:35
Or hm, maybe it could work
Avatar
if i want to reuse resources i might want to move a member out fn destroy(self) { self.a.destroy(); self.b.destroy(); } where a and b also implement destroy(self)
Avatar
Why can't you do it with &mut self?
Avatar
if a and b want an explicit call i'd need a and b be inside Options
13:37
bcs i cannot move them
Avatar
When self drops, won't self.a and self.b also get dropped if a and b are owned by self?
Avatar
yes, but what if a and b carry some resource i want to manually free at some point it would require a Option
Avatar
Avatar
Jupstar ✪
kinda sad that rust decided to let Drop take self as reference partial moving is really cool, and not depending on Default or Option can make sense too if i implement destroy (self) it would work, but ofc requires explicit call :/
legacy decision. nowadays you'd probably give an option to take ManuallyDrop instead
13:38
perhaps there's an RFC for it
Avatar
Avatar
Jupstar ✪
yes, but what if a and b carry some resource i want to manually free at some point it would require a Option
And how would a moved value help with that? You'd still need the option when you free the resource in a and b, no?
Avatar
my problem is that i cannot move a and b out of a reference
13:40
&mut self
13:40
is Drop trait
Avatar
I'm just curious why one might need to move them
Avatar
bcs then the type does not require to implement Default
Avatar
because you e.g. want to call a hypothetical File::close which takes ownership of the File
13:43
you can wrap the thing into a ManuallyDrop if you want to @Jupstar ✪
13:43
requires some unsafe in handling though
Avatar
Avatar
heinrich5991
you can wrap the thing into a ManuallyDrop if you want to @Jupstar ✪
yeah, sadly i use it quite regulary, so i'm not sure about that 😄
Avatar
Avatar
heinrich5991
because you e.g. want to call a hypothetical File::close which takes ownership of the File
I see. Is this a common thing to have cleanup functions take final ownership?
Avatar
Avatar
Jupstar ✪
yeah, sadly i use it quite regulary, so i'm not sure about that 😄
no problem, ManuallyDrop derefs to its inner object
Avatar
Avatar
Learath2
I see. Is this a common thing to have cleanup functions take final ownership?
no, because of the problem @Jupstar ✪ mentions
Avatar
Avatar
heinrich5991
no problem, ManuallyDrop derefs to its inner object
but i'd have to store the wrapper in an object
Avatar
Avatar
Jupstar ✪
but i'd have to store the wrapper in an object
can you give a more complete example
13:44
?
Avatar
Fwiw, I'd have thought drop would indeed take final ownership. Curious decision that it doesnt
Avatar
the naive way to implement it doesn't work
Avatar
d964a3d handle big value ranges on envelope zoom reset - Marmare314 b33c9ca Merge pull request #6934 from Marmare314/zoom-reset-big-values - Robyt3
Avatar
Avatar
Learath2
Fwiw, I'd have thought drop would indeed take final ownership. Curious decision that it doesnt
because then, you'd have a destructor call at the end of the destructor
Avatar
Avatar
heinrich5991
can you give a more complete example
e.g. for resource tracking i use a Rc inside an index struct to make sure indices are cleanup properly it takes the index by moved value (so its defs not used anymore) and the Rc will 100% decrease in use count
13:47
stuff like that mostly
Avatar
fn drop(x: Struct) { // oops, implicit call to drop inserted }
Avatar
Avatar
Jupstar ✪
e.g. for resource tracking i use a Rc inside an index struct to make sure indices are cleanup properly it takes the index by moved value (so its defs not used anymore) and the Rc will 100% decrease in use count
I guess wrapping these in an option would sound the best
Avatar
Avatar
heinrich5991
because then, you'd have a destructor call at the end of the destructor
Hm, and I guess it's rather ugly to have no implicit drops in drop
Avatar
i dislike it
13:49
i like to think about programming as "it exists or you didnt want to create it in first place"
Avatar
do you only want to drop it in the destructor?
13:49
wait
13:49
the dropping of the Rcs already works
13:50
do you have some sort of manual cleanup function?
Avatar
yes
Avatar
Avatar
Learath2
Hm, and I guess it's rather ugly to have no implicit drops in drop
that's probably halting-problem complex. what do you do if self is moved somewhere else. what happens if another object of the same type is constructed in the destructor, conditionally? etc.
13:51
can you explain why there's a need for a manual cleanup function?
13:51
what happens if the destructor is called before the manual cleanup? resource leakage?
Avatar
rn it assumes resource leakage and panics
Avatar
Avatar
heinrich5991
that's probably halting-problem complex. what do you do if self is moved somewhere else. what happens if another object of the same type is constructed in the destructor, conditionally? etc.
Not allowed to move anymore drop is the final destination, no moving self out of drop
Avatar
that's bad; destructors can be called implicitly, e.g. when panicking
Avatar
Avatar
Jupstar ✪
rn it assumes resource leakage and panics
re this
13:52
e.g. when unwinding
Avatar
its a fatal error
Avatar
panic while panicking kills the process IIRC
Avatar
so abort
Avatar
ah
Avatar
Avatar
Learath2
Not allowed to move anymore drop is the final destination, no moving self out of drop
hmm. and struct fields only get dropped if they're not moved out. I guess this could work?
Avatar
Atleast that's what I'd explore if I were designing the language, but I do understand why the mutable borrow is what they went for, much saner
Avatar
I remember the discussions around this
Avatar
Avatar
Learath2
Atleast that's what I'd explore if I were designing the language, but I do understand why the mutable borrow is what they went for, much saner
I think this might have been something that wasn't proposed
13:55
can you give an example of such a cleanup function?
Avatar
Avatar
Learath2
Atleast that's what I'd explore if I were designing the language, but I do understand why the mutable borrow is what they went for, much saner
well sane vs convenience IMHO you also do fn new() -> Self
13:55
so it kinda would make sense to do the opposite of this
13:55
fn destroy(self)
Avatar
Not being able to have uninitialized stuff is pretty hard for me too. I wish I could have uninit stuff without maybeuninit and unsafe everywhere
Avatar
I thought we had a solution for you the other day?
13:56
you can have locally uninitialized variables without unsafe, as long as you only use them in paths after you initialize them
Avatar
Those resources will only ever be an Option while the struct is being constructed/deconstructed, so it's rather sadge to have unwrap everywhere
Avatar
@Learath2 you want them for stack allocations i assume?
Avatar
Avatar
heinrich5991
I thought we had a solution for you the other day?
Yeah there usually is a solution, it's just a bit hard for me to find them until I get more experience
Avatar
Avatar
Learath2
Those resources will only ever be an Option while the struct is being constructed/deconstructed, so it's rather sadge to have unwrap everywhere
if you want to have it for members, I think there are also solutions for that
Avatar
Avatar
Jupstar ✪
@Learath2 you want them for stack allocations i assume?
For any allocation, sometimes initializing a struct in one go is rather hard
Avatar
can you give an example?
Avatar
but if its not on the stack u can also use Vec
13:59
or other heap stuff
Avatar
It's usually that your program structure includes loops though which when/if you break them makes it simple again
Avatar
Avatar
heinrich5991
can you give an example?
E.g. the context I had a week or so ago, it had a loop so to initialize one struct I had to have already initialized the other and viceversa
14:00
Adding an extra layer of indirection and an init function fixed it but I still had to think more
Avatar
maybe u can solve the problem without this kind of "self"-depenency
Avatar
Self referential stuff just have to be eradicated in rust, atleast at my experience level
Avatar
Avatar
Jupstar ✪
maybe u can solve the problem without this kind of "self"-depenency
Yeah, it's just not how I'm used to thinking about my programs is all
Avatar
well for performance reasons it can make sense.. but then i'd maybe use unsafe anyway and point to whatever i reference
14:02
so maybe it does make sense xd
Avatar
It's just habit. Having convenient context pointers around just makes it easier for me, but it does lead to worse hierarchy
Avatar
yeah... i guess rust simply isnt the best option for prototyping xD
Avatar
I haven't written large applications from ground up in rust yet
14:04
the masterserver was very smooth though
Avatar
i have to say the ddnet stuff i wrote was mostly smooth too
Avatar
Like CComponent having a pointer to it's parent and the parent having a pointer to it. Technically you can structure that in another way with a message bus and stuff, but again it's just not what I'm used to. Hard to teach an old dog new tricks 😄
Avatar
Avatar
Learath2
Like CComponent having a pointer to it's parent and the parent having a pointer to it. Technically you can structure that in another way with a message bus and stuff, but again it's just not what I'm used to. Hard to teach an old dog new tricks 😄
that for example i gave up on
14:05
our Components are way too mighty
14:05
it makes it basically impossible with borrow checking, Rc, RefCell etc to stay sane
Avatar
Avatar
Jupstar ✪
kinda sad that rust decided to let Drop take self as reference partial moving is really cool, and not depending on Default or Option can make sense too if i implement destroy (self) it would work, but ofc requires explicit call :/
beware with drop and unsafe, panicking is often a cause of double frees in unsafe code
Avatar
Avatar
Ryozuki
beware with drop and unsafe, panicking is often a cause of double frees in unsafe code
im not using any unsafe xD
14:06
i didnt read convo
14:06
tldr?
Avatar
it doesnt exist
14:06
xd
14:07
i have to live with a wrapper or manual calls for now
14:07
but probably manual calls for now, since they at least take additional params
14:07
so i can save some Rcs
14:07
but sadly not forced ;~;
14:07
one can forget to call it
14:08
(i like non runtime checks)
Avatar
what you want are linear types, I think
14:08
rust doesn't have those (unfortunately?)
Avatar
Avatar
Jupstar ✪
it makes it basically impossible with borrow checking, Rc, RefCell etc to stay sane
Hm, I think I would just have the client have the only strong pointer and make the rest weak
Avatar
Avatar
heinrich5991
what you want are linear types, I think
yeah maybe i what i want isn't easy to have but since i cant have what i want in Drop, i also don't want to introduce Rc and RefCell (to allow automatical drops) so i'm kinda in a dilemma
Avatar
It's not exactly pleasant using weaks but I can't think of any other sane hierarchy that uses direct references, else you can just bite the bullet and have message channels everywhere 😄
Avatar
Avatar
heinrich5991
can you give an example of such a cleanup function?
@Jupstar ✪
Avatar
Avatar
Learath2
Hm, I think I would just have the client have the only strong pointer and make the rest weak
yeah dunno, but u also need RefCell if u want mutibility
Avatar
Avatar
Learath2
It's not exactly pleasant using weaks but I can't think of any other sane hierarchy that uses direct references, else you can just bite the bullet and have message channels everywhere 😄
channels are bad though, stuff would not happen immediately, but "in the next tick" or so
Avatar
and that's at runtime again xD
Avatar
Yeah, I'm not sure if you can avoid interior mutability here
Avatar
Avatar
heinrich5991
@Jupstar ✪
well i use the index, send it to the vulkan backend, where it frees some memory the fact that i have to use indices/ids/whatever is already ofc not nice.. but probably inevitable. So at least make sure a resource must be explicitly free'd Also yes i could rely on Option or Default etc. my point is really not that there aren't other solutions. But that it would be this tiny bit more elegant imo 😄
Avatar
Anyway, it’s fairly hard for me to think about the hierarchy in any larger program, especially since I’m not a very frequent user of C++ smart pointers either
Avatar
Avatar
Jupstar ✪
well i use the index, send it to the vulkan backend, where it frees some memory the fact that i have to use indices/ids/whatever is already ofc not nice.. but probably inevitable. So at least make sure a resource must be explicitly free'd Also yes i could rely on Option or Default etc. my point is really not that there aren't other solutions. But that it would be this tiny bit more elegant imo 😄
can you have more than one vulkan backend?
Avatar
Avatar
heinrich5991
can you have more than one vulkan backend?
i knew that would be comming xD
14:15
perhaps you could impl drop in there and just throw it at the global object
Avatar
well i kinda like to free what i allocate and i dont want to put the whole backend in a global or Rc
14:16
well tbf i dont have a very strong opinion on this
Avatar
i think top down one way is usuallyt prefered
Avatar
I just fear extensive Rc + RefCell usage
Avatar
doesnt it allow better paralelization
Avatar
@Jupstar ✪ do you have the code public somewhere? I’m kinda curious now 😄
Avatar
Avatar
Jupstar ✪
I just fear extensive Rc + RefCell usage
global variable would work there, no?
Avatar
children being in a "black box" and not knowing much
Avatar
Avatar
heinrich5991
global variable would work there, no?
He also fears globals
Avatar
Avatar
heinrich5991
global variable would work there, no?
but that would introduce quite a bit of unsafe, wouldnt it
Avatar
I would think you could contain it to a couple of functions (edited)
Avatar
Avatar
Learath2
He also fears globals
hate is smth else than fear
14:18
see i really like to solve problems by passing stuff around when i see Demo()->isPaused() in our c++ code while i simply stop the timer of the demo renderer (bcs the timer is always passed and can simply be swapped between client timer and demo timer) it enforces some style
14:18
it has a clear style
Avatar
can you give an API link to such a cleanup function?
14:18
of vulkan
Avatar
Avatar
Ryozuki
i think top down one way is usuallyt prefered
For hierarchy? Yes but I never really heard much in the way of arguments for it. It’s just much much easier to think about 1 way relationships all over, but then you’ll need something akin to a message bus, good for easy parallelism, but not the best for performance iirc
Avatar
Avatar
heinrich5991
can you give an API link to such a cleanup function?
well it takes a vulkan instance... that is the one that was to be active while u allocate memory from it, but let me find it
Avatar
Avatar
heinrich5991
can you give an API link to such a cleanup function?
https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkFreeMemory.html well it takes a device which u choose after the instance is created
14:20
device = GPU
Avatar
Avatar
Learath2
For hierarchy? Yes but I never really heard much in the way of arguments for it. It’s just much much easier to think about 1 way relationships all over, but then you’ll need something akin to a message bus, good for easy parallelism, but not the best for performance iirc
Or callbacks everywhere, but callbacks are pretty hard combined with async, so your easy parallelism benefits can be lost
Avatar
Btw @heinrich5991 be very careful with #6942, the code looks much cleaner which scares me 😄
Avatar
The old code looked pretty weird. It checked for CFGFLAG_SERVER | CFGFLAG_GAME being set above, and then used the passed-in parameter to find the command. I think it'd be better to just look fo...
Avatar
e1ba77d implement tuning values for elasticity - AssassinTee 03fd1b4 Merge pull request #5398 from AssassinTee/feature/elasticity-tuning - heinrich5991
Avatar
Avatar
Learath2
Btw @heinrich5991 be very careful with #6942, the code looks much cleaner which scares me 😄
much cleaner than what?
Avatar
The previous one, it looked weird before now it doesn’t. When I see that I’m suspicious of some unintended change in behaviour
14:25
I thiiiink it’s fine though, still just a heads up 😄
Avatar
Did Heinrich write the previous code? (edited)
Avatar
He may have, I don’t remember who implemented it
Avatar
I did
Avatar
I assume it was from the original cfgflag game pr
14:26
I was afraid to touch it too much 😄
14:26
Macros scare me
Avatar
Yeah, cleaning old code is spooky in ddnet, simplest of changes moving around if branches broke stuff in the past
Avatar
I think his change makes sense though it looks good to me
Avatar
Yeah, Robyt’s comment does look like a nice imorovement on it too btw
14:28
improvement*
Avatar
True but it's already working
Avatar
I'll respond to it
Avatar
Avatar
Learath2
@Jupstar ✪ do you have the code public somewhere? I’m kinda curious now 😄
i can create a current snapshot but the code is still very messy and very prototype 😄
Avatar
Avatar
Jupstar ✪
i can create a current snapshot but the code is still very messy and very prototype 😄
If you don’t mind sharing I’d love to take a look
14:29
I’ll go back to op amps, cya’ll
Avatar
bye
Avatar
Avatar
Tater
True but it's already working
Is it also working with the new changes? I confirmed that it doesn't crash
Avatar
I did not test Heinrich pr
14:33
Logically it seems ok to me
14:34
Someone should test it though
Avatar
@Tater how do I test that the config variables get applied correctly?
Avatar
@Learath2 https://github.com/Jupeyy/dd-pg/tree/test2 please dont read the code too much xdd
don't use or read this code. Contribute to Jupeyy/dd-pg development by creating an account on GitHub.
Avatar
I set the client console to initialize with | CFGGAME_FLAG then you can just check them in F1. But you need a map to set them.
14:46
If you use sv_deepfly you can set pred margin to something high like 200 then just test if it's predicted correctly with dummy
14:46
I could test it in like 10 hours if you care
Avatar
that'd be amazing
Avatar
I'll add you as a reviewer
Avatar
Also idk what this function is doing on the server side. If you're being extra careful you might want to make sure it doesn't have a behavior change there.
Avatar
@heinrich5991 please do the review for #6931. I dunno if it's important if we fail cmake if ssp is not found etc. i'm static linking elitist now xd
Avatar
src/engine/client/backend/opengl/backend_opengl.cpp:1599: undefined reference to `__stack_chk_fail' Still testing if this fixes the build. Edit: works
Avatar
babdbc4 add grid to envelope editor - Marmare314 88cf4c4 Merge pull request #6923 from Marmare314/envelope_grid - Robyt3
15:24
1c231a0 Minor improvements to Multi-View - Vy0x2 5b10547 Merge pull request #6916 from Vy0x2/pr-poc-mv-clean - Robyt3
15:30
d37b100 Fix linking wiht -fstack-protector-strong on MinGW - def- a7ae13d Fix glslangValidator.exe executable bit - def- 3497bfd glslangValidator -> glslang - def- 8149529 Add libssp-0.dll - def- b57cd2e Merge pull request #6931 from def-/pr-mingw-stack-protector - heinrich5991
Avatar
@Robyt3 i rebased #6867 if youre in the mood for a review 😄
Avatar
Draft to make quad point selection easier. To work properly this will need #6844. Since this change was inspired by blender the hitbox is currently quite big. If two points are within range the nea...
Avatar
@Jupstar ✪ i passed the exam xd
Avatar
epic
Avatar
Avatar
Robyt3
Do the skins appear gradually or all at once when the loading is finished? If they appear gradually, the loading indicator should be drawn as a listbox item. For now just render "Loading...", I already got the loading indicator covered.
Gradually
Avatar
Avatar
Ryozuki
@Jupstar ✪ i passed the exam xd
IDK what exam but congrats
Avatar
Avatar
Tater
I think theres a lot of people that get 10+ second lag from texture loading.
Hmm
Avatar
862c0ca make point hitbox bigger - Marmare314 1f1cc80 Merge pull request #6867 from Marmare314/point_selection - Robyt3
18:29
04a024c Update logo font details - murpii 0794ab7 Merge pull request #47 from murpii/pr_update_logo_font_details - def-
Avatar
guys what about do like this design for #map-releases
Avatar
yea the bot could do that
18:47
that would be pretty cool
18:47
you'll put poor snail out of work tho
Avatar
Avatar
Ewan
you'll put poor snail out of work tho
im can do it if they send me list of map release
18:47
im just send them source they put the webhook and send message
18:47
done
Avatar
they would probably have @DDNet do it
18:48
not a webhook
Avatar
Avatar
Ewan
they would probably have @DDNet do it
thats gonna be harder i think
18:48
😄
Avatar
not for them rly
18:48
the msg data would be the same
18:49
are u doing it in json or what
18:49
18:50
even its harder lmfao
18:52
easier send me list
18:52
and im do all
18:52
and they send just with webhook
Avatar
nah i don't think they'll go for that
18:53
event its a good design
18:53
:I
Avatar
do you know python
Avatar
not good fr
Avatar
Avatar
Jurai!
easier send me list
There is no list, it's more like you might have a short conversation about the map releases or snail picks out suitable maps that just fits atm (edited)
Avatar
Avatar
Cøke
There is no list, it's more like you might have a short conversation about the map releases or snail picks out suitable maps that just fits atm (edited)
yeah too possible
Avatar
i was just imagining a bot command with name, author, difficulty, release time and thumbnail as parameters. would be pretty much the same process, but then you can benefit from the cool markdown and link stuff in the embed
Avatar
Avatar
Jurai!
guys what about do like this design for #map-releases
What u think about it @snail ?
Avatar
Simplify memory management of groups, layers, images, sounds and envelopes by using std::shared_ptr for all of them. Clear brush when creating a new map to prevent crash due to unloaded textures being used in tile layer. Closes #6935. Also fix crash when restoring a saved brush after removing an image that is being used by it.

Checklist

  • [X] Tested the change ingame
  • [ ] Provided screenshots if it is a visual change
  • [ ] Tested in combination with possibly related config...
Avatar
hi so basically last time when i compiled ddnet everything went right, today im a bit sleepy etc, and resetted my windows also and wanted to compile ddnet once again in vsc, and when im building the cmake, i get this: (return code 1) i don't know if its the right channel, sorry for that
20:07
the dependencies was not found but i have it in the ddnet-libs, and git downloaded recursived (edited)
Avatar
What is the actual error?
20:08
I think the last lines are missing
20:08
I have a feeling this could be my ssp change from today having broken it
Avatar
tried to download it without recursive and after downloading the ddnet libs, and trying cmake but i get this, and getting this also if i try with --recursive
20:09
rust,cargo and python ofc downloaded
Avatar
What is the error message?
Avatar
@Ryozuki could you help him pls, he has trouble compiling on windows xd
Avatar
this is when im trying to build it, crazy
264.97 KB
20:13
i dont really know whats going on never happened before, lol
Avatar
ok, this is a Rust linking error
20:25
Maybe you have changed the Rust version?
20:26
It's probably still a bug and @heinrich5991 might know something about the Rust build process that could be going wrong
20:29
Code I tried this code: fn main() {} With this section in Cargo.toml: [profile.release] panic = 'abort' lto = true And also disabled msvcrt.lib. Unfortunately rust does not have a good way ...
20:29
@lean can you check if a week old DDNet version builds fine?
Avatar
my friend autojoined the brasil tutorial server even though he's from USA
Avatar
Avatar
deen
@lean can you check if a week old DDNet version builds fine?
version 17.1?
20:33
also, if i try to compile it in visual studio (not code) it compiles, and starts running the exe, but then i get that these dll's are missing:
  • libpng16-16.dll
  • avformat-6.dll
  • SDL2.dll
  • libfreetype.dll
Avatar
Avatar
lean
version 17.1?
17.1 (https://github.com/ddnet/ddnet/releases/tag/17.1) builded successfully 👍 via vs. (edited)
Fix online clan friends not being removable via UI
Exported 404 message(s)