From 9d912747397b2847702ec209be78dedf018c0b13 Mon Sep 17 00:00:00 2001 From: rdb Date: Sat, 25 Jul 2020 10:43:21 +0200 Subject: [PATCH] gobj: Don't use Texture::up_to_power_2 for memory alignment That method uses plain int, and will therefore fail for larger allocations. --- panda/src/gobj/geomVertexArrayData.cxx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/panda/src/gobj/geomVertexArrayData.cxx b/panda/src/gobj/geomVertexArrayData.cxx index f6d04beac5..4ab1baf165 100644 --- a/panda/src/gobj/geomVertexArrayData.cxx +++ b/panda/src/gobj/geomVertexArrayData.cxx @@ -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);