Browse Source

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

That method uses plain int, and will therefore fail for larger allocations.
rdb 5 years ago
parent
commit
9d91274739
1 changed files with 4 additions and 4 deletions
  1. 4 4
      panda/src/gobj/geomVertexArrayData.cxx

+ 4 - 4
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);