@dotstdy @mtothevizzah
The phrase "when you're shipping millions of copies, a 1% repro rate means tens of thousands of players impacted" is something that will forever haunt me...
Founder of Molecular Matters • C++ & low-level programming • Created Live++ (@liveplusplus)
https://liveplusplus.tech
@dotstdy @mtothevizzah
The phrase "when you're shipping millions of copies, a 1% repro rate means tens of thousands of players impacted" is something that will forever haunt me...
meshoptimizer 0.24 is out! Featuring new meshlet builder for raytracing workloads, improvements to cluster partitioning, new functions for reindexing, simplification, clustering and coverage computation, many internal improvements and, of course, VS2013 support!
Thanks to Valve for sponsoring most of the work on the core library in this release!
Boost / GitHub stars appreciated as always :)
@SonnyBonds @pervognsen But as others have said, not standard in C++.
@SonnyBonds @pervognsen I can confirm it works across MSVC and clang on Windows and all consoles.
Use it myself and suppress the corresponding warnings temporarily, conveniently wrapped with a macro.
Building a Debugger is now officially released!
It guides you through writing a whole native x64 debugger from scratch, dispelling all the magic and teaching you a ton about operating systems as it goes.
Even if you don't care about writing a debugger, you can read it to your cat.
@Doomed_Daniel Checked mprotect docs, says this:
"mprotect() changes the access protections for the calling process's memory pages containing any part of the address range in the interval [addr, addr+size-1].
addr must be aligned to a page boundary."
Exactly what I thought :)
@Doomed_Daniel No, that won't work, and I also don't think this works on Linux.
The OS can only track these with page granularity, otherwise you'd need tons of memory for tracking bits.
The address passed in to these functions is usually rounded down to page size internally.
@Doomed_Daniel Yeah, Windows has VirtualProtect for that, which is what Process::SetPageProtection in the code snippet uses underneath.
Doing it for allocated pages on free lets you find use-after-free pretty easily.
Probably one of my favourite tricks for finding memory stomps:
1) On alloc: put allocation at very end of separate page, followed by a NoAccess page.
2) On free: mark allocated pages as NoAccess.
Guaranteed to find even one-byte stomps and use-after-free.
@pervognsen Haha, yeah, I don't particularly like discussions about the EULA. I've had my fair share of these in the past and am *so glad* that I have an extraordinarily good IP lawyer, who's also good at consulting on "you can give them this" and "do. not. budge. on that".
@pmdj Uh oh, haven't thought of that :D
@pervognsen Yes.
And yes, there could be somebody else doing this, and... I know, it's complicated.
@pervognsen In my experience, things like these are never "oh yeah no problem we'll accept that".
@pervognsen That's true, but highly unlikely to be accepted by studios (e.g. "you need to show the logo" but in lawyer terms).
On one hand, it's a good thing that Live++ is not something that's needed to ship a game, so there can never be show-stopping bugs.
On the other hand, it means that I'll never get to see its logo in the credits of so many games that used it during development.
@castano Ah yes, never gets old, lots of "fun" to be had.
FWIW, you should absolutely charge extra in case somebody wants a custom contract.
Pre-order has arrived!
Live++ 2.9.2 out now:
https://liveplusplus.tech/releases.html
Includes bug fixes for a few minor issues, greatly improved stability on PlayStation platforms.
Thanks to all the people who reported issues and helped with debugging, your support is greatly appreciated!
@britown Does this use Bresenham? I used that for a top-down hobby RPG for shadowcasting from trees about... 30 years ago, so this kind of gives me flashbacks :)
That was a fun one to figure out and fix.
"Push" and "pop" are no bueno in this case.