[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [58512] trunk/blender/source/blender/ compositor: fix [#36248] Crash using factor input on color mix node.

Campbell Barton ideasman42 at gmail.com
Mon Jul 22 21:59:08 CEST 2013


Revision: 58512
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=58512
Author:   campbellbarton
Date:     2013-07-22 19:59:07 +0000 (Mon, 22 Jul 2013)
Log Message:
-----------
fix [#36248] Crash using factor input on color mix node.

Modified Paths:
--------------
    trunk/blender/source/blender/compositor/intern/COM_SocketReader.h
    trunk/blender/source/blender/compositor/intern/COM_WorkScheduler.cpp
    trunk/blender/source/blender/compositor/operations/COM_ConvertColorToBWOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_ConvertColorToValueProg.cpp
    trunk/blender/source/blender/compositor/operations/COM_MathBaseOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_MixAddOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_MixBurnOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_MixColorOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_MixDarkenOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_MixDifferenceOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_MixDivideOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_MixDodgeOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_MixHueOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_MixLightenOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_MixLinearLightOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_MixOverlayOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_MixSaturationOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_MixScreenOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_MixSoftLightOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_MixSubtractOperation.cpp
    trunk/blender/source/blender/compositor/operations/COM_MixValueOperation.cpp

Modified: trunk/blender/source/blender/compositor/intern/COM_SocketReader.h
===================================================================
--- trunk/blender/source/blender/compositor/intern/COM_SocketReader.h	2013-07-22 19:24:39 UTC (rev 58511)
+++ trunk/blender/source/blender/compositor/intern/COM_SocketReader.h	2013-07-22 19:59:07 UTC (rev 58512)
@@ -91,13 +91,13 @@
 	virtual void executePixel(float output[4], float x, float y, float dx, float dy, PixelSampler sampler) {}
 
 public:
-	inline void read(float *result, float x, float y, PixelSampler sampler) {
+	inline void read(float result[4], float x, float y, PixelSampler sampler) {
 		executePixel(result, x, y, sampler);
 	}
-	inline void read(float *result, int x, int y, void *chunkData) {
+	inline void read(float result[4], int x, int y, void *chunkData) {
 		executePixel(result, x, y, chunkData);
 	}
-	inline void read(float *result, float x, float y, float dx, float dy, PixelSampler sampler) {
+	inline void read(float result[4], float x, float y, float dx, float dy, PixelSampler sampler) {
 		executePixel(result, x, y, dx, dy, sampler);
 	}
 

Modified: trunk/blender/source/blender/compositor/intern/COM_WorkScheduler.cpp
===================================================================
--- trunk/blender/source/blender/compositor/intern/COM_WorkScheduler.cpp	2013-07-22 19:24:39 UTC (rev 58511)
+++ trunk/blender/source/blender/compositor/intern/COM_WorkScheduler.cpp	2013-07-22 19:59:07 UTC (rev 58512)
@@ -81,6 +81,7 @@
 void **g_highlightedNodes;
 void **g_highlightedNodesRead;
 
+#if COM_CURRENT_THREADING_MODEL == COM_TM_QUEUE
 #define HIGHLIGHT(wp) \
 { \
 	ExecutionGroup *group = wp->getExecutionGroup(); \
@@ -103,6 +104,7 @@
 		} \
 	} \
 }
+#endif  /* COM_CURRENT_THREADING_MODEL == COM_TM_QUEUE */
 
 void COM_startReadHighlights()
 {

Modified: trunk/blender/source/blender/compositor/operations/COM_ConvertColorToBWOperation.cpp
===================================================================
--- trunk/blender/source/blender/compositor/operations/COM_ConvertColorToBWOperation.cpp	2013-07-22 19:24:39 UTC (rev 58511)
+++ trunk/blender/source/blender/compositor/operations/COM_ConvertColorToBWOperation.cpp	2013-07-22 19:59:07 UTC (rev 58512)
@@ -37,7 +37,7 @@
 void ConvertColorToBWOperation::executePixel(float output[4], float x, float y, PixelSampler sampler)
 {
 	float inputColor[4];
-	this->m_inputOperation->read(&inputColor[0], x, y, sampler);
+	this->m_inputOperation->read(inputColor, x, y, sampler);
 	output[0] = rgb_to_bw(inputColor);
 }
 

Modified: trunk/blender/source/blender/compositor/operations/COM_ConvertColorToValueProg.cpp
===================================================================
--- trunk/blender/source/blender/compositor/operations/COM_ConvertColorToValueProg.cpp	2013-07-22 19:24:39 UTC (rev 58511)
+++ trunk/blender/source/blender/compositor/operations/COM_ConvertColorToValueProg.cpp	2013-07-22 19:59:07 UTC (rev 58512)
@@ -37,7 +37,7 @@
 void ConvertColorToValueProg::executePixel(float output[4], float x, float y, PixelSampler sampler)
 {
 	float inputColor[4];
-	this->m_inputOperation->read(&inputColor[0], x, y, sampler);
+	this->m_inputOperation->read(inputColor, x, y, sampler);
 	output[0] = (inputColor[0] + inputColor[1] + inputColor[2]) / 3.0f;
 }
 

Modified: trunk/blender/source/blender/compositor/operations/COM_MathBaseOperation.cpp
===================================================================
--- trunk/blender/source/blender/compositor/operations/COM_MathBaseOperation.cpp	2013-07-22 19:24:39 UTC (rev 58511)
+++ trunk/blender/source/blender/compositor/operations/COM_MathBaseOperation.cpp	2013-07-22 19:59:07 UTC (rev 58512)
@@ -77,8 +77,8 @@
 	float inputValue1[4];
 	float inputValue2[4];
 	
-	this->m_inputValue1Operation->read(&inputValue1[0], x, y, sampler);
-	this->m_inputValue2Operation->read(&inputValue2[0], x, y, sampler);
+	this->m_inputValue1Operation->read(inputValue1, x, y, sampler);
+	this->m_inputValue2Operation->read(inputValue2, x, y, sampler);
 	
 	output[0] = inputValue1[0] + inputValue2[0];
 
@@ -90,8 +90,8 @@
 	float inputValue1[4];
 	float inputValue2[4];
 	
-	this->m_inputValue1Operation->read(&inputValue1[0], x, y, sampler);
-	this->m_inputValue2Operation->read(&inputValue2[0], x, y, sampler);
+	this->m_inputValue1Operation->read(inputValue1, x, y, sampler);
+	this->m_inputValue2Operation->read(inputValue2, x, y, sampler);
 	
 	output[0] = inputValue1[0] - inputValue2[0];
 
@@ -103,8 +103,8 @@
 	float inputValue1[4];
 	float inputValue2[4];
 	
-	this->m_inputValue1Operation->read(&inputValue1[0], x, y, sampler);
-	this->m_inputValue2Operation->read(&inputValue2[0], x, y, sampler);
+	this->m_inputValue1Operation->read(inputValue1, x, y, sampler);
+	this->m_inputValue2Operation->read(inputValue2, x, y, sampler);
 	
 	output[0] = inputValue1[0] * inputValue2[0];
 
@@ -116,8 +116,8 @@
 	float inputValue1[4];
 	float inputValue2[4];
 	
-	this->m_inputValue1Operation->read(&inputValue1[0], x, y, sampler);
-	this->m_inputValue2Operation->read(&inputValue2[0], x, y, sampler);
+	this->m_inputValue1Operation->read(inputValue1, x, y, sampler);
+	this->m_inputValue2Operation->read(inputValue2, x, y, sampler);
 	
 	if (inputValue2[0] == 0) /* We don't want to divide by zero. */
 		output[0] = 0.0;
@@ -132,8 +132,8 @@
 	float inputValue1[4];
 	float inputValue2[4];
 	
-	this->m_inputValue1Operation->read(&inputValue1[0], x, y, sampler);
-	this->m_inputValue2Operation->read(&inputValue2[0], x, y, sampler);
+	this->m_inputValue1Operation->read(inputValue1, x, y, sampler);
+	this->m_inputValue2Operation->read(inputValue2, x, y, sampler);
 	
 	output[0] = sin(inputValue1[0]);
 
@@ -145,8 +145,8 @@
 	float inputValue1[4];
 	float inputValue2[4];
 	
-	this->m_inputValue1Operation->read(&inputValue1[0], x, y, sampler);
-	this->m_inputValue2Operation->read(&inputValue2[0], x, y, sampler);
+	this->m_inputValue1Operation->read(inputValue1, x, y, sampler);
+	this->m_inputValue2Operation->read(inputValue2, x, y, sampler);
 	
 	output[0] = cos(inputValue1[0]);
 
@@ -158,8 +158,8 @@
 	float inputValue1[4];
 	float inputValue2[4];
 	
-	this->m_inputValue1Operation->read(&inputValue1[0], x, y, sampler);
-	this->m_inputValue2Operation->read(&inputValue2[0], x, y, sampler);
+	this->m_inputValue1Operation->read(inputValue1, x, y, sampler);
+	this->m_inputValue2Operation->read(inputValue2, x, y, sampler);
 	
 	output[0] = tan(inputValue1[0]);
 
@@ -171,8 +171,8 @@
 	float inputValue1[4];
 	float inputValue2[4];
 	
-	this->m_inputValue1Operation->read(&inputValue1[0], x, y, sampler);
-	this->m_inputValue2Operation->read(&inputValue2[0], x, y, sampler);
+	this->m_inputValue1Operation->read(inputValue1, x, y, sampler);
+	this->m_inputValue2Operation->read(inputValue2, x, y, sampler);
 	
 	if (inputValue1[0] <= 1 && inputValue1[0] >= -1)
 		output[0] = asin(inputValue1[0]);
@@ -187,8 +187,8 @@
 	float inputValue1[4];
 	float inputValue2[4];
 	
-	this->m_inputValue1Operation->read(&inputValue1[0], x, y, sampler);
-	this->m_inputValue2Operation->read(&inputValue2[0], x, y, sampler);
+	this->m_inputValue1Operation->read(inputValue1, x, y, sampler);
+	this->m_inputValue2Operation->read(inputValue2, x, y, sampler);
 	
 	if (inputValue1[0] <= 1 && inputValue1[0] >= -1)
 		output[0] = acos(inputValue1[0]);
@@ -203,8 +203,8 @@
 	float inputValue1[4];
 	float inputValue2[4];
 	
-	this->m_inputValue1Operation->read(&inputValue1[0], x, y, sampler);
-	this->m_inputValue2Operation->read(&inputValue2[0], x, y, sampler);
+	this->m_inputValue1Operation->read(inputValue1, x, y, sampler);
+	this->m_inputValue2Operation->read(inputValue2, x, y, sampler);
 	
 	output[0] = atan(inputValue1[0]);
 
@@ -216,8 +216,8 @@
 	float inputValue1[4];
 	float inputValue2[4];
 	
-	this->m_inputValue1Operation->read(&inputValue1[0], x, y, sampler);
-	this->m_inputValue2Operation->read(&inputValue2[0], x, y, sampler);
+	this->m_inputValue1Operation->read(inputValue1, x, y, sampler);
+	this->m_inputValue2Operation->read(inputValue2, x, y, sampler);
 	
 	if (inputValue1[0] >= 0) {
 		output[0] = pow(inputValue1[0], inputValue2[0]);
@@ -241,8 +241,8 @@
 	float inputValue1[4];
 	float inputValue2[4];
 	
-	this->m_inputValue1Operation->read(&inputValue1[0], x, y, sampler);
-	this->m_inputValue2Operation->read(&inputValue2[0], x, y, sampler);
+	this->m_inputValue1Operation->read(inputValue1, x, y, sampler);
+	this->m_inputValue2Operation->read(inputValue2, x, y, sampler);
 	
 	if (inputValue1[0] > 0  && inputValue2[0] > 0)
 		output[0] = log(inputValue1[0]) / log(inputValue2[0]);
@@ -257,8 +257,8 @@
 	float inputValue1[4];
 	float inputValue2[4];
 	
-	this->m_inputValue1Operation->read(&inputValue1[0], x, y, sampler);
-	this->m_inputValue2Operation->read(&inputValue2[0], x, y, sampler);
+	this->m_inputValue1Operation->read(inputValue1, x, y, sampler);
+	this->m_inputValue2Operation->read(inputValue2, x, y, sampler);
 	
 	output[0] = min(inputValue1[0], inputValue2[0]);
 
@@ -270,8 +270,8 @@
 	float inputValue1[4];
 	float inputValue2[4];
 	
-	this->m_inputValue1Operation->read(&inputValue1[0], x, y, sampler);
-	this->m_inputValue2Operation->read(&inputValue2[0], x, y, sampler);
+	this->m_inputValue1Operation->read(inputValue1, x, y, sampler);
+	this->m_inputValue2Operation->read(inputValue2, x, y, sampler);
 	
 	output[0] = max(inputValue1[0], inputValue2[0]);
 
@@ -283,8 +283,8 @@
 	float inputValue1[4];
 	float inputValue2[4];
 	
-	this->m_inputValue1Operation->read(&inputValue1[0], x, y, sampler);
-	this->m_inputValue2Operation->read(&inputValue2[0], x, y, sampler);
+	this->m_inputValue1Operation->read(inputValue1, x, y, sampler);
+	this->m_inputValue2Operation->read(inputValue2, x, y, sampler);
 	
 	output[0] = round(inputValue1[0]);
 
@@ -296,8 +296,8 @@
 	float inputValue1[4];
 	float inputValue2[4];
 	
-	this->m_inputValue1Operation->read(&inputValue1[0], x, y, sampler);
-	this->m_inputValue2Operation->read(&inputValue2[0], x, y, sampler);
+	this->m_inputValue1Operation->read(inputValue1, x, y, sampler);
+	this->m_inputValue2Operation->read(inputValue2, x, y, sampler);
 	
 	output[0] = inputValue1[0] < inputValue2[0] ? 1.0f : 0.0f;
 
@@ -309,8 +309,8 @@
 	float inputValue1[4];
 	float inputValue2[4];
 	
-	this->m_inputValue1Operation->read(&inputValue1[0], x, y, sampler);
-	this->m_inputValue2Operation->read(&inputValue2[0], x, y, sampler);
+	this->m_inputValue1Operation->read(inputValue1, x, y, sampler);

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list