|
|
@@ -35,8 +35,6 @@ TypeHandle VertexDataBuffer::_type_handle;
|
|
|
void VertexDataBuffer::
|
|
|
do_clean_realloc(size_t size) {
|
|
|
if (size != _size) {
|
|
|
- _source_file.clear();
|
|
|
-
|
|
|
if (size == 0) {
|
|
|
// If we're going to size 0, we don't necessarily need to page
|
|
|
// in first. But if we're paged out, discard the page.
|
|
|
@@ -90,15 +88,11 @@ do_page_out(VertexDataBook &book) {
|
|
|
}
|
|
|
nassertv(_resident_data != (unsigned char *)NULL);
|
|
|
|
|
|
- if (_source_file == (VirtualFile *)NULL) {
|
|
|
- // We only need to allocate a block if we don't have a source
|
|
|
- // file.
|
|
|
- _block = book.alloc(_size);
|
|
|
- nassertv(_block != (VertexDataBlock *)NULL);
|
|
|
- unsigned char *pointer = _block->get_pointer(true);
|
|
|
- nassertv(pointer != (unsigned char *)NULL);
|
|
|
- memcpy(pointer, _resident_data, _size);
|
|
|
- }
|
|
|
+ _block = book.alloc(_size);
|
|
|
+ nassertv(_block != (VertexDataBlock *)NULL);
|
|
|
+ unsigned char *pointer = _block->get_pointer(true);
|
|
|
+ nassertv(pointer != (unsigned char *)NULL);
|
|
|
+ memcpy(pointer, _resident_data, _size);
|
|
|
|
|
|
free(_resident_data);
|
|
|
_resident_data = NULL;
|
|
|
@@ -116,43 +110,6 @@ do_page_out(VertexDataBook &book) {
|
|
|
////////////////////////////////////////////////////////////////////
|
|
|
void VertexDataBuffer::
|
|
|
do_page_in() {
|
|
|
- if (_source_file != (VirtualFile *)NULL && _resident_data == (unsigned char *)NULL) {
|
|
|
- // Re-read the data from its original source.
|
|
|
- PStatTimer timer(_vdata_reread_pcollector);
|
|
|
-
|
|
|
- _resident_data = (unsigned char *)malloc(_size);
|
|
|
- nassertv(_resident_data != (unsigned char *)NULL);
|
|
|
- get_class_type().inc_memory_usage(TypeHandle::MC_array, _size);
|
|
|
-
|
|
|
- istream *in = _source_file->open_read_file(true);
|
|
|
- if (in == (istream *)NULL) {
|
|
|
- gobj_cat.error()
|
|
|
- << "Error reopening " << _source_file->get_filename()
|
|
|
- << " to reread vertex data.\n";
|
|
|
- } else {
|
|
|
- if (gobj_cat.is_debug()) {
|
|
|
- gobj_cat.debug()
|
|
|
- << "rereading " << _size << " bytes from "
|
|
|
- << _source_file->get_filename() << ", position "
|
|
|
- << _source_pos << "\n";
|
|
|
- }
|
|
|
-
|
|
|
- in->seekg(_source_pos);
|
|
|
-
|
|
|
- in->read((char *)_resident_data, _size);
|
|
|
- if (in->fail() || in->eof()) {
|
|
|
- gobj_cat.error()
|
|
|
- << "Error rereading " << _size << " bytes from "
|
|
|
- << _source_file->get_filename() << ", position "
|
|
|
- << _source_pos << "\n";
|
|
|
- }
|
|
|
-
|
|
|
- VirtualFileSystem *vfs = VirtualFileSystem::get_global_ptr();
|
|
|
- vfs->close_read_file(in);
|
|
|
- }
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
if (_block == (VertexDataBlock *)NULL) {
|
|
|
// We're already paged in.
|
|
|
return;
|