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>2013-07-09 02:26:10 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2013-07-09 02:26:10 +0400
commit751062fc5fea7a17e9a1656391c841a6489194b2 (patch)
treef6fa2bb72beab9a901fe89e12113b214cbdaf72d /source/blender/render
parent63042da52af05870ab9aacd234efeb75291bd74f (diff)
Fix #35979, #35937, #35739: undo crashes and missing updates with blender
internal viewport rendering. Lots of tweaks here, mainly: * Stop 3D viewport render and free database before undo. * Accumulate update flags rather than replace them each time it rerenders, to avoid previous updates getting lost. * Don't check against Render struct view parameters for changes, those are set in the job thread which might not run before the next update call.
Diffstat (limited to 'source/blender/render')
-rw-r--r--source/blender/render/extern/include/RE_engine.h12
-rw-r--r--source/blender/render/intern/source/convertblender.c10
2 files changed, 19 insertions, 3 deletions
diff --git a/source/blender/render/extern/include/RE_engine.h b/source/blender/render/extern/include/RE_engine.h
index b6c3668512b..786c67f5305 100644
--- a/source/blender/render/extern/include/RE_engine.h
+++ b/source/blender/render/extern/include/RE_engine.h
@@ -70,6 +70,7 @@ struct Scene;
/* RenderEngine.update_flag, used by internal now */
#define RE_ENGINE_UPDATE_MA 1
#define RE_ENGINE_UPDATE_OTHER 2
+#define RE_ENGINE_UPDATE_DATABASE 4
extern ListBase R_engines;
@@ -97,7 +98,7 @@ typedef struct RenderEngine {
RenderEngineType *type;
void *py_instance;
- int flag, update_flag;
+ int flag;
struct Object *camera_override;
int tile_x;
@@ -110,6 +111,15 @@ typedef struct RenderEngine {
int resolution_x, resolution_y;
struct ReportList *reports;
+
+ /* for blender internal only */
+ int update_flag;
+ int job_update_flag;
+
+ rctf last_viewplane;
+ rcti last_disprect;
+ float last_viewmat[4][4];
+ int last_winx, last_winy;
} RenderEngine;
RenderEngine *RE_engine_create(RenderEngineType *type);
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c
index bd2d292f633..ce71ab188a9 100644
--- a/source/blender/render/intern/source/convertblender.c
+++ b/source/blender/render/intern/source/convertblender.c
@@ -4863,7 +4863,11 @@ static void init_render_object(Render *re, Object *ob, Object *par, DupliObject
void RE_Database_Free(Render *re)
{
LampRen *lar;
-
+
+ /* will crash if we try to free empty database */
+ if (!re->i.convertdone)
+ return;
+
/* statistics for debugging render memory usage */
if ((G.debug & G_DEBUG) && (G.is_rendering)) {
if ((re->r.scemode & (R_BUTS_PREVIEW|R_VIEWPORT_PREVIEW))==0) {
@@ -5399,8 +5403,10 @@ void RE_Database_Preprocess(Render *re)
volume_precache(re);
}
- if (re->test_break(re->tbh))
+ if (re->test_break(re->tbh)) {
+ re->i.convertdone = TRUE;
RE_Database_Free(re);
+ }
else
re->i.convertdone = TRUE;