forked from bartvdbraak/blender
Cycles: fix crash in 3d view status text display.
This commit is contained in:
parent
f717a1cca6
commit
bd38aa51ad
@ -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)
|
||||
|
@ -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();
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user