Fix Cycles crash in Windows debug mode with volumes

This commit is contained in:
Brecht Van Lommel
2020-03-19 19:50:34 +01:00
parent 12b621059a
commit 4b74b35322
3 changed files with 8 additions and 1 deletions

View File

@@ -48,7 +48,7 @@ Attribute::Attribute(
Attribute::~Attribute() Attribute::~Attribute()
{ {
/* For voxel data, we need to free the image handle. */ /* For voxel data, we need to free the image handle. */
if (element == ATTR_ELEMENT_VOXEL) { if (element == ATTR_ELEMENT_VOXEL && buffer.size()) {
ImageHandle &handle = data_voxel(); ImageHandle &handle = data_voxel();
handle.~ImageHandle(); handle.~ImageHandle();
} }

View File

@@ -59,7 +59,11 @@ class Attribute {
AttributeElement element, AttributeElement element,
Geometry *geom, Geometry *geom,
AttributePrimitive prim); AttributePrimitive prim);
Attribute(Attribute &&other) = default;
Attribute(const Attribute &other) = delete;
Attribute &operator=(const Attribute &other) = delete;
~Attribute(); ~Attribute();
void set(ustring name, TypeDesc type, AttributeElement element); void set(ustring name, TypeDesc type, AttributeElement element);
void resize(Geometry *geom, AttributePrimitive prim, bool reserve_only); void resize(Geometry *geom, AttributePrimitive prim, bool reserve_only);
void resize(size_t num_elements); void resize(size_t num_elements);

View File

@@ -119,6 +119,9 @@ void ImageHandle::clear()
foreach (const int slot, tile_slots) { foreach (const int slot, tile_slots) {
manager->remove_image_user(slot); manager->remove_image_user(slot);
} }
tile_slots.clear();
manager = NULL;
} }
bool ImageHandle::empty() bool ImageHandle::empty()