Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2011-08-23 16:20:11 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2011-08-23 16:20:11 +0400
commitbd38aa51ad029f114813d3d8f5a069571255b211 (patch)
treeb77bc0f4a5831025c23cbb5f1ec7f3500f3e0cf4
parentf717a1cca6ff7732119bd8d28e4d6e2c7ddd64e6 (diff)
Cycles: fix crash in 3d view status text display.
-rw-r--r--intern/cycles/blender/blender_python.cpp27
-rw-r--r--intern/cycles/blender/blender_session.cpp30
-rw-r--r--intern/cycles/blender/blender_session.h2
3 files changed, 21 insertions, 38 deletions
diff --git a/intern/cycles/blender/blender_python.cpp b/intern/cycles/blender/blender_python.cpp
index 1e72e5f15f1..b40f5206fea 100644
--- a/intern/cycles/blender/blender_python.cpp
+++ b/intern/cycles/blender/blender_python.cpp
@@ -129,37 +129,16 @@ static PyObject *draw_func(PyObject *self, PyObject *args)
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]);
- }
- else {
- /* image editor drawing */
- draw_text = session->draw();
+ session->draw(viewport[2], viewport[3]);
}
- /* 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)
diff --git a/intern/cycles/blender/blender_session.cpp b/intern/cycles/blender/blender_session.cpp
index 045efef0ef0..4223998c1f6 100644
--- a/intern/cycles/blender/blender_session.cpp
+++ b/intern/cycles/blender/blender_session.cpp
@@ -229,12 +229,10 @@ bool BlenderSession::draw(int w, int h)
session->reset(width, height);
}
- /* draw */
- return !session->draw(width, height);
-}
+ /* update status and progress for 3d view draw */
+ update_status_progress();
-bool BlenderSession::draw()
-{
+ /* draw */
return !session->draw(width, height);
}
@@ -252,20 +250,13 @@ void BlenderSession::get_progress(float& progress, double& total_time)
progress = ((float)pass/(float)session->params.passes);
}
-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()
+void BlenderSession::update_status_progress()
{
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 @@ void BlenderSession::tag_redraw()
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();
diff --git a/intern/cycles/blender/blender_session.h b/intern/cycles/blender/blender_session.h
index ea3e005a884..8608ddd2658 100644
--- a/intern/cycles/blender/blender_session.h
+++ b/intern/cycles/blender/blender_session.h
@@ -50,13 +50,13 @@ public:
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;