Time Nick Message 19:02 Guest54 rubenwardy have you thought about semgrep for cdb? 19:02 Guest54 to figure out if any mods do something weird if an API is broken again 19:04 ROllerozxa there is a grep package search feature, but only available for ruben 19:05 Guest54 semgrep is different 19:05 Guest54 it operates on the AST 19:05 Guest54 ROllerozxa which means you could find stuff like “this mod uses the API in a deprecated way” and notify the author (do not forbid it, it may be compatibility code) 19:06 Guest54 or find opportunities to dupe hehe 19:06 Guest54 ROllerozxa https://semgrep.dev/playground/r/c.lang.security.double-free.double-free 19:06 * muurkha finds opportunities to dope 19:10 MTDiscord Guest54: are you erle? 19:12 MTDiscord CDB has zipgrep, which does extended grep patterns 19:12 MTDiscord Extended with a capital E, stupidly named 19:16 Guest54 luatic i am indeed, and i am sorry for being so unfriendly last time i was here. turned out i had two serious vitamin deficiencies, which can lead to all kinds of unfunny stuff, e.g. increased irritability. 19:17 MTDiscord Guest54: it's okay lol, I don't hold any grudge against you 19:18 MTDiscord which two vitamins were deficient (of you are comfortable sharing)? 19:18 Guest54 luatic, b12 and d 19:18 Guest54 both are very cheap to acquire, but you actually have to know that you are lacking them 19:18 Guest54 also, vitamin D deficiency is not tested by default 19:22 Guest54 luatic i have worked on a gift for the community as penance 19:22 Guest54 a pure lua text renderer so people can make signs 19:22 MTDiscord text renderer from TTF? 19:22 Guest54 i do not know why everyone makes signs out of texture modifiers, can you maybe explain? it seems a bit weird 19:23 MTDiscord it used to be the most viable (the only) option before dynamic media / [png became a thing 19:23 Guest54 like, i have seen people who IMO *should* know better have directories with a.png b.png c.png etc. pp. 19:23 MTDiscord yeah, I did the same thing when I had to render text to texture 19:23 Guest54 why 19:23 MTDiscord because it was the only option 19:24 MTDiscord now with dynamic media it is probably indeed inferior 19:24 Guest54 i don't really get it, you can just write the pixels to a file, am i missing anything? 19:24 MTDiscord you couldn't always 19:24 Guest54 i thought people had to reload anyway to see signs in early versions, maybe i was mistaken 19:24 MTDiscord I drew pixel text in a long string and then converted it to pixels for dynamic media 19:24 Guest54 you could always write them to a file, you could not just always send them to the client 19:25 MTDiscord yeah, but people don't have to reload for texture modifiers to work 19:25 Guest54 i see. 19:25 MTDiscord besides, another advantage is that texmods are "on demand" 19:25 Guest54 wdym 19:25 MTDiscord you send the texmods only to clients who get close to the entity 19:25 MTDiscord whereas with dynamic media you'd have to send it to all clients just in case they ever get close to the entity 19:26 Guest54 anyways, here is some sample output. i am not finished yet: https://mister-muffin.de/p/Lh5L.png 19:27 MTDiscord wow, impressive 19:27 Guest54 it was not too hard 19:27 Guest54 i have not done the arabic script shaping and the bidirectional text is wonky 19:28 Guest54 but i do intend to bring full unicode sign support to minetest 5.3 and above that way 19:29 Guest54 luatic you can see this in the first and last line 19:29 Guest54 the arabic in the first line is messed up 19:29 Guest54 the letters do not connect even 19:29 Guest54 in the last line you can see a control character being rendered (it should be processed) because i have to implemented explicit bidi control characters 19:39 Guest54 luatic an interesting tangent, working on font rendering i have also noticed that simple deflated TGA is unexpectedly competitive on both filesize and processing speed compared to PNG for large images too. take the colorful example text i posted – gimp makes it ~104K, optipng can strip it down to 88K (and takes a while). taking the TGA and 19:39 Guest54 compressing it with DEFLATE is 84K. 19:43 Guest54 so for generating textures it could be *very* useful if minetest transparently compressed TGA on the wire (if the client supports it and it is actually smaller) 19:50 Guest54 a quick example: the devtest checkerboard is about 5061 bytes (thanks to minetest.encode_png()), the same file as a deflated TGA is 165 bytes. which is funny, because i thought it would be easy to undercut that using optipng, but the best optipng can do is 236 bytes. 19:51 MTDiscord TGA is presumably a simpler format with less overhead 19:51 Guest54 it's not really about the overhead i think 19:51 Guest54 for me it's more about encoding speed 19:51 Guest54 we are talking dynamically generated textures after all 19:52 MTDiscord I vaguely remember benchmarking encoding speed and I don't think it was an issue 19:52 MTDiscord optimizing e.g. using optipng would of course slow things down though 19:52 Guest54 that's the point 19:53 Guest54 deflating the TGA makes it instantly smaller than the best thing optipng can do (for the checkerboard) 19:53 Guest54 like at literally no runtime 19:53 Guest54 optipng runtime even on the best machines i have seen can be measured in seconds per file 19:54 mrkubax10 every machine currently implemented in IndustrialTest: https://0x0.st/HoiH.png 19:54 Guest54 luatic the issue is that i did not think that non-prefiltered compression could ever be that good. no one did, apparently. 19:55 Guest54 even though i did use it, i just never compared it for non-maps 19:56 Guest54 anyways, it's an unexpectedly elegant solution that's quite simple to implement in a backwards compatible way to speed up texture transfer. 19:57 Guest54 (and storage, if you really want to, but you probably do not) 19:58 Guest54 luatic i also found out what the deal is with “sqlite is faster than the filesystem” people. they do not read the part of the description of the benchmark where “SQLite does not perform as well as direct I/O when experiments are run using a cold filesystem cache”. 20:00 Guest54 basically, what it proves is that you can read data fast if you have it in the cache 20:00 Guest54 which … is useful if you compare it to a lot of little reads and writes (which is a common database access pattern) 20:05 Guest54 GoodClover luatic muurkha do you have any proposals on how the font rendering should work? currently you have to create a font object (i.e. table) and configure properties on it (like foreground and background color) and load glyphs (to allow for loading several fonts) first, unless you really like U+FFFD REPLACEMENT CHARACTER (it is the only glyph 20:05 Guest54 my lua code knows by default) 20:06 Guest54 and then you do stuff like: tga_encoder.image( font:render_text( "(*ˊᗜˋ*)/ᵗᑋᵃᐢᵏ ᵞᵒᵘ*" ) ):save("unicode.tga") 20:06 Guest54 i originally had it non-object-oriented and it was much harder to develop and use 20:07 Guest54 because you usually want the same font with the same color etc. for several renderings 20:08 Guest54 if you do it like that you will get white on black grayscale text, so i guess people *may* want to learn font and encoding options 20:08 Guest54 but i think that's a good default 20:08 Guest54 also if someone of you knows arabic or hebrew, go read up on bidi text and help me (later) please 20:09 Guest54 AFAIK arabic letters look different depending on their surroundings 20:15 Guest54 luatic btw i do not render from TTF but from GNU unifont (or any hexfont) 20:15 Guest54 kilbith i bet you have opinions on font rendering, do you? 20:16 Guest54 also i did recently dive into how the french do their stuff vs the germans and it seems you were right about the french kinda electing a king 20:18 kilbith ?? 20:18 Guest54 you said something like that a long time ago 20:18 Guest54 i think? 20:18 Guest54 maybe i remember it wrong 20:19 Guest54 anyways, i am rendering unicode in pure lua: https://mister-muffin.de/p/Lh5L.png and the API is kinda like font.render_text("foo bar baz") would that be acceptable to you? 20:19 Guest54 i ask you because you would probably not hold back with expletives if it was not 20:49 MTDiscord seems fine to me 20:49 MTDiscord though font. rather than font:? 20:52 MTDiscord no font is complete without U+130B8 20:53 Guest54 luatic i apologize it is font:render_text() 20:55 Guest54 luatic is hexfont a good font format? do you know a better one? 20:56 Guest54 btw, i have been testing minetest on a machine with a hidpi screen (Xft.dpi: 284) and i wonder, what is the option to upscale everything? that + undersampling should fix the small fonts ig 20:58 Guest54 Flamore shockingly, unicode is lacking that important character! 20:58 Guest54 unifont 20:58 Guest54 i mean 20:58 Guest54 > *Note: Scripts such as Cuneiform, Egyptian Hieroglyphs, and Bamum Supplement will not be drawn on a 16-by-16 pixel grid. There are plans to draw these scripts on a 32-by-32 pixel grid in the future. 20:58 Guest54 https://unifoundry.com/unifont/index.html 20:59 Guest54 i guess that means you can not send dick pics by means of unicode characters using my renderer, which pleases me 20:59 MTDiscord Guest54: I'm not that familiar with fonts :P 20:59 Guest54 luatic the thing is, am i missing something obvious? like the : vs . lol 21:00 Guest54 e.g. do users want a default direction of text? do they want to render text to a canvas that has a specific size? etc. pp. 21:00 MTDiscord doesn't sound like it from your description 21:00 MTDiscord yeah, users usually only care about left-to-right I think 21:00 Guest54 is “grayscale 1bpp output with white text on black background” a good default? 21:01 Guest54 don't laugh, i had grayscale 1bpp output with black text on slightly more black background before 21:02 Guest54 because it made it easier to create palette images 21:02 Guest54 but it was not idiot proof 21:02 Guest54 (me being the idiot) 21:03 muurkha luatic: right now Minetest users don't care about right-to-left text because Minetest doesn't support their languages at all 21:03 Guest54 luatic i have very stupid kerning, it removes up to 1 line left and 1 line right of the character to make them variable width 21:03 Guest54 oh btw 21:04 Guest54 i am not doing this because it is easy 21:04 Guest54 i am doing it because i thought it was easy when i started 21:04 muurkha heh 21:04 muurkha "We do these things not because they are easy! We do them because we thought they would be easy." 21:04 Guest54 it's also kinda true, if you don't care about bidi text 21:05 Guest54 like, the worst bug that i can find right now is that control characters i do not explicitly handle are printed, which is kinda neat (because it shows what i should handle) 21:05 muurkha that is cool 21:05 MTDiscord Guest54: I know this sentiment 21:05 Guest54 well it is the default if you use unifont, since it does have a picture for each control character (presumably in case you accidentally render the glyph instead of going to the next tab stop or so) 21:06 MTDiscord That's how I wrote a b3d to glTF converter in like 2-3 days 21:06 MTDiscord (but it currently doesn't have provisions for "neutral bones" i.e. static geometry, I'll have to add them when I have time) 21:07 Guest54 i have a task at work where i have to do a complicated pairing with an android device and a hardware prototype 21:07 Guest54 i thought it was easy to test the pairing 100 times 21:07 Guest54 turns out that this can fail in so many ways that are non-recoverable in software 21:08 Guest54 e.g. you can end up with a bluetooth pairing device list in which your device is … twice … and still fail to connect 21:08 MTDiscord oof 21:09 Guest54 also the hardware prototype has a powersaving feature that makes it go into standby after 2 minutes. now i also got a special fake battery so i can turn the power on and off again. basically it goes into a wall socket on on end and in the battery compartment on the other end. 21:09 Guest54 now if the device goes into standby it does not react to bluetooth stuff AFAIK 21:10 Guest54 but i want to do a lot of things that require turning power off and on again 21:10 Guest54 guess what it loses … yes, the powersaving setting! if i ever turn it off as part of a test, it will turn itself to standby mode after 2 minutes. 21:10 Guest54 and the thing has permanent storage 21:11 Guest54 it's just someone in the firmware department was not thinking of the “battery is empty” case 21:11 Guest54 which leads to it forgetting a lot of things when i use the special battery adapter 21:12 Guest54 to wake it up from standby you have to physically press a button on the device 21:12 Guest54 if i can not fix that in software, i am going to fix it by means of lego technic 21:12 Guest54 though the majority of my old lego technic motors have locked up 21:15 Guest54 luatic is there anything regarding signslib etc. i should know before cluelessly claiming i have a new method of text rendering that is superior? 21:17 MTDiscord I don't think so, but I'm not familiar with signslib 21:18 Guest54 well, the way i am envisioning it is “render text to image, send image to client”. 21:58 Guest54 does anyone know what prompted mineclone2 devs to rip out all textures from the mods and make a single texture directory and also rename some of them? it seems like what people would do who constantly have issues with mod dependencies (i.e. make a big ball of mud) but i don't really know if there is a technical reason (i doubt it, but asking can't 21:58 Guest54 hurt). 22:34 Guest54 Warr1024 you probably also want to render text, anything that a font:render_text() unicode text rendering function should do that i may be missing? 22:35 Guest54 i mean i take it from this: https://github.com/minetest/minetest/issues/9946 22:35 Guest54 > if this can be done without engine changes, I'm open to suggestion