[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42521] trunk/blender/intern/cycles: Fix #29528: crash adding subsurf modifier in a particular scene with viewport render.

Brecht Van Lommel brechtvanlommel at pandora.be
Thu Dec 8 22:55:37 CET 2011


Revision: 42521
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42521
Author:   blendix
Date:     2011-12-08 21:55:35 +0000 (Thu, 08 Dec 2011)
Log Message:
-----------
Fix #29528: crash adding subsurf modifier in a particular scene with viewport render.

Modified Paths:
--------------
    trunk/blender/intern/cycles/blender/blender_sync.cpp
    trunk/blender/intern/cycles/render/mesh.cpp
    trunk/blender/intern/cycles/render/sobol.cpp
    trunk/blender/intern/cycles/render/sobol.h

Modified: trunk/blender/intern/cycles/blender/blender_sync.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_sync.cpp	2011-12-08 21:50:52 UTC (rev 42520)
+++ trunk/blender/intern/cycles/blender/blender_sync.cpp	2011-12-08 21:55:35 UTC (rev 42521)
@@ -269,7 +269,7 @@
 		if(!experimental || RNA_enum_get(&cscene, "gpu_type") == 0)
 			dtype = DEVICE_CUDA;
 		else
-			dtype = DEVICE_CUDA;
+			dtype = DEVICE_OPENCL;
 
 		if(device_type_available(types, dtype))
 			params.device_type = dtype;

Modified: trunk/blender/intern/cycles/render/mesh.cpp
===================================================================
--- trunk/blender/intern/cycles/render/mesh.cpp	2011-12-08 21:50:52 UTC (rev 42520)
+++ trunk/blender/intern/cycles/render/mesh.cpp	2011-12-08 21:55:35 UTC (rev 42521)
@@ -270,15 +270,19 @@
 void Mesh::tag_update(Scene *scene, bool rebuild)
 {
 	need_update = true;
-	if(rebuild)
+
+	if(rebuild) {
 		need_update_rebuild = true;
+		scene->light_manager->need_update = true;
+	}
+	else {
+		foreach(uint sindex, used_shaders)
+			if(scene->shaders[sindex]->has_surface_emission)
+				scene->light_manager->need_update = true;
+	}
 
 	scene->mesh_manager->need_update = true;
 	scene->object_manager->need_update = true;
-
-	foreach(uint sindex, used_shaders)
-		if(scene->shaders[sindex]->has_surface_emission)
-			scene->light_manager->need_update = true;
 }
 
 /* Mesh Manager */
@@ -685,9 +689,9 @@
 			if(!mesh->transform_applied) {
 				string msg = "Updating Mesh BVH ";
 				if(mesh->name == "")
-					msg += string_printf("%lu/%lu", (unsigned long)(i+1), (unsigned long)num_instance_bvh);
+					msg += string_printf("%u/%u", (uint)(i+1), (uint)num_instance_bvh);
 				else
-					msg += string_printf("%s %lu/%lu", mesh->name.c_str(), (unsigned long)(i+1), (unsigned long)num_instance_bvh);
+					msg += string_printf("%s %u/%u", mesh->name.c_str(), (uint)(i+1), (uint)num_instance_bvh);
 				progress.set_status(msg, "Building BVH");
 
 				mesh->compute_bvh(&scene->params, progress);

Modified: trunk/blender/intern/cycles/render/sobol.cpp
===================================================================
--- trunk/blender/intern/cycles/render/sobol.cpp	2011-12-08 21:50:52 UTC (rev 42520)
+++ trunk/blender/intern/cycles/render/sobol.cpp	2011-12-08 21:55:35 UTC (rev 42521)
@@ -47,6 +47,7 @@
  */
 
 #include "util_debug.h"
+#include "util_types.h"
 
 #include "sobol.h"
 
@@ -55,8 +56,8 @@
 #define SOBOL_MAX_NUMBER 32
 
 typedef struct SobolDirectionNumbers {
-	unsigned int d, s, a;
-	unsigned int m[SOBOL_MAX_NUMBER];
+	uint d, s, a;
+	uint m[SOBOL_MAX_NUMBER];
 } SobolDirectionNumbers;
 
 static SobolDirectionNumbers SOBOL_NUMBERS[SOBOL_MAX_DIMENSIONS-1] = {
@@ -21262,38 +21263,38 @@
 {21201, 18, 131059, {1, 1, 7, 11, 15, 7, 37, 239, 337, 245, 1557, 3681, 7357, 9639, 27367, 26869, 114603, 86317}}
 };
 
-void sobol_generate_direction_vectors(unsigned int vectors[][SOBOL_BITS], int dimensions)
+void sobol_generate_direction_vectors(uint vectors[][SOBOL_BITS], int dimensions)
 {
 	assert(dimensions <= SOBOL_MAX_DIMENSIONS);
 
-	const unsigned int L = SOBOL_BITS;
+	const uint L = SOBOL_BITS;
 
 	/* first dimension is exception */
-	unsigned int *v = vectors[0];
+	uint *v = vectors[0];
 
-	for(unsigned int i = 0; i < L; i++)
+	for(uint i = 0; i < L; i++)
 		v[i] = 1 << (31-i); // all m's = 1
 
 	for(int dim = 1; dim < dimensions; dim++) {
 		SobolDirectionNumbers *numbers = &SOBOL_NUMBERS[dim-1];
-		unsigned int s = numbers->s;
-		unsigned int a = numbers->a;
-		unsigned int *m = numbers->m;
+		uint s = numbers->s;
+		uint a = numbers->a;
+		uint *m = numbers->m;
 
 		v = vectors[dim];
 
 		if(L <= s) {
-			for(unsigned int i = 0; i < L; i++)
+			for(uint i = 0; i < L; i++)
 				v[i] = m[i] << (31-i); 
 		}
 		else {
-			for(unsigned int i = 0; i < s; i++)
+			for(uint i = 0; i < s; i++)
 				v[i] = m[i] << (31-i); 
 
-			for(unsigned int i = s; i < L; i++) {
+			for(uint i = s; i < L; i++) {
 				v[i] = v[i-s] ^ (v[i-s] >> s); 
 
-				for(unsigned int k = 1; k < s; k++) 
+				for(uint k = 1; k < s; k++) 
 					v[i] ^= (((a >> (s-1-k)) & 1) * v[i-k]); 
 			}
 		}

Modified: trunk/blender/intern/cycles/render/sobol.h
===================================================================
--- trunk/blender/intern/cycles/render/sobol.h	2011-12-08 21:50:52 UTC (rev 42520)
+++ trunk/blender/intern/cycles/render/sobol.h	2011-12-08 21:55:35 UTC (rev 42521)
@@ -19,12 +19,14 @@
 #ifndef __SOBOL_H__
 #define __SOBOL_H__
 
+#include "util_types.h"
+
 CCL_NAMESPACE_BEGIN
 
 #define SOBOL_BITS 32
 #define SOBOL_MAX_DIMENSIONS 21201
 
-void sobol_generate_direction_vectors(unsigned int vectors[][SOBOL_BITS], int dimensions);
+void sobol_generate_direction_vectors(uint vectors[][SOBOL_BITS], int dimensions);
 
 CCL_NAMESPACE_END
 




More information about the Bf-blender-cvs mailing list