Open Anyeos opened 4 years ago
And will the 3.2.x series remain hardcoded?
Yes. It would be extremely unlikely for something this low-level to be changed in a stable branch.
Maybe can be implemented some "advanced" and "only for experienced users" tab under the settings window And will print a warning if someone wants to change something there. It is just an idea.
@Anyeos We don't have a way to signal settings as "advanced" yet, but this may be added in 4.0.
I don't think it could be a setting anyway, as PoolVector is too low level and you can't access Project Settings before having it initialized. This would have to be set a compile time.
You're also the first user to hit a limit on the MemoryPool allocs AFAIR, and the problem is fixed in 4.0 as there's no MemoryPool anymore, so I suggest you do a custom build with an increased value (or since it's a custom module, maybe you can work it around with e.g. std::vector
?).
I don't think it could be a setting anyway, as PoolVector is too low level and you can't access Project Settings before having it initialized. This would have to be set a compile time.
You're also the first user to hit a limit on the MemoryPool allocs AFAIR, and the problem is fixed in 4.0 as there's no MemoryPool anymore, so I suggest you do a custom build with an increased value (or since it's a custom module, maybe you can work it around with e.g.
std::vector
?).
I agree. But I think there will be more users hitting memory limit if they use 3D under a platform with more power than a movile device. Anyway always this kind of problems I try to solve compiling a custom build.
I hope Godot 4 can allocate memory dynamically instead statically for that purpose at least.
The module is https://github.com/Zylann/godot_voxel and it is not mine. But I just wanted to deploy a big voxel terrain and that is how I hit the memory limit so easily.
I just encountered this issue while running a test scene. In my particular case, I'm calling Mesh.surface_get_arrays()
on a few meshes very often and I'm storing the results in an array.
Since in my case a lot of the arrays are effectively the same, I worked around this issue by caching all Pool*Arrays
and if a duplicate is found in the cache, the cached version is returned and the other array is discarded.
```gdscript extends Node var _cache := {} func dedup_immutable(object): if object in _cache: return _cache[object] else: _cache[object] = object return object ```
Related: #8279
I had the same problem with large voxel maps. I think with more folks doing memory intensive things that this should probably be fixed. To change the code took all of about 30 minutes and a little testing. I can submit a PR if you want.
I can submit a PR if you want.
Please do, but keep in mind core structures have changed significantly in the master
branch. Therefore, you'll probably have to open a pull request against the 3.x
branch and make sure it doesn't break compatibility with existing projects.
Since 4.x doesn't contain the code anymore that would be pretty tough. :D
On Tue, Jun 15, 2021 at 6:32 PM Hugo Locurcio @.***> wrote:
I can submit a PR if you want.
Please do, but keep in mind pull requests should be opened against the master branch before being opened against the 3.x branch for backporting 🙂
— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/godotengine/godot/issues/37154#issuecomment-861878405, or unsubscribe https://github.com/notifications/unsubscribe-auth/AADRTNQZ2BJS6GWBUYOXEYDTS7IH7ANCNFSM4LOYAB3Q .
Godot version: 3.2.1rc1-custom
OS/device including version: Ubuntu 19.10
Issue description: Why MemoryPool amount is hardcoded?
Just on the file core/pool_vector.h there are the declaration:
static void setup(uint32_t p_max_allocs = (1 << 16));
I am asking if there are a reason to do that. I need more memory for a module that create voxels and I will change it for myself. But I see that in Godot 4.0 the memory pool is rewrited. So I hope it can allocate by demand. Am I right about this? And will the 3.2.x series remain hardcoded? Or are there some plans to make that value a project setting?