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;

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to