From be21080cb66194c3ccfe5a6b3ca9853b2b9601de Mon Sep 17 00:00:00 2001 From: Daniel Genrich Date: Wed, 30 May 2012 12:53:13 +0000 Subject: [PATCH 1/2] Provide ray hit/nearest information on which side of the quad the ray hit. Patch by MiikaH. --- source/blender/blenkernel/intern/bvhutils.c | 6 ++++++ source/blender/blenlib/BLI_kdopbvh.h | 5 +++++ 2 files changed, 11 insertions(+) diff --git a/source/blender/blenkernel/intern/bvhutils.c b/source/blender/blenkernel/intern/bvhutils.c index 24583c124e6..752bdab2c00 100644 --- a/source/blender/blenkernel/intern/bvhutils.c +++ b/source/blender/blenkernel/intern/bvhutils.c @@ -383,6 +383,9 @@ static void mesh_faces_nearest_point(void *userdata, int index, const float co[3 nearest->dist = dist; copy_v3_v3(nearest->co, nearest_tmp); normal_tri_v3(nearest->no, t0, t1, t2); + + if (t1 == vert[face->v3].co) + nearest->flags |= BVH_ONQUAD; } t1 = t2; @@ -420,6 +423,9 @@ static void mesh_faces_spherecast(void *userdata, int index, const BVHTreeRay *r madd_v3_v3v3fl(hit->co, ray->origin, ray->direction, dist); normal_tri_v3(hit->no, t0, t1, t2); + + if (t1 == vert[face->v3].co) + hit->flags |= BVH_ONQUAD; } t1 = t2; diff --git a/source/blender/blenlib/BLI_kdopbvh.h b/source/blender/blenlib/BLI_kdopbvh.h index 7041c122ff9..5ec8247c03a 100644 --- a/source/blender/blenlib/BLI_kdopbvh.h +++ b/source/blender/blenlib/BLI_kdopbvh.h @@ -49,11 +49,15 @@ typedef struct BVHTreeOverlap { int indexB; } BVHTreeOverlap; +/* flags */ +#define BVH_ONQUAD (1<<0) + typedef struct BVHTreeNearest { int index; /* the index of the nearest found (untouched if none is found within a dist radius from the given coordinates) */ float co[3]; /* nearest coordinates (untouched it none is found within a dist radius from the given coordinates) */ float no[3]; /* normal at nearest coordinates (untouched it none is found within a dist radius from the given coordinates) */ float dist; /* squared distance to search arround */ + int flags; } BVHTreeNearest; typedef struct BVHTreeRay { @@ -67,6 +71,7 @@ typedef struct BVHTreeRayHit { float co[3]; /* coordinates of the hit point */ float no[3]; /* normal on hit point */ float dist; /* distance to the hit point */ + int flags; } BVHTreeRayHit; /* callback must update nearest in case it finds a nearest result */ From ada8dbe12aebdcd8c67c4299eb1f17b4cbe5ed2b Mon Sep 17 00:00:00 2001 From: Jeroen Bakker Date: Wed, 30 May 2012 13:07:55 +0000 Subject: [PATCH 2/2] * fixed memory leak in compositor operation. - leaked when render result could not be received. --- .../blender/compositor/operations/COM_CompositorOperation.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/blender/compositor/operations/COM_CompositorOperation.cpp b/source/blender/compositor/operations/COM_CompositorOperation.cpp index 5a919965ede..09e172f395e 100644 --- a/source/blender/compositor/operations/COM_CompositorOperation.cpp +++ b/source/blender/compositor/operations/COM_CompositorOperation.cpp @@ -68,6 +68,10 @@ void CompositorOperation::deinitExecution() MEM_freeN(rr->rectf); } rr->rectf = outputBuffer; + } else { + if (this->outputBuffer) { + MEM_freeN(this->outputBuffer); + } } if (re) { RE_ReleaseResult(re);