[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [16309] branches/soc-2008-unclezeiv/source /blender/render/intern/source/lightcuts.c: Minor code refactoring.
Davide Vercelli
davide.vercelli at gmail.com
Sat Aug 30 17:12:10 CEST 2008
Revision: 16309
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=16309
Author: unclezeiv
Date: 2008-08-30 17:12:10 +0200 (Sat, 30 Aug 2008)
Log Message:
-----------
Minor code refactoring.
Modified Paths:
--------------
branches/soc-2008-unclezeiv/source/blender/render/intern/source/lightcuts.c
Modified: branches/soc-2008-unclezeiv/source/blender/render/intern/source/lightcuts.c
===================================================================
--- branches/soc-2008-unclezeiv/source/blender/render/intern/source/lightcuts.c 2008-08-30 14:32:16 UTC (rev 16308)
+++ branches/soc-2008-unclezeiv/source/blender/render/intern/source/lightcuts.c 2008-08-30 15:12:10 UTC (rev 16309)
@@ -396,23 +396,26 @@
}
/* this one uses kd tree */
-static void find_and_insert_new_min2(Heap * heap, KDTree * tree, KDTreeNearest *nearest, LightcutsCluster * array, LightcutsClusterPair * pair, int id, float c)
+static void find_and_insert_new_min2(Heap * heap, KDTree * tree, KDTreeNearest *nearest, KDSearchCallbackData *data, LightcutsClusterPair * pair, int id)
{
- LightcutsCluster *one= &array[id];
- KDSearchCallbackData data= {c, 0.0f, one, array};
+ LightcutsCluster *one= &data->array[id];
int other;
+ data->one= one;
+
if (one->type == CLUSTER_SPOT) {
float cos_a= cosf(one->cone_angle);
cos_a= MAX2(0.0f, cos_a);
- data.mindir= (1 - cos_a) * (1 - cos_a) * c;
+ data->mindir= (1 - cos_a) * (1 - cos_a) * data->c;
}
+ else
+ data->mindir= 0.0f;
- other= BLI_kdtree_find_callback(tree, one->lar->co, NULL, one->id, cb_update_metric_max_dist, &data, nearest);
+ other= BLI_kdtree_find_callback(tree, one->lar->co, NULL, one->id, cb_update_metric_max_dist, data, nearest);
if (other != -1)
{
- float metric= lightcuts_compute_metric(c, one, &array[other]);
+ float metric= lightcuts_compute_metric(data->c, one, &data->array[other]);
pair->first = id;
pair->second = other;
@@ -643,6 +646,8 @@
KDTree* kdtree = BLI_kdtree_new(tree->counter);
KDTreeNearest *nearest= MEM_callocN(sizeof(KDTreeNearest) * tree->counter, "kdtreenearest");
+
+ KDSearchCallbackData data= {c, 0.0f, NULL, array};
#ifdef LIGHTCUTS_DEBUG
if (print_times)
@@ -686,7 +691,7 @@
for (i = 0; i < tree->counter; i++)
if (array[i].type != CLUSTER_EMPTY)
- find_and_insert_new_min2(heap, kdtree, nearest, array, &pair_array[i], i, c);
+ find_and_insert_new_min2(heap, kdtree, nearest, &data, &pair_array[i], i);
/* now we have a nice heap with shortest metric for each element */
/* heap size = N (number of lights) - 1, and it doesn't grow */
@@ -702,7 +707,7 @@
/* we look for another minimum */
if (in_tree2) {
- find_and_insert_new_min2(heap, kdtree, nearest, array, minpair, minpair->first, c);
+ find_and_insert_new_min2(heap, kdtree, nearest, &data, minpair, minpair->first);
continue;
}
@@ -720,7 +725,7 @@
}
/* new search, avoid considering in_tree children */
- find_and_insert_new_min2(heap, kdtree, nearest, array, minpair, cluster_id, c);
+ find_and_insert_new_min2(heap, kdtree, nearest, &data, minpair, cluster_id);
}
BLI_heap_free(heap, 0);
More information about the Bf-blender-cvs
mailing list