Commit: 23a12096305d6328dd4ba0c01962f3586ab04e5c
Author: Lukas Tönne
Date: Sun Aug 24 13:54:33 2014 +0200
Branches: hair_system
https://developer.blender.org/rB23a12096305d6328dd4ba0c01962f3586ab04e5c
Distinguish nominal and allocated size of hair volume attributes.
This allows keeping extra memory around for later use instead of freeing
every time the attribute needs to be resized (compare to std::vector).
===================================================================
M source/blender/hair/intern/HAIR_volume.h
===================================================================
diff --git a/source/blender/hair/intern/HAIR_volume.h
b/source/blender/hair/intern/HAIR_volume.h
index ec3fd71..525beba 100644
--- a/source/blender/hair/intern/HAIR_volume.h
+++ b/source/blender/hair/intern/HAIR_volume.h
@@ -40,6 +40,7 @@ struct VolumeAttribute {
VolumeAttribute()
{
m_data = NULL;
+ m_alloc_size = 0;
m_size = 0;
}
@@ -60,26 +61,44 @@ struct VolumeAttribute {
void resize(int size)
{
- free();
- alloc(size);
+ if (size > m_alloc_size) {
+ free();
+ alloc(size);
+ }
+ else {
+ m_size = size;
+ }
+ }
+
+ void shrink_to_fit()
+ {
+ if (m_size < m_alloc_size) {
+ free();
+ alloc(m_size);
+ }
}
protected:
void alloc(int size)
{
- m_data = (T*)MEM_mallocN(sizeof(T) * size, "Hair Volume
Attribute");
+ m_data = size > 0 ? (T*)MEM_mallocN(sizeof(T) * size, "Hair
Volume Attribute") : NULL;
+ m_alloc_size = size;
m_size = size;
}
void free()
{
- if (m_data)
+ if (m_data) {
MEM_freeN(m_data);
+ m_data = NULL;
+ }
+ m_alloc_size = 0;
+ m_size = 0;
}
private:
T *m_data;
- int m_size;
+ int m_size, m_alloc_size;
};
typedef VolumeAttribute<float> VolumeAttributeFloat;
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs