gobj: Assert instead of crash when printing unresolved GV(A)D

This commit is contained in:
rdb 2021-01-30 20:06:32 +01:00
parent 79dae16a2c
commit 60f3ac5163
3 changed files with 20 additions and 6 deletions

View File

@ -59,8 +59,10 @@ ALLOC_DELETED_CHAIN_DEF(GeomVertexArrayDataHandle);
* file.
*/
GeomVertexArrayData::
GeomVertexArrayData() : SimpleLruPage(0) {
_contexts = nullptr;
GeomVertexArrayData() :
SimpleLruPage(0),
_array_format(nullptr),
_contexts(nullptr) {
// Can't put it in the LRU until it has been read in and made valid.
}
@ -180,7 +182,8 @@ set_usage_hint(GeomVertexArrayData::UsageHint usage_hint) {
*/
void GeomVertexArrayData::
output(std::ostream &out) const {
out << get_num_rows() << " rows: " << *get_array_format();
nassertv(_array_format != nullptr);
out << get_num_rows() << " rows: " << *_array_format;
}
/**
@ -188,6 +191,7 @@ output(std::ostream &out) const {
*/
void GeomVertexArrayData::
write(std::ostream &out, int indent_level) const {
nassertv(_array_format != nullptr);
_array_format->write_with_data(out, indent_level, this);
}

View File

@ -582,6 +582,7 @@ CacheEntry(GeomVertexData *source, CacheKey &&key) noexcept :
*/
INLINE GeomVertexData::CData::
CData() :
_format(nullptr),
_usage_hint(UH_unspecified)
{
}

View File

@ -1268,7 +1268,9 @@ output(ostream &out) const {
if (!get_name().empty()) {
out << get_name() << " ";
}
out << get_num_rows() << " rows: " << *get_format();
const GeomVertexFormat *format = get_format();
nassertv(format != nullptr);
out << get_num_rows() << " rows: " << *format;
}
/**
@ -1279,8 +1281,15 @@ write(ostream &out, int indent_level) const {
if (!get_name().empty()) {
indent(out, indent_level) << get_name() << "\n";
}
get_format()->write_with_data(out, indent_level + 2, this);
CPT(TransformBlendTable) table = get_transform_blend_table();
CPT(TransformBlendTable) table;
const GeomVertexFormat *format = nullptr;
{
CDReader cdata(_cycler);
format = cdata->_format;
table = cdata->_transform_blend_table.get_read_pointer();
}
nassertv(format != nullptr);
format->write_with_data(out, indent_level + 2, this);
if (table != nullptr) {
indent(out, indent_level)
<< "Transform blend table:\n";