gobj: Don't use Texture::up_to_power_2 for memory alignment

That method uses plain int, and will therefore fail for larger allocations.
This commit is contained in:
rdb 2020-07-25 10:43:21 +02:00
parent 5fdbc97499
commit 9d91274739

View File

@ -23,7 +23,7 @@
#include "configVariableInt.h"
#include "simpleAllocator.h"
#include "vertexDataBuffer.h"
#include "texture.h"
#include "pbitops.h"
using std::max;
using std::min;
@ -631,7 +631,7 @@ set_num_rows(int n) {
if (new_size > orig_reserved_size) {
// Add more rows. Go up to the next power of two bytes, mainly to
// reduce the number of allocs needed.
size_t new_reserved_size = (size_t)Texture::up_to_power_2((int)new_size);
size_t new_reserved_size = (size_t)1 << get_next_higher_bit(new_size - 1);
nassertr(new_reserved_size >= new_size, false);
_cdata->_buffer.clean_realloc(new_reserved_size);
@ -818,7 +818,7 @@ copy_subdata_from(size_t to_start, size_t to_size,
size_t needed_size = to_buffer_orig_size + from_size - to_size;
size_t to_buffer_orig_reserved_size = to_buffer.get_reserved_size();
if (needed_size > to_buffer_orig_reserved_size) {
size_t new_reserved_size = (size_t)Texture::up_to_power_2((int)needed_size);
size_t new_reserved_size = (size_t)1 << get_next_higher_bit(needed_size - 1);
to_buffer.clean_realloc(new_reserved_size);
}
to_buffer.set_size(needed_size);
@ -891,7 +891,7 @@ set_subdata(size_t start, size_t size, const vector_uchar &data) {
size_t needed_size = to_buffer_orig_size + from_size - size;
size_t to_buffer_orig_reserved_size = to_buffer.get_reserved_size();
if (needed_size > to_buffer_orig_reserved_size) {
size_t new_reserved_size = (size_t)Texture::up_to_power_2((int)needed_size);
size_t new_reserved_size = (size_t)1 << get_next_higher_bit(needed_size - 1);
to_buffer.clean_realloc(new_reserved_size);
}
to_buffer.set_size(needed_size);