In general the code is very shitty and its a bad idea, as much as I love them as an immersion tool.
Regardless of the img size it can suck up a lot of
VIDEO memory, many gigs worth, which is something a lot of folks are short on. This is just because of how these textures are inefficiently stored in vram, as the engine was never really designed to do this sort of thing. However, image size makes this worse ofc (exponentially so, in a literal way. more on that later).
This can cause random crash to desktops.
Fact of the matter is that we have a budget that we can spend. A budget that is already spent on things like stormfox, super high def models & textures, a fancy AF map, thousands of lua code files, etc. The more things we add, the more we take from the budget, and the more issues we will have moving forward.
Also, it contributes to people who get stuck in buffer overflows. I'm really tired of people trying to point to
ONE THING causing them. There is not one thing that causes buffer overflows; sorry. Thats why they're not 100% fixed. There are things that contribute to it, and some of those things have been fixed. Which is why it isn't as bad as it used to be. Some of them remain, and panels
can contribute to buffer overflows.
All of the panels are loaded individually while you are joining. If they are not cached in your gmod cache folder, the server sends you a list of imgur links and forces your PC to
very slowly download them (using some outdated protocols). That
can cause an overflow while you're trying to join. Or, if a new one is added, everyone's gotta download and that can cause timeout/overflow as well.
The real issue is memory consumption that can lead to frequent crashing as, when there is no memory left, kernel makes game goes poof.
Panels are all shoved into video memory as
uncompressed 4 dimensional bitmaps. Red, green, blue, alpha for each pixel. This means that each pixel is four bytes. They are stored in the closest square (power of 2) that fits their largest dimension. So, an image of (1000x500) is stored in a (1024x1024) 4D matrix. That is 1,048,576 pixels or,
>4MB. The next size up is
>16MB, and the next step is
>68MB, then >
256MB and so on.
You might have an image that is 100KB on disk, that is 16MB in ram just because of how much of a bitch uncompressed textures can be.
Now
the real issue is that they are not culled. They are
always rendered ALL THE TIME that you are on the server no matter where they are, how close they are together, etc etc.
You can read more about that process here:
hidden surface determination
That is because the janky ass code that sets these up does not set up occlusion culling on the materials because they are not eligible for such a thing (this stuff is all calculated by the engine clientside). Thanks Chessnut.
For that to work it has to be attached to an entity of some kind then have it's transmission state set to
TRANSMIT_PVS. Or at least, thats
one method of doing it, theoretically. It'd be a good bit of work though.
Don't take my word for it though,
you can read the code for yourself.