[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [48107] trunk/blender/source/blender: minor speedup for the glare compositor node

Campbell Barton ideasman42 at gmail.com
Wed Jun 20 10:12:12 CEST 2012


Revision: 48107
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=48107
Author:   campbellbarton
Date:     2012-06-20 08:11:59 +0000 (Wed, 20 Jun 2012)
Log Message:
-----------
minor speedup for the glare compositor node
- pre calculate the UV dot product
- use image width and height converted to floats in the inner loop.

Modified Paths:
--------------
    trunk/blender/source/blender/compositor/operations/COM_ScreenLensDistortionOperation.cpp
    trunk/blender/source/blender/nodes/composite/nodes/node_composite_lensdist.c

Modified: trunk/blender/source/blender/compositor/operations/COM_ScreenLensDistortionOperation.cpp
===================================================================
--- trunk/blender/source/blender/compositor/operations/COM_ScreenLensDistortionOperation.cpp	2012-06-20 07:43:49 UTC (rev 48106)
+++ trunk/blender/source/blender/compositor/operations/COM_ScreenLensDistortionOperation.cpp	2012-06-20 08:11:59 UTC (rev 48107)
@@ -72,19 +72,20 @@
 	float tc[4] = {0, 0, 0, 0};
 	const float v = sc * ((y + 0.5f) - cy) / cy;
 	const float u = sc * ((x + 0.5f) - cx) / cx;
+	const float uv_dot = u * u + v * v;
 	int sta = 0, mid = 0, end = 0;
 
-	if ((t = 1.f - kr4 * (u * u + v * v)) >= 0.f) {
+	if ((t = 1.f - kr4 * uv_dot) >= 0.f) {
 		d = 1.f / (1.f + sqrtf(t));
 		ln[0] = (u * d + 0.5f) * width - 0.5f, ln[1] = (v * d + 0.5f) * height - 0.5f;
 		sta = 1;
 	}
-	if ((t = 1.f - kg4 * (u * u + v * v)) >= 0.f) {
+	if ((t = 1.f - kg4 * uv_dot) >= 0.f) {
 		d = 1.f / (1.f + sqrtf(t));
 		ln[2] = (u * d + 0.5f) * width - 0.5f, ln[3] = (v * d + 0.5f) * height - 0.5f;
 		mid = 1;
 	}
-	if ((t = 1.f - kb4 * (u * u + v * v)) >= 0.f) {
+	if ((t = 1.f - kb4 * uv_dot) >= 0.f) {
 		d = 1.f / (1.f + sqrtf(t));
 		ln[4] = (u * d + 0.5f) * width - 0.5f, ln[5] = (v * d + 0.5f) * height - 0.5f;
 		end = 1;
@@ -103,10 +104,10 @@
 
 			for (z = 0; z < ds; ++z) {
 				const float tz = ((float)z + (jit ? BLI_frand() : 0.5f)) * sd;
-				t = 1.f - (kr4 + tz * drg) * (u * u + v * v);
+				t = 1.f - (kr4 + tz * drg) * uv_dot;
 				d = 1.f / (1.f + sqrtf(t));
-				const float nx = (u * d + 0.5f) * getWidth() - 0.5f;
-				const float ny = (v * d + 0.5f) * getHeight() - 0.5f;
+				const float nx = (u * d + 0.5f) * width - 0.5f;
+				const float ny = (v * d + 0.5f) * height - 0.5f;
 				buffer->readCubic(color, nx, ny);
 				tc[0] += (1.f - tz) * color[0], tc[1] += tz * color[1];
 				dr++, dg++;
@@ -121,10 +122,10 @@
 
 			for (z = 0; z < ds; ++z) {
 				const float tz = ((float)z + (jit ? BLI_frand() : 0.5f)) * sd;
-				t = 1.f - (kg4 + tz * dgb) * (u * u + v * v);
+				t = 1.f - (kg4 + tz * dgb) * uv_dot;
 				d = 1.f / (1.f + sqrtf(t));
-				const float nx = (u * d + 0.5f) * getWidth() - 0.5f;
-				const float ny = (v * d + 0.5f) * getHeight() - 0.5f;
+				const float nx = (u * d + 0.5f) * width - 0.5f;
+				const float ny = (v * d + 0.5f) * height - 0.5f;
 				buffer->readCubic(color, nx, ny);
 				tc[1] += (1.f - tz) * color[1], tc[2] += tz * color[2];
 				dg++, db++;

Modified: trunk/blender/source/blender/nodes/composite/nodes/node_composite_lensdist.c
===================================================================
--- trunk/blender/source/blender/nodes/composite/nodes/node_composite_lensdist.c	2012-06-20 07:43:49 UTC (rev 48106)
+++ trunk/blender/source/blender/nodes/composite/nodes/node_composite_lensdist.c	2012-06-20 08:11:59 UTC (rev 48107)
@@ -98,19 +98,20 @@
 				float d, t, ln[6] = {0, 0, 0, 0, 0, 0};
 				fRGB c1, tc = {0, 0, 0, 0};
 				const float u = sc*((x + 0.5f) - cx)/cx;
+				const float uv_dot = u * u + v * v;
 				int sta = 0, mid = 0, end = 0;
 				
-				if ((t = 1.f - kr*(u*u + v*v)) >= 0.f) {
+				if ((t = 1.f - kr*uv_dot) >= 0.f) {
 					d = 1.f/(1.f + sqrtf(t));
 					ln[0] = (u*d + 0.5f)*dst->x - 0.5f, ln[1] = (v*d + 0.5f)*dst->y - 0.5f;
 					sta = 1;
 				}
-				if ((t = 1.f - kg*(u*u + v*v)) >= 0.f) {
+				if ((t = 1.f - kg*uv_dot) >= 0.f) {
 					d = 1.f/(1.f + sqrtf(t));
 					ln[2] = (u*d + 0.5f)*dst->x - 0.5f, ln[3] = (v*d + 0.5f)*dst->y - 0.5f;
 					mid = 1;
 				}
-				if ((t = 1.f - kb*(u*u + v*v)) >= 0.f) {
+				if ((t = 1.f - kb*uv_dot) >= 0.f) {
 					d = 1.f/(1.f + sqrtf(t));
 					ln[4] = (u*d + 0.5f)*dst->x - 0.5f, ln[5] = (v*d + 0.5f)*dst->y - 0.5f;
 					end = 1;
@@ -125,7 +126,7 @@
 					
 					for (z=0; z<ds; ++z) {
 						const float tz = ((float)z + (jit ? BLI_frand() : 0.5f))*sd;
-						t = 1.f - (kr + tz*drg)*(u*u + v*v);
+						t = 1.f - (kr + tz*drg)*uv_dot;
 						d = 1.f / (1.f + sqrtf(t));
 						qd_getPixelLerp(src, (u*d + 0.5f)*dst->x - 0.5f, (v*d + 0.5f)*dst->y - 0.5f, c1);
 						if (src->type == CB_VAL) c1[1] = c1[2] = c1[0];
@@ -141,7 +142,7 @@
 						
 						for (z=0; z<ds; ++z) {
 							const float tz = ((float)z + (jit ? BLI_frand() : 0.5f))*sd;
-							t = 1.f - (kg + tz*dgb)*(u*u + v*v);
+							t = 1.f - (kg + tz*dgb)*uv_dot;
 							d = 1.f / (1.f + sqrtf(t));
 							qd_getPixelLerp(src, (u*d + 0.5f)*dst->x - 0.5f, (v*d + 0.5f)*dst->y - 0.5f, c1);
 							if (src->type == CB_VAL) c1[1] = c1[2] = c1[0];




More information about the Bf-blender-cvs mailing list