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. * file.
*/ */
GeomVertexArrayData:: GeomVertexArrayData::
GeomVertexArrayData() : SimpleLruPage(0) { GeomVertexArrayData() :
_contexts = nullptr; SimpleLruPage(0),
_array_format(nullptr),
_contexts(nullptr) {
// Can't put it in the LRU until it has been read in and made valid. // 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:: void GeomVertexArrayData::
output(std::ostream &out) const { 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:: void GeomVertexArrayData::
write(std::ostream &out, int indent_level) const { write(std::ostream &out, int indent_level) const {
nassertv(_array_format != nullptr);
_array_format->write_with_data(out, indent_level, this); _array_format->write_with_data(out, indent_level, this);
} }

View File

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

View File

@ -1268,7 +1268,9 @@ output(ostream &out) const {
if (!get_name().empty()) { if (!get_name().empty()) {
out << get_name() << " "; 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()) { if (!get_name().empty()) {
indent(out, indent_level) << get_name() << "\n"; indent(out, indent_level) << get_name() << "\n";
} }
get_format()->write_with_data(out, indent_level + 2, this); CPT(TransformBlendTable) table;
CPT(TransformBlendTable) table = get_transform_blend_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) { if (table != nullptr) {
indent(out, indent_level) indent(out, indent_level)
<< "Transform blend table:\n"; << "Transform blend table:\n";