[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [39650] branches/cycles/intern/cycles/ blender: Cycles: fix crash in 3d view status text display.

Brecht Van Lommel brechtvanlommel at pandora.be
Tue Aug 23 14:20:11 CEST 2011


Revision: 39650
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=39650
Author:   blendix
Date:     2011-08-23 12:20:11 +0000 (Tue, 23 Aug 2011)
Log Message:
-----------
Cycles: fix crash in 3d view status text display.

Modified Paths:
--------------
    branches/cycles/intern/cycles/blender/blender_python.cpp
    branches/cycles/intern/cycles/blender/blender_session.cpp
    branches/cycles/intern/cycles/blender/blender_session.h

Modified: branches/cycles/intern/cycles/blender/blender_python.cpp
===================================================================
--- branches/cycles/intern/cycles/blender/blender_python.cpp	2011-08-23 12:18:32 UTC (rev 39649)
+++ branches/cycles/intern/cycles/blender/blender_python.cpp	2011-08-23 12:20:11 UTC (rev 39650)
@@ -129,37 +129,16 @@
 	
 	BlenderSession *session = (BlenderSession*)PyLong_AsVoidPtr(pysession);
 
-	bool draw_text = false;
-
 	if(PyLong_AsVoidPtr(pyrv3d)) {
 		/* 3d view drawing */
 		int viewport[4];
 		glGetIntegerv(GL_VIEWPORT, viewport);
 
-		draw_text = session->draw(viewport[2], viewport[3]);
+		session->draw(viewport[2], viewport[3]);
 	}
-	else {
-		/* image editor drawing */
-		draw_text = session->draw();
-	}
 
-	/* draw */
-	PyObject *ret = PyTuple_New(2);
-
-	if(!draw_text) {
-		PyTuple_SetItem(ret, 0, PyUnicode_FromString(""));
-		PyTuple_SetItem(ret, 1, PyUnicode_FromString(""));
-	}
-	else {
-		string status, substatus;
-
-		session->get_status(status, substatus);
-
-		PyTuple_SetItem(ret, 0, PyUnicode_FromString(status.c_str()));
-		PyTuple_SetItem(ret, 1, PyUnicode_FromString(substatus.c_str()));
-	}
-
-	return ret;
+	Py_INCREF(Py_None);
+	return Py_None;
 }
 
 static PyObject *sync_func(PyObject *self, PyObject *args)

Modified: branches/cycles/intern/cycles/blender/blender_session.cpp
===================================================================
--- branches/cycles/intern/cycles/blender/blender_session.cpp	2011-08-23 12:18:32 UTC (rev 39649)
+++ branches/cycles/intern/cycles/blender/blender_session.cpp	2011-08-23 12:20:11 UTC (rev 39650)
@@ -229,15 +229,13 @@
 			session->reset(width, height);
 	}
 
+	/* update status and progress for 3d view draw */
+	update_status_progress();
+
 	/* draw */
 	return !session->draw(width, height);
 }
 
-bool BlenderSession::draw()
-{
-	return !session->draw(width, height);
-}
-
 void BlenderSession::get_status(string& status, string& substatus)
 {
 	session->progress.get_status(status, substatus);
@@ -252,20 +250,13 @@
 	progress = ((float)pass/(float)session->params.passes);
 }
 
-void BlenderSession::tag_update()
+void BlenderSession::update_status_progress()
 {
-	/* tell blender that we want to get another update callback */
-	engine_tag_update((RenderEngine*)b_engine.ptr.data);
-}
-
-void BlenderSession::tag_redraw()
-{
 	string status, substatus;
 	float progress;
 	double total_time;
 	char time_str[128];
 
-	/* update stats and progress */
 	get_status(status, substatus);
 	get_progress(progress, total_time);
 
@@ -279,8 +270,21 @@
 
 	RE_engine_update_stats((RenderEngine*)b_engine.ptr.data, "", status.c_str());
 	RE_engine_update_progress((RenderEngine*)b_engine.ptr.data, progress);
+}
 
+void BlenderSession::tag_update()
+{
+	/* tell blender that we want to get another update callback */
+	engine_tag_update((RenderEngine*)b_engine.ptr.data);
+}
+
+void BlenderSession::tag_redraw()
+{
 	if(background) {
+		/* update stats and progress, only for background here because
+		   in 3d view we do it in draw for thread safety reasons */
+		update_status_progress();
+
 		/* offline render, redraw if timeout passed */
 		if(time_dt() - last_redraw_time > 1.0f) {
 			write_render_result();

Modified: branches/cycles/intern/cycles/blender/blender_session.h
===================================================================
--- branches/cycles/intern/cycles/blender/blender_session.h	2011-08-23 12:18:32 UTC (rev 39649)
+++ branches/cycles/intern/cycles/blender/blender_session.h	2011-08-23 12:20:11 UTC (rev 39650)
@@ -50,13 +50,13 @@
 	void synchronize();
 
 	/* drawing */
-	bool draw();
 	bool draw(int w, int h);
 	void tag_redraw();
 	void tag_update();
 	void get_status(string& status, string& substatus);
 	void get_progress(float& progress, double& total_time);
 	void test_cancel();
+	void update_status_progress();
 
 	bool background;
 	Session *session;




More information about the Bf-blender-cvs mailing list