[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [48908] trunk/blender: more minor speedups for new mask rasterizer

Campbell Barton ideasman42 at gmail.com
Sat Jul 14 06:08:04 CEST 2012


Revision: 48908
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=48908
Author:   campbellbarton
Date:     2012-07-14 04:07:59 +0000 (Sat, 14 Jul 2012)
Log Message:
-----------
more minor speedups for new mask rasterizer

Modified Paths:
--------------
    trunk/blender/build_files/cmake/config/blender_lite.cmake
    trunk/blender/source/blender/blenkernel/intern/mask_rasterize.c

Modified: trunk/blender/build_files/cmake/config/blender_lite.cmake
===================================================================
--- trunk/blender/build_files/cmake/config/blender_lite.cmake	2012-07-14 03:59:38 UTC (rev 48907)
+++ trunk/blender/build_files/cmake/config/blender_lite.cmake	2012-07-14 04:07:59 UTC (rev 48908)
@@ -17,6 +17,7 @@
 set(WITH_LIBMV               OFF CACHE FORCE BOOL)
 set(WITH_CARVE               OFF CACHE FORCE BOOL)
 set(WITH_GAMEENGINE          OFF CACHE FORCE BOOL)
+set(WITH_COMPOSITOR          OFF CACHE FORCE BOOL)
 set(WITH_GHOST_XDND          OFF CACHE FORCE BOOL)
 set(WITH_IK_ITASC            OFF CACHE FORCE BOOL)
 set(WITH_IMAGE_CINEON        OFF CACHE FORCE BOOL)

Modified: trunk/blender/source/blender/blenkernel/intern/mask_rasterize.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mask_rasterize.c	2012-07-14 03:59:38 UTC (rev 48907)
+++ trunk/blender/source/blender/blenkernel/intern/mask_rasterize.c	2012-07-14 04:07:59 UTC (rev 48908)
@@ -148,13 +148,14 @@
 
 
 void maskrasterize_spline_differentiate_point_inset(float (*diff_feather_points)[2], float (*diff_points)[2],
-                                                    const int tot_diff_point, const float ofs, const int do_test)
+                                                    const unsigned int tot_diff_point, const float ofs,
+                                                    const short do_test)
 {
-	int k_prev = tot_diff_point - 2;
-	int k_curr = tot_diff_point - 1;
-	int k_next = 0;
+	unsigned int k_prev = tot_diff_point - 2;
+	unsigned int k_curr = tot_diff_point - 1;
+	unsigned int k_next = 0;
 
-	int k;
+	unsigned int k;
 
 	float d_prev[2];
 	float d_next[2];
@@ -174,9 +175,6 @@
 	sub_v2_v2v2(d_prev, co_prev, co_curr);
 	normalize_v2(d_prev);
 
-	/* TODO, speedup by only doing one normalize per iter */
-
-
 	for (k = 0; k < tot_diff_point; k++) {
 
 		co_prev = diff_points[k_prev];
@@ -223,7 +221,7 @@
 
 	const float zvec[3] = {0.0f, 0.0f, 1.0f};
 	MaskLayer *masklay;
-	int masklay_index;
+	unsigned int masklay_index;
 
 	mr_handle->layers_tot = BLI_countlist(&mask->masklayers);
 	mr_handle->layers = MEM_mallocN(sizeof(MaskRasterLayer) * mr_handle->layers_tot, STRINGIFY(MaskRasterLayer));
@@ -506,6 +504,7 @@
 	if (tri[3] == TRI_VERT) {
 		/* --- tri --- */
 
+#if 0
 		/* not essential but avoids unneeded extra lookups */
 		if ((cos[0][2] < dist_orig) ||
 		    (cos[1][2] < dist_orig) ||
@@ -513,13 +512,17 @@
 		{
 			if (isect_point_tri_v2(xy, cos[tri[0]], cos[tri[1]], cos[tri[2]])) {
 				/* we know all tris are close for now */
-#if 0
 				return maskrasterize_layer_z_depth_tri(xy, cos[tri[0]], cos[tri[1]], cos[tri[2]]);
+			}
+		}
 #else
+        /* we know all tris are close for now */
+		if (1) {
+			if (isect_point_tri_v2(xy, cos[tri[0]], cos[tri[1]], cos[tri[2]])) {
 				return 0.0f;
-#endif
 			}
 		}
+#endif
 	}
 	else {
 		/* --- quad --- */
@@ -558,8 +561,8 @@
 	MemArena *arena = BLI_memarena_new(1 << 16, __func__);
 
 	/* TODO - calculate best bucket size */
-	layer->buckets_x = 128;
-	layer->buckets_y = 128;
+	layer->buckets_x = 256;
+	layer->buckets_y = 256;
 
 	layer->buckets_xy_scalar[0] = (1.0f / ((layer->bounds.xmax - layer->bounds.xmin) + FLT_EPSILON)) * layer->buckets_x;
 	layer->buckets_xy_scalar[1] = (1.0f / ((layer->bounds.ymax - layer->bounds.ymin) + FLT_EPSILON)) * layer->buckets_y;
@@ -684,8 +687,9 @@
 			unsigned int *tri = layer->tri_array[*tri_index];
 			if ((test_dist = maskrasterize_layer_isect(tri, cos, best_dist, xy)) < best_dist) {
 				best_dist = test_dist;
-				/* bail early */
-				if (best_dist <= 0.0f) {
+                /* comparing with 0.0f is OK here because triangles are always zero depth */
+				if (best_dist == 0.0f) {
+                    /* bail early, we're as close as possible  */
 					return 0.0f;
 				}
 			}
@@ -701,8 +705,6 @@
 
 float BLI_maskrasterize_handle_sample(MaskRasterHandle *mr_handle, const float xy[2])
 {
-	/* TODO - AA jitter */
-
 	if (BLI_in_rctf_v(&mr_handle->bounds, xy)) {
 		const unsigned int layers_tot = mr_handle->layers_tot;
 		unsigned int i;




More information about the Bf-blender-cvs mailing list