Time |
Nick |
Message |
00:44 |
|
AliasAlreadyTake joined #minetest-dev |
01:05 |
|
olliy joined #minetest-dev |
01:13 |
|
erlehmann joined #minetest-dev |
01:26 |
|
kilbith joined #minetest-dev |
03:28 |
|
queria^clone joined #minetest-dev |
03:33 |
|
queria^clone joined #minetest-dev |
05:00 |
|
MTDiscord joined #minetest-dev |
05:50 |
|
v-rob joined #minetest-dev |
08:52 |
|
MTDiscord joined #minetest-dev |
08:55 |
|
kilbith joined #minetest-dev |
09:25 |
kilbith |
would it be a waste of time if I redesign the mainmenu myself? |
09:26 |
nrz |
depends if we merge or not ? ? |
09:26 |
kilbith |
that's what I'm asking, would it be seriously considered by the committee? |
09:27 |
nrz |
what is the main menu needs you want to implement ? |
09:27 |
kilbith |
because the GUI rewrite ain't gonna happening and I can't stand that design any longer |
09:27 |
nrz |
it's clearly a year 90 design in terms of game menu ? |
09:27 |
nrz |
functional but not so enjoyable |
09:28 |
kilbith |
and I don't see anyone else making a better work at this but me |
09:28 |
nrz |
we need multiple views and navigation instead of this tab model |
09:28 |
kilbith |
rubenwardy: ^ |
09:29 |
kilbith |
okay, everyone has an idea but I want to impose mine as I have the legitimacy for it |
09:29 |
kilbith |
otherwise we wouldn't never get a new design |
09:29 |
kilbith |
-n't |
09:29 |
nrz |
don't impose but propose |
09:29 |
nrz |
and if it's a good idea you have my suport ? |
09:30 |
kilbith |
we aren't going anywhere with that |
09:30 |
nrz |
maybe draft some design on paint or something like this to show us what you expect to do |
09:30 |
kilbith |
and I'm not waiting for your feedbacks tbh |
09:30 |
nrz |
then why are you asking if you don't care ? ? |
09:31 |
kilbith |
because you are not the guy to talk with about GUI stuff. |
09:31 |
nrz |
i'm not GUI owner but i have design ideas in mind, it doesn't mean i should be ignored |
09:31 |
nrz |
those silo are so 90 development model ? |
09:36 |
erlehmann |
kilbith, look just implement it and see how it goes? |
09:36 |
MTDiscord |
<luatic> kilbith: striving to become the new Mainmenu Dictator? |
09:37 |
erlehmann |
current main menu has a few warts, but it's very functional |
09:37 |
kilbith |
I just expect the committee to give me free hand on it, so that I don't waste my precious time |
09:37 |
erlehmann |
if you can improve on that, i bet ppl will like it – if you remove functionality, prepare for being ridiculed, i guess? |
09:38 |
erlehmann |
“I just expect the committee to give me free hand on it”, ah yeah, where in history did this ever go wrong? |
09:38 |
erlehmann |
kilbith, do you have code? i am willing to test your new main menu |
09:38 |
kilbith |
look, I don't give a fuck of whay you say in this channel |
09:38 |
kilbith |
it's all noise |
09:39 |
kilbith |
just look at my legacy and maybe you would understand why I'm requiring this |
09:39 |
kilbith |
endless discussions doesn't lead to anywhere, time for action |
09:40 |
erlehmann |
i get it. if the answer to “i am willing to test your code” is “i don't give a fuck what you say”, obviously you don't want or need any help. |
09:40 |
kilbith |
I just want the green light from the decision makers |
09:50 |
erlehmann |
<kilbith> just look at my legacy and maybe you would understand why I'm requiring this |
09:50 |
erlehmann |
kilbith URL? |
09:53 |
|
kilbith joined #minetest-dev |
09:53 |
kilbith |
https://github.com/minetest/minetest_game/blob/master/mods/creative/license.txt#L6 |
09:54 |
kilbith |
https://github.com/minetest-mods/i3 |
09:54 |
kilbith |
I also designed the mainmenu of EvidenceB/Kidscode |
09:55 |
kilbith |
oh and: https://github.com/minetest/minetest_game/blob/master/mods/mtg_craftguide/license.txt#L6 |
09:56 |
kilbith |
+ several contributions to the GUI engine |
09:56 |
kilbith |
:] |
09:58 |
erlehmann |
i see |
10:01 |
nrz |
tbh kilbith we all have precious time, just do what you want to do and stop think you are over others ? |
10:02 |
nrz |
it's totally toxic behaviour and not constructive |
10:03 |
|
kilbith joined #minetest-dev |
10:05 |
kilbith |
I'm better than all of you at GUI making, it's just fact |
10:06 |
kilbith |
the same way that hecks is better than all of you at understanding the rendering pipeline |
10:06 |
kilbith |
and he had free hand at refactoring IrrlichtMt |
10:07 |
erlehmann |
and created totally avoidable problems, yeah |
10:07 |
erlehmann |
look, just being very good – experience and talent-wise – doesn't mean that everyone will agree with you in the end |
10:07 |
kilbith |
sure - that's how I became the best |
10:07 |
erlehmann |
usually you can't shortcut to acceptance |
10:08 |
kilbith |
I listened people an observed other work |
10:08 |
kilbith |
* and |
10:09 |
erlehmann |
look whenever i talk about signed integer overflows or validating inputs or constraints, ppl don't care much – unless i produce a crash (or worse), then they suddenly do. |
10:11 |
erlehmann |
why should it be different for any other discipline? i do disagree with hecks a lot, but i never saw hecks claiming ppl waste their time wanting results before they make up their mind (granted, i should probably look further back). |
10:11 |
kilbith |
because you are german and you struggle with central authority, it is in your culture |
10:13 |
kilbith |
I come from a very centralized country and the decision process can be very effective country-wise compared to Germany |
10:15 |
kilbith |
that's what we need in MT, less german-ey and more french-ey |
10:15 |
kilbith |
for the community benefit |
10:15 |
erlehmann |
germany had very effective central decision making. millions of people died. end of history lession. |
10:15 |
erlehmann |
tbh this is a stupid argument. |
10:16 |
erlehmann |
lesson. |
10:16 |
kilbith |
France has centuries of monarchy and still has a very centralized model, and it works better than Germany duh |
10:17 |
erlehmann |
look, i am not interested in debating which country can fail more often conquering europe. |
10:17 |
erlehmann |
it has nothing to do with the main menu |
10:18 |
kilbith |
we need to understand your background culture to understand your arguments on this one |
10:18 |
kilbith |
that the MT's model is too influenced by the germanic culture |
10:18 |
erlehmann |
i am pretty sure that my main argument is “if you compare yourself to hecks favorably, then you will make similar mistakes and maybe even lie out of arrogance” |
10:19 |
erlehmann |
as being talented and skillful does not mean you do not make mistakes |
10:19 |
kilbith |
sure, but the thing is, I'm *less* prone to mistakes than anyone else on this discipline |
10:20 |
erlehmann |
i work at a company where everything technical needs a mandatory review. it helps so much |
10:20 |
kilbith |
and I leave you on that - bye |
10:21 |
erlehmann |
kilbith, i suspect your mistake is to think that others will value your time so much that they think it is unreasonable to wait for a prototype before making decisions? |
10:31 |
|
hecks joined #minetest-dev |
10:33 |
hecks |
Slowly getting back to the shader thing, did I miss anything important? |
10:33 |
|
kilbith joined #minetest-dev |
10:35 |
|
tekakutli joined #minetest-dev |
10:37 |
erlehmann |
hecks you may have missed the part where ppl figured out you didn't do your research about what file formats and hardware are in use and what isn't, but i guess that will come up in code review if you do that again. |
10:38 |
erlehmann |
hecks do you have an idea how to detect cards that claim to support ogles but actually don't? |
10:38 |
erlehmann |
bc i have a bunch of computers with cards that … uh … render total bullshit, to say it mildly. |
10:38 |
hecks |
I guess you can just do a duck test |
10:38 |
erlehmann |
duck test? |
10:39 |
hecks |
try to get a function pointer and use an ES2 api, see if it works |
10:39 |
hecks |
if it compiles a shader, it's probably fine |
10:39 |
erlehmann |
no no, what i mean is: the stuff is then *not* fine |
10:39 |
hecks |
it breaks visually? |
10:39 |
erlehmann |
yep |
10:39 |
hecks |
well, that's a driver/hardware issue, it's not GLES2 compatible |
10:40 |
hecks |
hopefully those devices are very rare |
10:40 |
erlehmann |
yeah but how to detect that? |
10:40 |
hecks |
well, you don't detect a driver bug, you can add some workaround for it once it's known |
10:40 |
hecks |
based on the vendor string |
10:40 |
hecks |
that's the normal way to do this sort of thing |
10:40 |
hecks |
of course if a card is a basket case then it's probably not worth the effort |
10:41 |
erlehmann |
render using mesa with LIBGL_ALWAYS_SOFTWARE=1 and compare? that's an idea, but the problem is i already figured that mesa disagrees sometimes without noticeable visual artifacts |
10:42 |
hecks |
that is something you can do for an automated test, and you can use a heuristic to accept "good enough" images |
10:42 |
hecks |
if you want to weed out bad cards in bulk |
10:43 |
hecks |
in that case you just need reference images rendered by mesa or a known good card, and a scene used to produce these |
10:43 |
hecks |
log some kind of event when an image is different enough and then investigate manually where it fails |
10:44 |
hecks |
I wonder if a test suite like this already exists, it must be a thing |
10:44 |
erlehmann |
hecks the problem is that once you rip and tear everything out and i only got OGLES2, minetest quickly goes from “run on all computers i own” to “runs on the reform2” (the newest computer i own) and i would be a bit pissed if it didn't render right, so i want to identify it early. |
10:44 |
hecks |
Do know that GLES2 is far from high hanging fruit feature wise |
10:45 |
erlehmann |
it's a new laptop that got delivered this year, it has imx8 |
10:45 |
hecks |
where by GLES2 I also mean the subset of desktop OpenGL 2 that matches it |
10:45 |
erlehmann |
ah ok? |
10:45 |
erlehmann |
“log some kind of event when an image is different enough” i was also for that, but a lot of people here said comparing images visually is bad testing, for reasons i do not understand |
10:45 |
hecks |
well I meant obvious things like things not sorting correctly |
10:46 |
hecks |
in any case you'd inspect the result manually and figure out what breaks, and probably file a bug with your driver vendor |
10:46 |
erlehmann |
there is already a workaround for the reform1 (a 2018 laptop) in minetest |
10:46 |
hecks |
the alpha discard thing? |
10:46 |
erlehmann |
i think yeah, if that's the thing contributed by mntmn (the laptop guy) |
10:47 |
erlehmann |
had something to do with plant rendering i think |
10:47 |
hecks |
I mean we can prioritize support for all sorts of libre friendly hardware and software if that concerns you |
10:47 |
erlehmann |
well if you need rendering tests on reform2, ping me |
10:47 |
hecks |
either way, discard as alpha test is actually the GLES2 way to do it |
10:47 |
|
proller joined #minetest-dev |
10:47 |
hecks |
and it's legacy GL features that this card was having issues with |
10:48 |
erlehmann |
i already figured out that it gets 10 fps more if you use ogles (meanwhile, all the old thinkpads i have get like 10 to 15 fps *less*) |
10:48 |
hecks |
and I'm inclined to believe that it's more likely that a fixed function GL feature would be neglected in a driver rather than ES2 |
10:48 |
hecks |
as for FPS, I've already investigated this |
10:48 |
hecks |
the irrlicht GLES2 driver is just comically bad |
10:49 |
hecks |
we can replace it |
10:49 |
hecks |
this is because irrlicht uses it in a way that tries to be compatible with how irrlicht does things, and irrlicht was made for fixed function and software rendering mostly |
10:49 |
erlehmann |
ah, well, it's a difficult situation. i believe the vivante GPU driver was mostly improved by a vendor of inflight-entertainment systems or something like that. |
10:50 |
hecks |
if we bypass irrlicht and just use GL2 itself, framerate should be optimal |
10:50 |
erlehmann |
this is hearsay ofc, but what i heard is that basically they only focus on what makes their menus and videos work |
10:51 |
hecks |
well, that sucks |
10:51 |
hecks |
however, limiting the GL subset to ES2 actually reduces the bug surface for those wonky cards |
10:51 |
erlehmann |
indeed. what i'm saying is that real life hardware is far removed from whatever steam surveys ppl use to justify supporting this or that |
10:51 |
erlehmann |
integrated graphics is just a minefield |
10:51 |
hecks |
ES2 is only a couple dozen procedures, less chance of a driver not doing one of them correctly |
10:52 |
hecks |
unfortunately if a card is really bad and doesn't do 3D graphics properly, mesa should be used |
10:53 |
erlehmann |
so what would you expect to support hardware that can't do OGLES2 correctly? mesa software rendering doesn't really cut it, i know of no machine on which i get a playable game that way. |
10:53 |
hecks |
ultimately, at one point a fixed function path would be a big liability |
10:54 |
erlehmann |
i once again want to offer that i can try to maintain the existing fixed pipeline code, as in try to keep it working and implement workarounds for stuff like night vision (idc what happens elsewhere, as long as it doesn't break that). but i have very little understanding of it other than “seems to work”. |
10:54 |
hecks |
the problem isn't just our workload |
10:54 |
hecks |
imagine a modding API that allows game defined shaders |
10:55 |
erlehmann |
that sounds horrifying |
10:55 |
erlehmann |
like webGL |
10:55 |
erlehmann |
i.e. a HUGE security issue |
10:55 |
erlehmann |
(like webGL) |
10:56 |
hecks |
From what I gather the only problem is people exploiting crappy drivers, not the idea of shaders itself |
10:56 |
hecks |
anyway, imagine that security issues are sufficiently solved and this is a thing |
10:57 |
hecks |
now modders also have to worry about fallback textures for fixed function clients |
10:57 |
erlehmann |
look, i barely know C++, but i have seen the quality of minetest code |
10:58 |
erlehmann |
i develop on mineclonia (mainly performance fixes) and i can assure you modders have to think back as far as 5.3 |
10:58 |
hecks |
well, if I'm the one implementing and reviewing it then maybe it will be acceptable, I do security sensitive things in my day job |
10:58 |
erlehmann |
ok cool |
10:58 |
hecks |
*implementing or reviewing it |
10:59 |
erlehmann |
i do too, but no one ever believes me when i say every signed integer overflow is bad lol |
10:59 |
erlehmann |
btw, did you ever try to write to memory from voxelmanips |
10:59 |
hecks |
as I've said, there is not much a GPU itself can do to harm your computer, and few people would waste a good driver zeroday to pwn a few minetest players |
10:59 |
hecks |
the worst part is usually the shader compiler but that can be mitigated with heavy sanitization |
11:00 |
erlehmann |
i worrd about shader compiler too |
11:00 |
hecks |
memory from voxelmanips.... kilbith has a branch for that |
11:00 |
erlehmann |
i have a meeting, see you later |
11:00 |
erlehmann |
nice |
11:00 |
hecks |
I haven't tried it myself yet but I'll probably do it at some point |
11:00 |
erlehmann |
so it is already being exploited? |
11:00 |
erlehmann |
i only can get crashes so far :/ |
11:00 |
hecks |
exploited? uhh |
11:00 |
hecks |
I thought you meant ffi pointer access to VM data |
11:00 |
erlehmann |
i have never been able to write into memory that i should not write into without it being crashed |
11:01 |
erlehmann |
i suspect it should be able to construct a mesecons machine to take over the host |
11:01 |
erlehmann |
but i haven't managed to o anything else than crashing |
11:01 |
erlehmann |
there is a fun bug though with which you can obtain arbitrary nodes |
11:01 |
hecks |
uh oh |
11:01 |
hecks |
has this been reported? |
11:02 |
erlehmann |
of course not, no one takes less important stuff seriously without a demonstration. so it would only benefit bad ppl. |
11:02 |
erlehmann |
if i get somewhere i tell you |
11:02 |
hecks |
this does seem like an attack vector though I doubt that with good ASLR you could do anything remotely interesting |
11:02 |
erlehmann |
oysterity, and clamity before it, has to deal with griefers who actually try to crash the server |
11:03 |
hecks |
denial of service is still a vulnerability though and you should report it in the current state |
11:03 |
hecks |
I mean, report what you already have |
11:03 |
erlehmann |
sorry, i got bad experiences with that |
11:03 |
hecks |
with reports? |
11:04 |
erlehmann |
with reporting stuff where i do not have a fully working bugfix. essentially, i often warn about obvious but wrong solutions, but ppl latch on to them – probably bc i am quite bad at explaining why the obvious solution is wrong. |
11:04 |
hecks |
we have a special form for reporting vulnerabilities, you could use that |
11:04 |
hecks |
those aren't public I think |
11:04 |
|
proller joined #minetest-dev |
11:05 |
hecks |
just tell us how you can crash a server with node manipulation and we can continue from there |
11:05 |
erlehmann |
look, i have been through this in other projects too. when i report a thing *with a proof of concept*, it gets fixed. but when i report something without, it gets ignored. and if i say “the obvious but wrong bugfix is X”, ppl just *love* X sometimes. |
11:06 |
hecks |
A minimal lua mod that causes a segfault without using an unsafe environment would suffice |
11:10 |
erlehmann |
hecks, i recently filed an issue. reading nodes out of bounds of s16 with minetest.find_nodes_n_area crashes (but only in specific areas actually). the obvious but wrong bugfix is limiting that function to MAX_MAPGEN_LIMIT or how it is called and i seem to be very bad at explaining *in abstract* that having 31000 as the boundary leads to more problems than just choosing the boundaries of the s16 data type. |
11:11 |
sfan5 |
hecks: o/ |
11:11 |
erlehmann |
so if i can not explain it will, i need to make a bugfix myself before reporting it. |
11:11 |
hecks |
hi sfan |
11:11 |
erlehmann |
it's that simple |
11:11 |
erlehmann |
will → well |
11:11 |
hecks |
well, whatever works for you :o |
11:11 |
erlehmann |
minetest is comparatively fine |
11:11 |
hecks |
just, if you can't nail down that voxelmanip vulnerability then please report what you have because it's important |
11:12 |
hecks |
someone else could figure it out |
11:12 |
erlehmann |
i actually suggested minetest as a good target for the next team event of the security team at my workplace |
11:13 |
erlehmann |
bc tbh i suck at writing exploits |
11:13 |
hecks |
wow, nice |
11:13 |
erlehmann |
well, we will see |
11:13 |
erlehmann |
i doubt ppl like it as much as i do, but the team is small (less than 10 ppl) |
11:13 |
hecks |
you'll probably find a dozen ACEs -.- |
11:13 |
erlehmann |
last time we got some iot webcam and opened it up to replace the binaries |
11:13 |
hecks |
pay attention to the packet serialization especially |
11:13 |
hecks |
I'm sure there's a rats nest somewhere in there |
11:14 |
erlehmann |
which told me i am very bad at cross compiling for non-libc stuff |
11:14 |
erlehmann |
hecks do you have contact to anon5? |
11:14 |
hecks |
who's that? |
11:14 |
erlehmann |
ppl like fleckenstein or cora or specing or me cheat in minetest by having a custom client. |
11:15 |
hecks |
I am vaguely aware of fleckenstein's custom client thing |
11:15 |
erlehmann |
anon5 made a) a custom go library to dissect the protocol b) a proxy for minetest to reduce lag by removing stuff from overlong item meta (i think this breaks map saving though) c) probably a bunch of other things that are not public |
11:16 |
hecks |
interesting |
11:16 |
hecks |
by dissecting the protocol you mean something like a packet inspector? |
11:16 |
erlehmann |
yeah, i look for it |
11:16 |
hecks |
that's not hard to do with the code being public and all but |
11:16 |
sfan5 |
well if he wrote a proxy I bet it's more of a reimplementation |
11:16 |
hecks |
spoofing packets is where the fun begins |
11:17 |
erlehmann |
the proxy has been used for a long time on clamity |
11:17 |
erlehmann |
and i think it might be in use on oysterity as well |
11:17 |
hecks |
I once crashed MT by using clumsy to simulate packet corruption so that's why I suggest people look for vulnerabilities there |
11:18 |
hecks |
the packet code is completely untyped and more like assembly, the packet structures are defined in comments and only exist as code encoding and decoding them |
11:19 |
hecks |
goes without saying that this is a precarious way to do things :o |
11:20 |
hecks |
would be nice if someone replaced that with actual structs |
11:20 |
nrz |
in fact kilbith to make you on ground, you are clearly not the best, but the only one it seems. It means you are the best from the only people on it. No reason to congrats you and being toxic ? |
11:20 |
hecks |
uh oh drama |
11:20 |
sfan5 |
nrz: he left already (but might read the log) |
11:22 |
nrz |
oh okay matterbridge is not showing irc users events ? thanks sfan5 |
11:24 |
erlehmann |
hecks, for context, kilbith previously today was like “give me absolute power over main menu refactoring, i am better than all of you. also germany sucks, france is superior.” |
11:24 |
erlehmann |
IMO nrz is not exactly wrong in calling that toxic |
11:25 |
erlehmann |
just read the logs if you want the drama |
11:25 |
|
calcul0n__ joined #minetest-dev |
11:25 |
nrz |
hello hecks, glad to see you there |
11:25 |
erlehmann |
sfan5 hecks https://github.com/anon55555/mt |
11:25 |
erlehmann |
i am pretty sure anon5 cheats using that thing |
11:25 |
nrz |
for the GL issues, on my pretty external point on view as i'm not so active nowadays, it seems that removing stuff broke many people setup, it's pretty anoying unfortunately. We should ensure some compat level and not let them cry because we broke them ? i think irrlicht has subtile things for them ? |
11:26 |
hecks |
the removed thing that broke people's stuff was not really GL related |
11:26 |
erlehmann |
yeah, it was just standard “did not do the research” |
11:26 |
erlehmann |
i bet hecks has learned from that |
11:26 |
hecks |
the thing is that this wasn't documented |
11:27 |
nrz |
yeah if i read you correctly you said driver, but it's the problem with GL, that there is the norm, and there is the implementations xD |
11:27 |
nrz |
i think mesa have interesting shits due to hardware too ? |
11:27 |
hecks |
and mineclone was just about the only user of this, also, I gave them a dynamic PNG API to migrate to and hope they eventually will |
11:27 |
hecks |
because what they are doing seems like a pretty poor use of bandwidth |
11:28 |
erlehmann |
the dynamic png API arguably sucks for the purpose that mcl wants it to, but lets talk about this later |
11:28 |
hecks |
TGA has almost no compression =[ |
11:28 |
erlehmann |
i also thought that bandwith was the issue originally |
11:28 |
hecks |
it's the same thing they do really, saving an image to a file |
11:28 |
erlehmann |
but it's not |
11:28 |
hecks |
the only thing that "sucks" about my implementation is that I skipped the paeth predictor, but that can be added |
11:28 |
erlehmann |
the issue is a) ease of use to write from lua b) supporting minetest <5.5 |
11:28 |
hecks |
in any case, zlib probably beats TGA's RLE |
11:29 |
hecks |
I'm fine with this revert until 6.0 |
11:29 |
nrz |
hecks: i'd say if TGA is shit format it's not reason to remove it i think :p if end user wants bad exp on their server it's their issue, not our |
11:29 |
sfan5 |
it's already added back so not much point discussing it a lot |
11:29 |
hecks |
I just swept it up with more than a dozen other obscure formats, irrlicht actually requires DIB support to compile so I thought it was redundant with that |
11:30 |
hecks |
this was purely housekeeping to make irrlicht compile faster and be more viable for absorption |
11:30 |
erlehmann |
hecks, to summarize: PNG is better than TGA for bigger images, even without the predictor thing. TGA – even uncompressed – is better for small pixel art. the ideal thing you want as a mod is having palette support. |
11:30 |
hecks |
does TGA have indexed modes? |
11:31 |
hecks |
granted, I did not implement those but we actually discussed it here and decided against it |
11:31 |
erlehmann |
the “always RGBA” thing is definitely not what a mod like the maps mod wants |
11:31 |
erlehmann |
bc internally it already builds a palette |
11:31 |
hecks |
I'd actually have to test that cause I kind of doubt that TGA wins even in a 16x16 tile (and in any case, you probably want a tileset if you really care about space) |
11:32 |
hecks |
from what I understand about deflate, zlib should always win vs TGA's rle |
11:32 |
erlehmann |
i tested it and was suprised, but at such small sizes it is not about image size anymore (and if it were, it depends on the image) |
11:32 |
erlehmann |
you forget the PNG overhead, which easily beats the payload for small images |
11:32 |
hecks |
in any case, if you have lots of small tiles and care about space, *please* build a tileset and use ^[sheet: |
11:32 |
erlehmann |
youwrite ~70 bytes before you write a single byte of payload. but again, that's not the issue. |
11:32 |
hecks |
this is the greatest thing you could do for your load times |
11:33 |
erlehmann |
the issue is that with TGA you dump a header and then dump the pixel data or the bytes that index into the palette |
11:33 |
hecks |
because the compression can then reuse data from between tiles, which it can never do with individual images |
11:33 |
erlehmann |
it is basically impossible to get that wrong |
11:33 |
erlehmann |
even if you do it by hand |
11:33 |
erlehmann |
that is why it is used |
11:33 |
hecks |
well I made the API as easy as building a TGA, anyway there was just one mod in existence using TGA and we reverted it for them. case closed |
11:33 |
erlehmann |
i remember that mcl2 actually experimented with png before you even came up with your api and chose tga |
11:34 |
erlehmann |
my issue is bigger, you made the API without understanding why ppl chose a particular thing |
11:34 |
hecks |
yes because I made the API for them specifically |
11:34 |
erlehmann |
you did not, or you would have made it paletted |
11:34 |
erlehmann |
the mcl2 code internally builds a palette for each node |
11:34 |
erlehmann |
to figure out how to make the picture |
11:34 |
erlehmann |
you could have used that |
11:35 |
erlehmann |
no need to do it now |
11:35 |
erlehmann |
i just want to point out that your solution is not as useful as you think it is |
11:35 |
sfan5 |
that would have arguably made the API more complex for anyone else |
11:35 |
hecks |
I discussed it with some people here in the channel and suggested indexing myself |
11:35 |
hecks |
even wanting to make it the only possible mode |
11:36 |
hecks |
we went with RGBA instead for simplicity |
11:36 |
erlehmann |
as i said, the simplest API right now (in terms of maintenance and backwards compat) is – from the POV of a mod author – dump 20 bytes of header and then dump your pixels. case closed (for now). |
11:36 |
erlehmann |
hecks i will do some work on the maps API in the future, i'll get back to you with complaints to improve the API. ok? |
11:36 |
hecks |
you're forgetting the part where you actually have to know the structure of the TGA format |
11:36 |
hecks |
many modders don't know even that |
11:37 |
hecks |
anyway, palettes and predictors are on the to-do list for PNG |
11:37 |
erlehmann |
i suggest to talk to appgurueu about that |
11:37 |
hecks |
I can implement paeth and palettes myself, thanks |
11:38 |
erlehmann |
no, bc to me it seems the C thing is not noticeably faster than doing it in lua, but maybe that is only for small image sizes |
11:38 |
sfan5 |
writing RGB instead of RGBA or paletting sounds more useful to me than predictors in terms of compression |
11:38 |
sfan5 |
maybe I'm wrong |
11:38 |
hecks |
if every pixel gets an FF alpha it'll probably end up getting a short huffman code |
11:39 |
erlehmann |
sfan5 everyone involved (including you and me) has been so wrong about “this is better than that in terms of compression” before benchmarking it, so i say: measure it. but round trips will eat your lunch much more than 50 bytes savings. |
11:39 |
sfan5 |
better than a short huffman code is no huffman code ;) |
11:39 |
hecks |
and then repetitive pixel sequences will get RLEd together by deflate |
11:39 |
hecks |
this is why palettes aren't actually that big of a deal |
11:39 |
hecks |
deflate is capable of RLEing not just one color but a repeating sequence of them |
11:40 |
erlehmann |
look hecks, just compare the checkerboard texture from devtest with the same but optipng having crunched it |
11:40 |
erlehmann |
you get a 95% in filesize |
11:40 |
hecks |
checker pattern sounds like a trivial case for deflate |
11:40 |
erlehmann |
IMO that should be the target |
11:40 |
erlehmann |
it *sounds* trivial but obv the current implementation doesn't cut it |
11:40 |
hecks |
sure thing, I think paeth would do the trick, we don't have that currently |
11:40 |
hecks |
just let me get more important things done first |
11:41 |
erlehmann |
as i said, pls don't work on it right now. there is no need. |
11:41 |
hecks |
this png thing was an emergency feature made in a day after I heard that MCL needs dynamic images and it kind of annoys me that people complain about it |
11:41 |
sfan5 |
erlehmann: did you benchmark it properly by setting the highest compression level inside MT? |
11:42 |
erlehmann |
hecks, the other thing about TGA is that at least windows 10 minecraft seems to use it, so removing it removes support for copying over mc assets without converting them. |
11:42 |
hecks |
does our api even take a deflate level param? |
11:42 |
sfan5 |
you wrote it you should know |
11:42 |
sfan5 |
yes |
11:42 |
erlehmann |
sfan5, probably not. why is this even adjustable? |
11:42 |
erlehmann |
i just took the devtest image and figured it is 20 times the size it should be |
11:42 |
hecks |
I wrote it almost half a year ago ;-; |
11:42 |
sfan5 |
hmm I don't know, try thinking about it |
11:43 |
hecks |
also, pirating minecraft assets doesn't sound like a high priority concern |
11:43 |
hecks |
sorry about that |
11:43 |
erlehmann |
look, i don't intend to shit on it. having texture generation is cool. but a) it's not the thing that helped at the moment b) it needs work. |
11:43 |
hecks |
and nothing that a trivial convert script couldn't handle |
11:43 |
erlehmann |
and c) if you don't need the API, spare yourself the frustration |
11:44 |
hecks |
I need the dynamic image API myself for, guess what, map display |
11:44 |
erlehmann |
i think you over estimate what kind of person copies minecraft skins over |
11:44 |
sfan5 |
your concern appears to be "it needs to be 100% identical to use with existing case, smaller and faster than TGA in my usecase" |
11:44 |
erlehmann |
ah lol |
11:44 |
hecks |
I've been using PPM before actually |
11:44 |
sfan5 |
which is honestly not an useful standard |
11:44 |
sfan5 |
s/case,/code,/ |
11:44 |
erlehmann |
well hecks previously claimed it was only made as an emergency measure for that map thing, maybe i got it wrong |
11:45 |
erlehmann |
honestly, as a mod author i'd love having PPM much more than TGA |
11:45 |
erlehmann |
(if you can compress it in flight, obv) |
11:45 |
hecks |
now that's one way to make your users download megabytes |
11:45 |
erlehmann |
ease of use trumps everything else |
11:46 |
hecks |
sure it would be lovely if we just zlibbed ALL assets |
11:46 |
erlehmann |
no, only the ones where it makes sense |
11:46 |
MTDiscord |
<exe_virus> Btw, there's even better formats coming out, avix is awesome, and webp2 is another 30% smaller for lossless compression than webp haha. As for the zipping thing, no |
11:46 |
erlehmann |
you wouldn't zlib a vorbis file |
11:46 |
hecks |
but uh. ppm isn't any easier than having an image building API you can use from lua |
11:46 |
MTDiscord |
<exe_virus> Zlib makes png, jpg, vorbis, etc. Larger |
11:46 |
hecks |
oh sure about vorbis |
11:46 |
hecks |
I was thinking models, those should be compressed |
11:47 |
MTDiscord |
<exe_virus> And requires extra processing power. Hell yes to the obj and eventual .gtlf/collada compression with zstd |
11:47 |
erlehmann |
look, it's a tradeoff. as someone running minetets on a slow connection with an old computer a bit, i can tell you that asset size is *usually* not a big problem. |
11:47 |
hecks |
gltf has its own compression, DRACO |
11:47 |
hecks |
which is honestly the best but yeah. we'd have to implement gltf |
11:47 |
MTDiscord |
<exe_virus> But then we have to bring in draco, and draco is lossless |
11:47 |
erlehmann |
exe_virus collada needs XML and XML got axed |
11:47 |
MTDiscord |
<exe_virus> Not lossless*** |
11:48 |
hecks |
for now I would just attempt zlibbing every media asset on server init and pick whichever is smaller |
11:48 |
MTDiscord |
<exe_virus> Draco looks like crap for a lot of our use cases sadly |
11:48 |
erlehmann |
uh, don't do it |
11:48 |
hecks |
collada sucks. |
11:48 |
MTDiscord |
<exe_virus> True |
11:48 |
hecks |
well draco compression relies on quantization |
11:48 |
hecks |
it's actually the same trick I use to compress ascii meshes now |
11:48 |
hecks |
but binary quantization would be a lot more efficient |
11:48 |
MTDiscord |
<exe_virus> I was leaning just gltf for mesh data, animation data, and texture data |
11:49 |
sfan5 |
different topic: |
11:49 |
sfan5 |
hecks: what are your thoughts on the how TTF pixel fonts become blurry at certain sizes and how the legacy bitmap font support could avoid this? erlehmann argued this and as far as I can tell he's right (not that anyone has or would ever use this) |
11:49 |
MTDiscord |
<exe_virus> When do they become blurry? When the TTF doesn't support a certain font size? |
11:49 |
erlehmann |
i think the reason that the TTF becomes blurry is very simple: minetest allows setting the size of the font only in pt, not px. |
11:49 |
hecks |
my thoughts are that it's fine to use TTF for pixel fonts as long as you can constrain the size to the sizes that the font actually implements |
11:50 |
sfan5 |
well we don't have size constraints |
11:50 |
hecks |
and their integer multiples |
11:50 |
erlehmann |
hecks, it renders differently based on the dpi though |
11:50 |
MTDiscord |
<exe_virus> Well, we could also do a different resize algo |
11:50 |
erlehmann |
with 120 dpi 16pt unifont is blurry, with 96dpi it is not |
11:50 |
sfan5 |
so I guess this is the same conclusion |
11:50 |
MTDiscord |
<exe_virus> That doesn't do blending |
11:50 |
hecks |
and this is exactly the thing I've been complaining about re: DPI and absolute GUI sizing, that v-rob(?) has been arguing with me about |
11:50 |
hecks |
to make a nice GUI you need absolute sizes on things. period |
11:50 |
hecks |
integer scaling is fine |
11:51 |
MTDiscord |
<exe_virus> Yep, we need DPI and viewport dimensions exposed to make formspecs perfect |
11:51 |
sfan5 |
I bet you support #10632 too then |
11:51 |
ShadowBot |
https://github.com/minetest/minetest/issues/10632 -- Retrieve DPI from get_player_information |
11:51 |
hecks |
and honestly, integer scaling is probably all you need to handle various screen sizes |
11:51 |
erlehmann |
i think v-rob did not understand the part where the font size is given in pt but pixel fonts need 1pt = n * 1px |
11:51 |
hecks |
well we have some issues with DPI and GUI sizing in general |
11:51 |
erlehmann |
tbh i doubt exposing dpi is the way to go actually |
11:51 |
hecks |
at the moment, there is no way to have a pixel perfect GUI at any DPI |
11:52 |
hecks |
some things will always be wonky, item icons usually |
11:52 |
MTDiscord |
<exe_virus> It's the way to go if we don't want to do something fancy engine side |
11:52 |
erlehmann |
i *really* would like to have a guarantee that my assets are rendered with an integer scaling |
11:52 |
hecks |
yes exactly |
11:52 |
erlehmann |
other games do that too, like openttd |
11:52 |
erlehmann |
ok it has 1.5x |
11:52 |
erlehmann |
but it is the users fault if they chose that tbh |
11:52 |
sfan5 |
somehow relevant #11753 |
11:52 |
ShadowBot |
https://github.com/minetest/minetest/issues/11753 -- Images in formspecs use "smooth" linear instead of nearest neighbor filtering |
11:53 |
hecks |
filtering is another thing, although |
11:53 |
erlehmann |
i think pixel fonts currently expose that thing very well. but the images in formspec or images in main menu thing does too. |
11:53 |
hecks |
if you're on integer scale, GL_LINEAR should look exactly like GL_NEAREST |
11:53 |
sfan5 |
the tricky thing about the DPI thing is whether we want to account for runtime DPI changes or not |
11:53 |
erlehmann |
like there is no way to get the mineclonia icon show up nicely |
11:53 |
hecks |
can we just snap the DPI to known integer values |
11:53 |
MTDiscord |
<exe_virus> Maybe we need to add the option for a different blend mode? |
11:53 |
erlehmann |
sfan5 that's not very important IMO, most apps require a restart |
11:53 |
erlehmann |
hecks, no lol |
11:53 |
erlehmann |
hecks, how do you think this would work for pixel fonts? |
11:54 |
MTDiscord |
<exe_virus> Well wouldn't pixel fonts also have the scaling and blending issue? |
11:54 |
erlehmann |
like how would minetest *know* a TTF font is not blurry, trial and error? |
11:54 |
sfan5 |
hecks: the actual scale factor is dpi/96 so that wouln't do anything |
11:54 |
sfan5 |
I'm not actually sure what we're talking about now |
11:54 |
erlehmann |
px vs pt everywhere :D |
11:54 |
hecks |
yeah so imagine if the DPI we read from the system was snapped to a multiple of 96 |
11:54 |
erlehmann |
a multiple lol |
11:55 |
erlehmann |
i bet you get complaints that way |
11:55 |
sfan5 |
that wouldn't look good but I think some game authors might want this |
11:55 |
hecks |
I would want this kind of constraint for my formspecs |
11:55 |
hecks |
I'd like to develop them assuming 96 DPI and have a guarantee it'll be an integer multiple of that |
11:56 |
hecks |
same for hud really |
11:56 |
sfan5 |
hud is ... well a mess |
11:56 |
hecks |
if the screen gets big enough, the GUI gets scaled 2x or more. that simple |
11:56 |
sfan5 |
for formspecs an element that toggles integer scaling is possible |
11:57 |
hecks |
would be useful |
11:57 |
hecks |
well the thing is, I've got HUD to work in the exact same way |
11:57 |
sfan5 |
you just have to convince v-rob ;) |
11:57 |
hecks |
that is; it's fine on 96 and 96 * n |
11:57 |
MTDiscord |
<exe_virus> Integer scaling makes perfect sense as a toggle option |
11:57 |
hecks |
people who use painted or vector graphics and vector fonts do not need this integer scaling at all |
11:57 |
hecks |
but pixel art? must have |
11:58 |
hecks |
that would also fix issues with font sizes |
11:58 |
hecks |
you could use absolute sizes for pixel fonts that you know are valid on 96 |
12:00 |
erlehmann |
i do not know how applicable this is, but in web design, ppl who need absolute pixel things and monitor dpi are usually wrong. the solution that *mostly* works is having stuff work at 12pt, 16pt, 24pt and using constraints to switch between layouts, not absolute specifications. |
12:01 |
erlehmann |
hecks, sfan5, i'd be happy if my 96x96px game icons would not look mangled anywhere, for start. oh, and pixel fonts ofc. lol |
12:01 |
hecks |
I've recently made a HTML page that uses pixel art, in the exact same way I do my formspecs, it renders fine on all devices |
12:01 |
erlehmann |
bc right now i can't even do a main menu icon that is not mangled, except if it is a single colored squase |
12:01 |
hecks |
nothing wrong with absolute sizing as long as you're smart about it |
12:02 |
hecks |
things like offsets and margins can vary but the scale of the artwork is sacred |
12:02 |
erlehmann |
the “as long as you're smart about it” thing is the problem. “most ppl aren't as talented or driven as you” is a thing. |
12:02 |
hecks |
if it's not integer, it'll look like crap |
12:02 |
erlehmann |
mostly true |
12:02 |
MTDiscord |
<Hugues Ross> yeah, pixel art will pretty much get mangled at any non-integer scale. It's why absolute sizing works particularly well for pixel art even if it's not needed for vectors/highres |
12:02 |
hecks |
anyway. somebody please fix inventory and hotbar image scaling |
12:03 |
hecks |
there is currently no way to make it look good at ANY dpi |
12:03 |
erlehmann |
for once i totally agree with hecks |
12:03 |
hecks |
i've gotten away with 48x48 items at 96 dpi but either the hotbar or the formspec list is broken (don't remember which) |
12:03 |
hecks |
one of them has a really odd scale |
12:03 |
hecks |
scaling the hotbar to match invlist is probably the least destructive fix |
12:04 |
hecks |
the hotbar skin also behaves weirdly so it would be a good opportunity to fix that |
12:04 |
erlehmann |
in general, i think the engine should bend over backwards so that mods don't want to know about dpi. the “give us dpi” thing seems to not happen in GUI frameworks that are … uh … easier to use than formspec. |
12:04 |
erlehmann |
<hecks> scaling the hotbar to match invlist is probably the least destructive fix |
12:04 |
erlehmann |
that must be tested |
12:04 |
erlehmann |
not sure if it breaks mcl* mods? |
12:05 |
hecks |
it can be a hud flag |
12:05 |
hecks |
as long as there is a way to fix it at all, it's fine |
12:05 |
hecks |
can be off by default |
12:05 |
erlehmann |
yeah |
12:05 |
sfan5 |
is the hotbar a hud element yet or still harcoded |
12:05 |
erlehmann |
not sure |
12:05 |
hecks |
possibly hardcoded |
12:06 |
erlehmann |
<hecks> you could use absolute sizes for pixel fonts that you know are valid on 96 |
12:06 |
sfan5 |
anyway it would be nice if someone could confirm #11753, doesn't seem to affect the ogles2 driver (that I use) |
12:06 |
ShadowBot |
https://github.com/minetest/minetest/issues/11753 -- Images in formspecs use "smooth" linear instead of nearest neighbor filtering |
12:06 |
erlehmann |
hecks, most pixel fonts are just given as-is |
12:06 |
hecks |
regarding DPI and game dev expectations; in Unity, you build GUIs against a reference resolution that you pick yourself |
12:06 |
hecks |
for instance, you use 1280x720 as your virtual "screen" and arrange your elements and anchors in those units |
12:06 |
erlehmann |
i have no idea what unity would even compile on my machine, isn't it something ultra new? |
12:06 |
hecks |
this is more or less how I've been working in MT too |
12:07 |
erlehmann |
> use 1280x720 as your virtual "screen" and arrange your elements and anchors in those units |
12:07 |
erlehmann |
how to address mobile? |
12:07 |
erlehmann |
also, 1400x1050 here, how would it be scaled? |
12:07 |
sfan5 |
most games do not run on mobile and desktop at the same time |
12:07 |
hecks |
anchors handle screen aspect ratios |
12:07 |
hecks |
you'd probably have elements anchored to various corners |
12:08 |
hecks |
and maintain some headroom to allow the screen to scale |
12:08 |
erlehmann |
well, i know how that breaks down in web design. |
12:08 |
erlehmann |
i have done it too, you need a minimum size to enforce |
12:08 |
hecks |
anyway, I've had success just assuming 1280x720 for mibi's formspecs |
12:08 |
erlehmann |
or the elements mash into each other at small sizes |
12:08 |
MTDiscord |
<Hugues Ross> I don't see a problem enforcing a minimum resolution in a game |
12:09 |
erlehmann |
hecks, what's your showcase game/mod anyway? i wanna test it |
12:09 |
hecks |
if I just had a thing which will bump it to 2x and 4x on 1080p and 4K screens respectively, I'd be happy with that |
12:09 |
hecks |
you don't get to test it yet |
12:09 |
hecks |
but I can show you the GUI I guess |
12:09 |
erlehmann |
uh ok |
12:09 |
erlehmann |
yeah i just wanna check it out on different screen sizes |
12:09 |
erlehmann |
to see how well it performs when i poke it |
12:10 |
erlehmann |
bc arguably “reduce resolution” is the only thing i know to improve performance if everything else fails |
12:10 |
erlehmann |
(not that i need to rn) |
12:11 |
hecks |
at the moment my gui only looks good at 96 and its multiples |
12:11 |
erlehmann |
anyways, hecks, if you are interested in improving the wireshark dissector, i'm with you |
12:12 |
erlehmann |
hecks do you have experience with network fuzzing, afl-style? bc i do not |
12:12 |
sfan5 |
what about it? |
12:12 |
hecks |
not really, I'm just encouraging people to try and exploit MT with spoofed packets to find bugs. |
12:12 |
hecks |
me neither but someone should probably do some fuzzing =] |
12:12 |
erlehmann |
hecks, try running mt with ubsan, asan or tsan and weep ;) |
12:13 |
erlehmann |
(asan is dog slow though) |
12:13 |
erlehmann |
hecks do you know about the thing where you are connected but not really and you can already see chat btw? |
12:14 |
erlehmann |
like, a player can see chat from before they spawned |
12:14 |
sfan5 |
is that a hyptothetical or did you test it? if so, why not go an open a bug |
12:14 |
hecks |
I suppose the server doesn't check whether someone has completed the whole login process? |
12:14 |
erlehmann |
i was told it is possible to stay in that state |
12:14 |
erlehmann |
but i haven't gotten any code that can do it |
12:15 |
erlehmann |
to surveil server chat |
12:15 |
hecks |
that sounds easy to try, just comment out parts of the login process |
12:15 |
erlehmann |
sfan5 you can easily test it by throttling your connection and joining a chatty server like catlandia |
12:15 |
hecks |
oh right, you could just block up packets, but I guess you'll get timed out eventually |
12:15 |
|
Fleckenstein joined #minetest-dev |
12:15 |
hecks |
maybe the server should time you out if you do not complete the login process within a few seconds |
12:16 |
erlehmann |
hi Fleckenstein |
12:16 |
erlehmann |
hecks, uh no. don.t do it. i am on 2g (3g got shut down). |
12:16 |
erlehmann |
i need a new mobile dongle |
12:16 |
erlehmann |
minetest is surprisingly well playable on low bandwith once you have dl'd the assets |
12:16 |
hecks |
it's kinda annoying that someone can join a server in ghost mode like this but the admin can still see you connecting |
12:17 |
hecks |
as for bandwidth - depends on the mods |
12:17 |
hecks |
nodes work well but objectrefs are extremely wasteful |
12:17 |
hecks |
games and mods that manipulate objects a lot will kill your connection |
12:17 |
erlehmann |
hecks, see, “maybe we should do a thing that might break your personal setup” is the reason why i'd like to present bugs with a fix attached |
12:17 |
hecks |
I meant commenting things out on your own build of the client, obviously |
12:18 |
hecks |
for testing |
12:18 |
erlehmann |
oh ok |
12:18 |
hecks |
did you think I'm about to commit that to master ,ó |
12:18 |
erlehmann |
hecks i have a lot of experience in debugging wasteful network traffic. it was one of the reasons that mineclonia split from mcl2. i think ppl like Fleckenstein just have cool gamer rigs and fast internet, so it is hard for them to even reproduce half of the stuff. |
12:19 |
erlehmann |
hecks let's say i am a bit biased bc of your past behaviour ^^ |
12:19 |
erlehmann |
but i get it, you try to not break stuff on purpose here! |
12:20 |
erlehmann |
btw, i am of the opinion that devs should always try to have worse constraints than users so that stuff runs smothly. e.g. when i was programming audio synthesizer stuff, i'd use a machine older than my users to make it likely that i encounter performance problems during development, and they do not. |
12:21 |
erlehmann |
if i had a software team to manage, they'd all get underpowered netbooks and a throttled 3g connection and get told to make it work ;d |
12:21 |
erlehmann |
;D |
12:21 |
erlehmann |
that's not the main reason i have older hardware though |
12:22 |
hecks |
well, that stale channel decoupling PR was the result of trying to run a server with 1 mbps upload |
12:22 |
erlehmann |
(before someone thinks that) |
12:22 |
hecks |
so there's something to that |
12:22 |
hecks |
but that still doesn't resolve the object properties bottleneck |
12:23 |
hecks |
if you want to help network issues and have lots of machines and time to waste, please please test #10699 |
12:23 |
erlehmann |
regarding improving traffic, one of the easiest things would be to silently, or with a warning, not set properties again if they already have that value. |
12:23 |
ShadowBot |
https://github.com/minetest/minetest/issues/10699 -- Break up the message queue by category by hecktest |
12:23 |
hecks |
this PR was basically done but it needs testing for crazy edge cases |
12:23 |
erlehmann |
there are so many mods setting stuff way too often |
12:23 |
hecks |
we shouldn't warn, we should CACHE properties |
12:23 |
erlehmann |
to me, every edge case is just … a case. |
12:23 |
hecks |
and only send what changed, not the whole thing |
12:24 |
erlehmann |
hecks it should warn bc at least with mcl2 that object setting was usually indicative of doing wasteful recalculations in a global step. |
12:24 |
erlehmann |
it still is |
12:24 |
|
tech_exorcist joined #minetest-dev |
12:25 |
hecks |
that sounds a little pedantic |
12:25 |
|
tech_exorcist joined #minetest-dev |
12:25 |
hecks |
sometimes you do need to do recalculations and set a property every frame |
12:25 |
hecks |
there is really no reason for the engine not to just auto optimize this |
12:26 |
erlehmann |
look, in the *vast* majority of cases i have seen, it was useless busywork. and it rears its ugly head when typical servers have less resources than dev machines. |
12:26 |
sfan5 |
if a property needs to be set every frame that'd be a prime usecase for a CSM |
12:27 |
hecks |
not if the property is gameplay significant like a collider's dimensions |
12:27 |
erlehmann |
hecks, if you are interested – just compare the traffic of idling in mineclone2 0.71 to the mineclonia branch “cora-production” (that is what runs on oysterity) and then we can talk in-depth about it |
12:27 |
hecks |
it's also a prime usecase for shaders if it's a purely visual thing =] |
12:27 |
sfan5 |
true |
12:28 |
erlehmann |
as always, benchmarking object updates is important |
12:29 |
erlehmann |
for mineclonia, for example, it turned out that being able to be on fire multiple times was much more influential than updating the fire texture (which still happened too often) |
12:29 |
erlehmann |
but endermen updates are horrible |
12:29 |
hecks |
because it's more objects? |
12:29 |
hecks |
i'm pretty sure someone told me that updating ANY property on an objects sends all of them |
12:30 |
hecks |
and if true, that's the highest bottleneck |
12:30 |
erlehmann |
yeah, cora got up to 100kbps setting herself on fire with the /burn command i added. i verified it, but stopped at 500k |
12:30 |
erlehmann |
uh, typo, cora got to 1000kpbs |
12:30 |
hecks |
it's not hard to optimize this |
12:31 |
erlehmann |
by which i want to say, you can lag out other players by setting them on fire. hilarious, isn't it? |
12:31 |
erlehmann |
oh, none of the optimizations were hard |
12:31 |
hecks |
for each client, maintain a hashmap of player to entity that contains the known property set for that client |
12:31 |
erlehmann |
it's just that the simplest thing that works in singleplayer breaks down if you have 20 players |
12:31 |
hecks |
use that to determine what actually must be sent |
12:31 |
hecks |
it would cost a bit of ram but not a whole lot |
12:31 |
erlehmann |
that's why i think there should be a warning if sth is set to the value it already has |
12:32 |
hecks |
no, you see |
12:32 |
erlehmann |
i bet Fleckenstein can chime in on this. Fleckenstein if the engine warned, would you have cached more obj property setting? |
12:32 |
hecks |
a check for that in lua might be slower than an engine side check |
12:32 |
sfan5 |
so far it all seems to be tales of MCL's awful code |
12:32 |
hecks |
additionally in luajit, branches can mess with JIT trace generation |
12:33 |
hecks |
and often it's just less code when you don't check something |
12:33 |
hecks |
and CPUs tend to like predictable code |
12:33 |
hecks |
and smaller code |
12:33 |
hecks |
so it's not such a clear cut thing |
12:33 |
erlehmann |
sfan5 you can of course say that mod authors are behaving in a stupid manner, but i think that letting them, without any benefit to anything, is the problem. |
12:33 |
sfan5 |
I bet not sending updates on redundant set_properties calls would do more than splitting up the packet to re-send only individual properties |
12:33 |
hecks |
then, emitting such a warning would be a very annoying thing when you know what you're doing |
12:33 |
erlehmann |
look, just *measure* it |
12:33 |
erlehmann |
we measure all of our stuff |
12:34 |
erlehmann |
at mineclonia |
12:34 |
hecks |
I mean, figuring out the delta of the properties would automatically handle the duplicate thing |
12:34 |
hecks |
as it would generate an empty delta |
12:34 |
erlehmann |
“we had massive server lag before checking if redundant stuff is sent” is kinda proof of that it works. it could work better. |
12:34 |
hecks |
but I would not yell at the player unless logging was set to verbose |
12:34 |
hecks |
I mean, at the server admin |
12:34 |
erlehmann |
no, yell at the dev. so verbose logging is fine. |
12:34 |
sfan5 |
nobody ever looks at the verbose log |
12:35 |
erlehmann |
i have written a script to fish out average packet count from the verbose log and postprocess it, others are using it too |
12:35 |
hecks |
sadly even if it's an option, you have at least one more jz instruction for every set_property call sent to any player |
12:35 |
erlehmann |
admins of crashy servers look at the thing |
12:35 |
hecks |
and more code in icache |
12:35 |
hecks |
are you sure it's worth it to prevent people from doing stupid things they should know better than to do |
12:35 |
erlehmann |
yes |
12:35 |
hecks |
not to mention there are legitimate reasons to just set the duplicate property |
12:35 |
|
proller joined #minetest-dev |
12:35 |
hecks |
just to keep things simple |
12:35 |
erlehmann |
i'd bet cold hard cash on it |
12:36 |
erlehmann |
hecks, worrying about engine checks being CPU-bound sounds like premature optimization. the clients network is the bottleneck! |
12:36 |
erlehmann |
besides, i am writing you from: Intel(R) Core(TM) Duo CPU T2400 @ 1.83GHz |
12:37 |
erlehmann |
surely you can see if the lua check is good enough for me, the c check will be even better |
12:37 |
hecks |
we would optimize the network automatically in this case |
12:37 |
hecks |
doing the best possible thing without the user having to care about it |
12:37 |
erlehmann |
yes |
12:37 |
erlehmann |
i want this |
12:37 |
hecks |
given that the engine already would do the best possible thing |
12:37 |
hecks |
what's the point of warning the user? |
12:37 |
erlehmann |
if it is fully backwards compatible |
12:37 |
erlehmann |
the point is that i have seen a bunch of stuff, not only in mcl2, where the mod code recalculates the value before it is sent out |
12:38 |
hecks |
it should be, I mean, hopefully not a single property executes any important side effect on a duplicate assignment |
12:38 |
erlehmann |
which also creates server load |
12:38 |
hecks |
this sounds like mcl problems |
12:38 |
erlehmann |
hopefully lol |
12:38 |
sfan5 |
modders writing dumb code is a law of nature |
12:39 |
erlehmann |
hecks you can talk to Fleckenstein about the merits of spamming properties in a global step. but even though the code is stupid, Fleckenstein is not. he did the simplest thing that worked and it works fine … locally. or with a big rig. |
12:39 |
erlehmann |
i think it is the responsibility of the engine to warn here, so ppl are aware of it |
12:39 |
hecks |
the MT implementation of properties is stupid, it's nobody's fault |
12:39 |
erlehmann |
look, you warn about other stuff too, like tha texture alpha thing |
12:40 |
hecks |
I've talked to people who got upwards of 10 Mb/s per client from entities |
12:40 |
erlehmann |
and modders fix it |
12:40 |
sfan5 |
I half agree with hecks here, the engine cannot do code review for you |
12:40 |
hecks |
it's sometimes okay to warn the user about things but this isn't one of those cases |
12:40 |
erlehmann |
no, but if the engine is doing a workaround, ppl *should* be made aware of it |
12:40 |
sfan5 |
on the other hand updating a single property to be the same it already was is usually stupid |
12:40 |
hecks |
it's too arbitrary |
12:40 |
sfan5 |
same with HUD elements |
12:40 |
erlehmann |
it's stupid, but it is by far the most common cause of lag i have seen |
12:40 |
erlehmann |
haha the HUD element thing was in minetest game too, right? |
12:40 |
hecks |
I can see myself just intentionally allowing a duplicate property set once in a while and I don't want that polluting my logs or eating CPU time |
12:41 |
erlehmann |
not sure actually |
12:41 |
erlehmann |
i have to look |
12:41 |
hecks |
we don't delta HUD either? |
12:41 |
hecks |
sounds like solving one would help with the other |
12:41 |
erlehmann |
hecks, just look at mineclonia performance fixes and how much traffic it saves, it can short cut the whole conversation |
12:41 |
hecks |
HUD is easier because there's only one HUD per client |
12:41 |
erlehmann |
other mods have similar problems |
12:42 |
hecks |
and no extra hashmap is needed |
12:42 |
sfan5 |
you don't need that hashmap for entities either |
12:42 |
sfan5 |
if a client knows about an entity its info will be up-to-date |
12:42 |
hecks |
shouldn't it be per player per entity? |
12:43 |
erlehmann |
i don't care about the implementation, i just think that if a bunch of modders write code that performs and it can be fixed automatically and warned about, it should be done. well-tested obv. |
12:43 |
sfan5 |
maybe I'm missing something but I can't think of why that would ever desync |
12:43 |
erlehmann |
performs badly, i mean |
12:43 |
hecks |
hmm |
12:43 |
erlehmann |
sfan5 stepping in and out of range? |
12:43 |
hecks |
with the hashmap, it might be possible to, yeah what he said |
12:44 |
hecks |
not forget the whole delta at the edge of the line of sight, but wait a bit before deleting the map entry |
12:44 |
hecks |
although |
12:44 |
hecks |
client side, entities don't get "unloaded", it's a delete packet |
12:44 |
sfan5 |
if the server decides you're too far you get a "this entity disappeared" packet |
12:44 |
hecks |
so maybe that's moot |
12:44 |
erlehmann |
hmmm |
12:44 |
hecks |
it's literally the same packet as a removal |
12:45 |
hecks |
and when it comes back into view, it's as if it were just spawned |
12:45 |
erlehmann |
well, now that you are aware of it being a problem, i'm interested in what you come up with. i hope there are no desyncs possible. |
12:45 |
hecks |
I guess it wouldn't be hard to add a map to it if a shared delta set doesn't work for some reason |
12:45 |
erlehmann |
mcl2 0.71 is probably the best test case, as mcl2 >0.71 already merged stuff from mineclonia |
12:45 |
hecks |
I don't feel smart enough today to figure this out |
12:46 |
sfan5 |
if anyone wants to write code the HUD thing should be fixed first, everything needed is already there on the server it just doesn't skip sending |
12:46 |
hecks |
hud network deltas? |
12:46 |
hecks |
ah so it already has a cache, just doesn't use it |
12:46 |
sfan5 |
hud packets already only set individual properties |
12:46 |
erlehmann |
i think delta thing is overengineered tbh |
12:46 |
sfan5 |
and the server knows the values of them |
12:46 |
hecks |
uh, pardon? |
12:47 |
hecks |
it needs not be a binary delta, I just mean delta as in "send what changed" |
12:47 |
erlehmann |
ah ok |
12:47 |
hecks |
but honestly a binary delta of the state sounds like a clean solution, if the state is easily expressed as a binary buffer |
12:47 |
hecks |
and sent as such |
12:47 |
erlehmann |
hecks, in that case i hereby eat my words |
12:48 |
sfan5 |
that sounds like one of those smart solutions that will bite you in the ass in the long run but I can't think of anything yet |
12:48 |
sfan5 |
¯\_(ツ)_/¯ |
12:48 |
hecks |
there is a third area where this sort of thing could be done |
12:48 |
hecks |
and that is formspecs |
12:48 |
hecks |
why are we resending a whole formspecs to change one element again? |
12:48 |
erlehmann |
“that sounds like one of those smart solutions that will bite you in the ass in the long run but I can't think of anything yet” is exactly the feeling i have when ppl ask me for “how would this even break” most of the time |
12:48 |
hecks |
why not just send something like a text diff from the already opened form |
12:48 |
erlehmann |
uh oh |
12:49 |
sfan5 |
the client can throw away the opened formspecs at any time when the user presses Esc |
12:49 |
erlehmann |
yeah, or automatically, even without esc |
12:49 |
hecks |
form sends are reliable packets, yes? |
12:49 |
sfan5 |
if/when formspecs are rewritten it'd be better (okay not sure actually) to make them stateful |
12:49 |
erlehmann |
(think CSM provided forms) |
12:49 |
sfan5 |
yes |
12:49 |
hecks |
I mean closing the form with esc is not a problem if the client still remembers what the last opened form was |
12:50 |
sfan5 |
it is also possible to open an entirely different form in a split second without server involvement or CSM |
12:50 |
hecks |
and since the client only maintains one immediate and one inventory formspec at any given time |
12:50 |
hecks |
I don't see a reason why this wouldn't work out of the box |
12:50 |
hecks |
even without checking the form ID |
12:50 |
sfan5 |
thought better question: if you send a diff for an old formspecs and it's already closed, does it matter? |
12:50 |
hecks |
because honestly, it would even optimize similar forms |
12:50 |
sfan5 |
though* |
12:51 |
hecks |
whichever show_formspec form was last, and whichever inventory formspec was last should be consistent state already |
12:51 |
erlehmann |
look, if you want to optimize formspecs i have a MUCH better idea for you |
12:51 |
hecks |
shouldn't be much trouble for the client to just hold on to those two strings and only receive diffs over them |
12:51 |
erlehmann |
actually it is one coming from wuzzy |
12:52 |
erlehmann |
static formspecs for nodes |
12:52 |
hecks |
isn't that already a thing |
12:52 |
sfan5 |
that is already on my todo list |
12:52 |
hecks |
in metadata |
12:52 |
erlehmann |
it can reduce perceived lag by A LOT |
12:52 |
sfan5 |
hecks: only if you put them in meta |
12:52 |
erlehmann |
sfan5, goood thx |
12:52 |
hecks |
oh, you want them per CID |
12:52 |
sfan5 |
erlehmann: I also already told you that it is on my todo list |
12:52 |
hecks |
that sounds useful |
12:52 |
erlehmann |
sfan5, i forgot |
12:52 |
erlehmann |
tbh |
12:53 |
hecks |
however, updating the per CID form could still use a diff =] |
12:53 |
hecks |
no conflict here |
12:53 |
erlehmann |
oh you |
12:53 |
erlehmann |
honestly, doubt it makes make sense to diff formspecs. all the formspec performance problems i am aware of are latency / prediction things. |
12:53 |
hecks |
I like the diff thing because it requires no changes to anything |
12:53 |
erlehmann |
i am not aware of everything though |
12:53 |
hecks |
really. |
12:53 |
hecks |
erlehmann |
12:54 |
hecks |
have you tried having a real time clock in a player's inventory |
12:54 |
erlehmann |
then the remaining thing is “is it backwards compatible” |
12:54 |
hecks |
or any kind of dynamic display |
12:54 |
erlehmann |
realtime compass lol |
12:54 |
erlehmann |
horrible |
12:54 |
hecks |
are you aware that the server knows nothing about what a player is doing with their inventory formspec |
12:54 |
hecks |
and if you want to have an RTC, you basically have to send the player their whole inv form every 10 seconds |
12:54 |
hecks |
and yeah, any time the form is dynamic in any way |
12:55 |
hecks |
you're sending the whole thing for every small change |
12:55 |
hecks |
of *course* it needs diffs |
12:55 |
erlehmann |
in that case, look at the proxy anon5 build |
12:55 |
erlehmann |
i believe it was made for the use case of “my whole inventory is shulkers of shulkers and their meta is HUGE” |
12:55 |
erlehmann |
built |
12:55 |
hecks |
that doesn't solve anything |
12:55 |
hecks |
regarding forms |
12:56 |
erlehmann |
na, but it helps to dissect the problem better than wireshark ig |
12:56 |
hecks |
you could catch entirely duplicate forms with a packet shark but |
12:56 |
|
kilbith joined #minetest-dev |
12:56 |
hecks |
I don't need to inspect packets to know what the problem is here ,ó |
12:56 |
erlehmann |
ok |
12:57 |
erlehmann |
well i often try to measure to figure out if my intuition was wrong. especially if i am *really* sure. but i think you might be right, the RTC case seems bad enough. |
12:57 |
erlehmann |
although i think an RTC should maybe be a CSM actually |
12:58 |
erlehmann |
well, regardless |
12:58 |
erlehmann |
hecks, if you feel like telling me next time you play with packets, pls do. i am interested. |
12:58 |
hecks |
probably not any soon, sorry |
12:58 |
erlehmann |
oh ok |
13:00 |
hecks |
too busy with graphics, although denial of service and exploitation with crafted packets is a pretty serious thing |
13:00 |
erlehmann |
do you fuzz your graphics stuff btw? |
13:00 |
erlehmann |
if you have proper unit tests i can try to marry them to afl-fuzz |
13:00 |
erlehmann |
it's not that hard *if* you have tests |
13:00 |
hecks |
no reason to |
13:01 |
erlehmann |
uh, aren't … crashes … a reason? |
13:01 |
hecks |
we might want to do this if server sent shaders were on the menu |
13:01 |
hecks |
to test any sanitizer we might be using to, well, sanitize the shaders |
13:02 |
hecks |
but at the moment, fuzzing OpenGL would only reveal graphics vendor bugs, not ours |
13:02 |
erlehmann |
sanitizing *usually* is bullshit, no idea why it could work on shaders though |
13:02 |
erlehmann |
also, the server can already send all kinds of crap to clients to crash them if it wants |
13:02 |
erlehmann |
like, if you hate your users lol |
13:02 |
hecks |
the idea of sanitizing shaders is to prevent more trivial exploits on the shader compiler such as absurdly long identifiers leading to overflows because some guy hardcoded the buffer for that to [256] |
13:02 |
erlehmann |
ah ok |
13:02 |
kilbith |
it seems like we have two cretins on the channel |
13:03 |
hecks |
:o |
13:03 |
kilbith |
I'm reading the logs muthafucka |
13:03 |
hecks |
I'm staying out of this... |
13:03 |
hecks |
weren't you sleeping or something |
13:03 |
erlehmann |
kilbith it seems, talent or not, that you are more arrogant than everyone here. if hecks and i can get along, you can too. just try. |
13:03 |
kilbith |
doesn't matter |
13:03 |
erlehmann |
and stop writing “i am better than all of you” or talking about france lol |
13:04 |
erlehmann |
hecks, i just got an idea. i think i should make some kind of thing that instead of kicking griefers who try to crash the server, also kicks the offender by means of a client crash. |
13:04 |
erlehmann |
that way they will do the bug fixing for me |
13:05 |
erlehmann |
:D |
13:05 |
hecks |
i am willing to put up with a little sass if there's quality code behind it. this statement is my personal opinion and does not reflect any official policy of the minetest developers. |
13:05 |
hecks |
if my code (code itself) is trash i'll be glad to hear why |
13:06 |
hecks |
as long as whoever is saying it has a clue what they're talking about |
13:06 |
erlehmann |
i think it's pretty important to focus on the code too. |
13:06 |
erlehmann |
instead of calling each other names |
13:07 |
erlehmann |
so about the dpi thing, can i have my pixel fonts back for the time being until you figure out how to bend freetype to your will? i promise to do sth useful with it. |
13:07 |
hecks |
I don't think I touched anything to do with fonts? |
13:07 |
hecks |
correct me if I'm wrong |
13:08 |
hecks |
did I accidentally mop up some obscure irrlicht bitmap font feature |
13:08 |
hecks |
(pretty sure I didn't because DIB was left in just so those still compile) |
13:08 |
erlehmann |
no, sfan5 did and has a PR for fixing it. the question was not for you. |
13:08 |
hecks |
ah. |
13:08 |
sfan5 |
well I wanted to hear hecks opinion on it |
13:08 |
erlehmann |
sorry, i should have made that clear |
13:08 |
hecks |
I honestly think there is no difference between a badly scaled TTF pixel font and a badly scaled bitmap pixel font |
13:08 |
hecks |
both will look equally trash |
13:09 |
sfan5 |
bitmap fonts don't get scaled |
13:09 |
erlehmann |
the thing is that the pixel fonts *aren't* scaled |
13:09 |
sfan5 |
that's the thing |
13:09 |
erlehmann |
that is why they are crisp |
13:09 |
hecks |
*at all*? |
13:09 |
sfan5 |
Minetest picks from the sizes the font author shipped |
13:09 |
erlehmann |
yep, that is why it works |
13:09 |
hecks |
well, it "works" if they don't scale for integer multiple DPIs |
13:09 |
hecks |
the text itself probably looks fine, but the alignment is still shot |
13:09 |
sfan5 |
nobody has ever used it for this purpose though, it's missing coloring, bold and italic and was also broken for several years |
13:10 |
sfan5 |
but technically it works for pixel fonmts |
13:10 |
sfan5 |
fonts* |
13:10 |
hecks |
our time is probably better spent implementing integer scaling |
13:10 |
hecks |
since this seems like it hasn't ever worked correctly in the first plaace |
13:10 |
hecks |
let me guess that this is another thing that only MCL uses |
13:10 |
erlehmann |
the missing coloring is a feature imo. i have made about >500 unifont glyphs that are all black and white, *solely* so i could have a font in which emoji are not colored. also i absolutely hate the ppl spamming rainbow text with their hack clients. |
13:10 |
erlehmann |
hecks, no, games can't use it |
13:10 |
hecks |
if so, deprecate and keep until 6.0 but axe it after |
13:11 |
hecks |
if games couldn't ever use those fonts then axe them |
13:11 |
erlehmann |
that way you remove “crisp pixel fonts” |
13:11 |
sfan5 |
that's what makes it even more funny |
13:11 |
hecks |
I have crisp pixel fonts with TTF |
13:11 |
sfan5 |
the only way someone could have used is is by individual choice from users |
13:11 |
sfan5 |
yet nobody ever did |
13:11 |
erlehmann |
“it only breaks for ppl who actually rely on the feature” |
13:11 |
hecks |
I've tested: Press Start, Perfect DOS and Terminus in MT, all ttf versions |
13:11 |
hecks |
they work |
13:12 |
hecks |
I use terminus as the console font |
13:12 |
erlehmann |
hecks, bc your dpi is close enough to 96 probably |
13:12 |
hecks |
my dpi *is* 96 |
13:12 |
sfan5 |
erlehmann: if you rely on this feature show me the .png + .xml pixel font you use with MT |
13:12 |
sfan5 |
you have 30 seconds |
13:12 |
erlehmann |
sfan5 the builtin one |
13:12 |
sfan5 |
not a pixel font, rejected |
13:12 |
hecks |
but this just keeps sounding like the whole DPI system was a mistake |
13:12 |
erlehmann |
uh, i don't get rainbow spam? |
13:12 |
hecks |
and integer constraining it would fix everything |
13:12 |
hecks |
he probably means the irrlicht builtin |
13:12 |
erlehmann |
yeah i think it *can* be fixed |
13:13 |
erlehmann |
without retaining the PNG fonts |
13:13 |
hecks |
I'd axe it if I could be bothered to figure out exactly how |
13:13 |
MTDiscord |
<josiah_wi> wb hecks |
13:13 |
hecks |
I left in "silent" DIB support in the meantime to let it compile |
13:13 |
hecks |
hi |
13:13 |
sfan5 |
better question is what are we discussing this for |
13:13 |
sfan5 |
game authors can't ship fonts |
13:13 |
hecks |
(do NOT start relying on DIBs for anything or I'll find a way to axe it out of spite) |
13:13 |
erlehmann |
i think it can be axed once the DPI mess is worked out so that it doesn't degrade user experience |
13:13 |
erlehmann |
DIBs? |
13:13 |
sfan5 |
the current usecase for interger scaling is formspec design |
13:14 |
hecks |
forget I said anything |
13:14 |
hecks |
;] |
13:14 |
hecks |
pardon me but |
13:14 |
hecks |
we don't have server sent TTFs yet right? |
13:15 |
hecks |
the font and its size is actually all picked by the client anyway |
13:15 |
sfan5 |
indeed |
13:15 |
hecks |
so what's stopping a poor oppressed 72 DPI user from just correcting his pixel font size |
13:15 |
sfan5 |
like I said integer scaling would help you design guis |
13:15 |
hecks |
integer scaling would help anyway |
13:15 |
hecks |
I can design guis just fine, they just look like trash if it's not divisible by 96 |
13:16 |
sfan5 |
nothing, we infact have a new setting that makes it easy to correct the dpi |
13:16 |
erlehmann |
look, i think a button “render 1pt font as 1px font” + a scaling thing could solve this as well |
13:16 |
erlehmann |
the problem is that this doesn't exist ig? |
13:16 |
hecks |
1pt as 1px is equivalent to 96 dpi |
13:16 |
hecks |
72 dpi seems like a mistake anyway |
13:17 |
hecks |
a mode for forms that renders them at the closest multiple of 96, that's all I want for christmas ,ó |
13:17 |
erlehmann |
come on its absurdly rare that ppl have a dpi that is exactly a single value |
13:17 |
hecks |
96 is literally the most common dpi on computer monitors |
13:18 |
hecks |
and that's also the dpi setting where our engine treats 1pt as 1px |
13:18 |
hecks |
it makes perfect sense to just make that the assumed 1x |
13:18 |
hecks |
because that's when everything is pixel perfect |
13:21 |
erlehmann |
well i just tried on 2 machines one has 96, one has 90 (which still works btw) |
13:22 |
erlehmann |
hecks 72 dpi is apple default or what, while 96 is windows? |
13:24 |
erlehmann |
sfan5 hecks btw, what do to with pixel fonts in your free time if you like riddles http://news.dieweltistgarnichtso.net/bin/plainpbm2nonogram-sh.html |
13:25 |
erlehmann |
and yes, this does not parse all valid PBMs |
13:26 |
hecks |
i do not have free time |
13:26 |
erlehmann |
oh ok |
14:15 |
MTDiscord |
<josiah_wi> I fixed that compiler error with GCC4.9. Using auto to determine a type is a little bit dangerous, because you may not realize you're passing a raw pointer to a constructor that wants a unique_ptr. |
14:15 |
MTDiscord |
<josiah_wi> Names will go unmentioned to protect the inoccent. xD |
14:16 |
MTDiscord |
<josiah_wi> mostly innocont* |
14:16 |
MTDiscord |
<josiah_wi> inoccent* |
14:17 |
MTDiscord |
<josiah_wi> I'm very curious why this doesn't fail on newer versions of the compiler. |
14:23 |
|
calcul0n__ joined #minetest-dev |
14:41 |
MTDiscord |
<josiah_wi> Use of a deleted ostringstream operator. I will need to consult about this one. |
14:45 |
MTDiscord |
<josiah_wi> hecks, png.cpp line 40, basic_ostringstream(const std::basic_ostringstream&) constructor was implicitly deleted because the default definition would be ill-formed (says GCC). |
14:46 |
MTDiscord |
<josiah_wi> (src/utils/png.cpp) |
14:49 |
|
tekakutli joined #minetest-dev |
14:51 |
sfan5 |
copy elision should take care of that |
14:52 |
sfan5 |
if you want it fixed just swap "auto name_here = std::ostringstream(std::ios::binary);" for "std::ostringstream name_here(std::ios::binary);" |
14:53 |
erlehmann |
hey hecks i just triggered a new (?) heap butter overflow on the client. do you want to go with me through how to possibly turn into something other than a crash? |
14:53 |
erlehmann |
i'd really like to learn that |
14:53 |
erlehmann |
josiah_wi wow cool |
14:58 |
|
tech_exorcist joined #minetest-dev |
15:09 |
hecks |
I mean if the overflow can be fixed, it's probably not important to determine how it can be exploited |
15:09 |
hecks |
it should be fixed either way |
15:10 |
hecks |
I hope you are doing all this in a debugger and can tell us where it crashes and what exactly corrupts the memory |
15:25 |
|
Fixer joined #minetest-dev |
15:56 |
|
Extex joined #minetest-dev |
15:57 |
|
tech_exorcist joined #minetest-dev |
16:01 |
|
hecks joined #minetest-dev |
16:11 |
|
m42uko joined #minetest-dev |
16:30 |
|
appguru joined #minetest-dev |
16:37 |
erlehmann |
hecks it is more that i want to practice exploitation |
16:40 |
MTDiscord |
<josiah_wi> Thank you sfan5, that fixed the error wonderfully. |
16:40 |
MTDiscord |
<josiah_wi> Every error it gets worse: "#error Minetest cannot be built without exceptions or RTTI" |
16:41 |
hecks |
ah, understood |
16:42 |
sfan5 |
well don't disable exceptions or rtti |
16:43 |
MTDiscord |
<josiah_wi> Haha, I hope I can earn your confidence that I would not do something like that. |
16:45 |
MTDiscord |
<josiah_wi> I will investigate the circumstances triggering the error, in case it is a false alarm. |
16:46 |
|
Extex joined #minetest-dev |
16:56 |
MTDiscord |
<josiah_wi> There is nothing wrong with the rtti/exception detection, and I am finding it difficult to figure out whether gcc4.9 supports rtti and exceptions or not. |
17:00 |
sfan5 |
of course it does |
17:01 |
MTDiscord |
<josiah_wi> I mean, it definitely ought to. And according to stack overflow RTTI is always enabled by default in GCC. I found a flag to explicitly enable exceptions, and I'm testing that, but I have no clue what is up with the RTTI. |
17:03 |
sfan5 |
you can try -frtti and -fexceptions but that should not be neeeded |
17:03 |
sfan5 |
btw make VERBOSE=1 shows the commands it is invoke |
17:20 |
MTDiscord |
<josiah_wi> The Ninja build generator shows the command that was executed any time there is a build failure. |
17:21 |
MTDiscord |
<josiah_wi> I love it. |
17:21 |
MTDiscord |
<josiah_wi> Ninja build system* |
17:51 |
|
tech_exorcist joined #minetest-dev |
18:02 |
MTDiscord |
<josiah_wi> sfan5, it appears the __cpp_rtti and __cpp_exception macros are not implemented in GCC4.9, despite RTTI and Exceptions being enabled. |
18:04 |
MTDiscord |
<josiah_wi> __cpp_exceptions* |
18:10 |
|
fluxionary joined #minetest-dev |
18:12 |
sfan5 |
that sounds wrong and contrary to the C++ standard |
18:12 |
sfan5 |
which OS / distro are you testing on? |
18:56 |
MTDiscord |
<josiah_wi> Linux, Alt Linux Starter Kit. I installed gcc4.9 and g++4.9 from their repository. |
18:56 |
MTDiscord |
<josiah_wi> I found a case on stack overflow of GCC not implementing a macro for whether elision is guaranteed, so it is possible. It is also possible something is configured incorrectly. |
19:00 |
MTDiscord |
<josiah_wi> I confirmed that neither macro is defined by splitting it into two separate checks, and the verbose output shows that -std=gnu++11 is set. There are no flags set disabling rtti and exceptions, so they are almost certainly enabled. |
19:02 |
MTDiscord |
<josiah_wi> Both macros are part of the standard since before C++11, according to cppreference.com. |
19:03 |
sfan5 |
I tried to look for them in the standard PDFs so maybe they're actually not |
19:04 |
sfan5 |
+and didn't find anything |
19:04 |
MTDiscord |
<josiah_wi> Was GCC4.9 picked as the minimum version arbitrarily? Did Minetest ever compile on it? lol. |
19:05 |
sfan5 |
the minimum versions were picked according to what worked, obviously |
19:07 |
MTDiscord |
<josiah_wi> I was thinking finding the PR that added the macro checks would be useful, to understand the discussion that went on then and how that would affect deciding how to go forward. |
19:08 |
sfan5 |
ha |
19:08 |
sfan5 |
you'd be disappointed, there was no discussion |
19:09 |
MTDiscord |
<josiah_wi> It's a single commit, "Add preprocessor check for weird (incorrect) build configurations" |
19:09 |
|
proller joined #minetest-dev |
19:09 |
MTDiscord |
<josiah_wi> Going by this, I should probably be doubly sure my build configuration is not "weird (incorrect)" |
19:10 |
MTDiscord |
<josiah_wi> You authored this commit, do you have any recollection of what this improper configuration was? The check replaced a Irrlicht version check that noted Irrlicht 1.8.2 is known to be broken. |
19:10 |
MTDiscord |
<josiah_wi> Would my Irrlicht configuration have any possibility of breaking my Minetest configuration? |
19:11 |
sfan5 |
unless you accidentally build Minetest with the same flags as Irrlicht, which has -fno-exceptions -fno-rtti: no |
19:11 |
|
kilbith joined #minetest-dev |
19:12 |
MTDiscord |
<josiah_wi> Well, then, what would you like me to do? This probably is not high priority, so if it is a difficult question there is probably no rush to answer it right away. |
19:36 |
MTDiscord |
<josiah_wi> With the rtti/exceptions check commented out, the client compiles and devtest is running as smoothly as can be expected on my computer. |
20:05 |
|
proller joined #minetest-dev |
21:06 |
|
kilbith joined #minetest-dev |
23:27 |
MTDiscord |
<josiah_wi> minetestserver also compiles fine. |
23:47 |
|
proller joined #minetest-dev |