forked from bartvdbraak/blender
Implement Start Resolution for preview render in BI
So now viewport render resolution division works exactly the same as in Cycles.
This commit is contained in:
parent
2af99b7437
commit
f14e740dee
@ -273,6 +273,9 @@ class RENDER_PT_performance(RenderButtonsPanel, Panel):
|
|||||||
col.prop(rd, "tile_x", text="X")
|
col.prop(rd, "tile_x", text="X")
|
||||||
col.prop(rd, "tile_y", text="Y")
|
col.prop(rd, "tile_y", text="Y")
|
||||||
|
|
||||||
|
col.separator()
|
||||||
|
col.prop(rd, 'preview_start_resolution')
|
||||||
|
|
||||||
col = split.column()
|
col = split.column()
|
||||||
col.label(text="Memory:")
|
col.label(text="Memory:")
|
||||||
sub = col.column()
|
sub = col.column()
|
||||||
|
@ -309,4 +309,11 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *main)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!DNA_struct_elem_find(fd->filesdna, "RenderData", "int", "preview_start_resolution")) {
|
||||||
|
Scene *scene;
|
||||||
|
for (scene = main->scene.first; scene; scene = scene->id.next) {
|
||||||
|
scene->r.preview_start_resolution = 64;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1014,8 +1014,6 @@ void RENDER_OT_render(wmOperatorType *ot)
|
|||||||
#define PR_UPDATE_MATERIAL 4
|
#define PR_UPDATE_MATERIAL 4
|
||||||
#define PR_UPDATE_DATABASE 8
|
#define PR_UPDATE_DATABASE 8
|
||||||
|
|
||||||
#define START_RESOLUTION_DIVIDER 8
|
|
||||||
|
|
||||||
typedef struct RenderPreview {
|
typedef struct RenderPreview {
|
||||||
/* from wmJob */
|
/* from wmJob */
|
||||||
void *owner;
|
void *owner;
|
||||||
@ -1032,6 +1030,7 @@ typedef struct RenderPreview {
|
|||||||
|
|
||||||
float viewmat[4][4];
|
float viewmat[4][4];
|
||||||
|
|
||||||
|
int start_resolution_divider;
|
||||||
int resolution_divider;
|
int resolution_divider;
|
||||||
} RenderPreview;
|
} RenderPreview;
|
||||||
|
|
||||||
@ -1193,7 +1192,7 @@ static void render_view3d_startjob(void *customdata, short *stop, short *do_upda
|
|||||||
rstats = RE_GetStats(re);
|
rstats = RE_GetStats(re);
|
||||||
|
|
||||||
if (update_flag & PR_UPDATE_VIEW) {
|
if (update_flag & PR_UPDATE_VIEW) {
|
||||||
rp->resolution_divider = START_RESOLUTION_DIVIDER;
|
rp->resolution_divider = rp->start_resolution_divider;
|
||||||
}
|
}
|
||||||
|
|
||||||
use_border = render_view3d_disprect(rp->scene, rp->ar, rp->v3d,
|
use_border = render_view3d_disprect(rp->scene, rp->ar, rp->v3d,
|
||||||
@ -1388,7 +1387,12 @@ static void render_view3d_do(RenderEngine *engine, const bContext *C)
|
|||||||
wmJob *wm_job;
|
wmJob *wm_job;
|
||||||
RenderPreview *rp;
|
RenderPreview *rp;
|
||||||
Scene *scene = CTX_data_scene(C);
|
Scene *scene = CTX_data_scene(C);
|
||||||
|
ARegion *ar = CTX_wm_region(C);
|
||||||
|
int width = ar->winx, height = ar->winy;
|
||||||
|
int divider = 1;
|
||||||
|
int resolution_threshold = scene->r.preview_start_resolution *
|
||||||
|
scene->r.preview_start_resolution;
|
||||||
|
|
||||||
if (CTX_wm_window(C) == NULL)
|
if (CTX_wm_window(C) == NULL)
|
||||||
return;
|
return;
|
||||||
if (!render_view3d_flag_changed(engine, C))
|
if (!render_view3d_flag_changed(engine, C))
|
||||||
@ -1399,6 +1403,12 @@ static void render_view3d_do(RenderEngine *engine, const bContext *C)
|
|||||||
rp = MEM_callocN(sizeof(RenderPreview), "render preview");
|
rp = MEM_callocN(sizeof(RenderPreview), "render preview");
|
||||||
rp->job = wm_job;
|
rp->job = wm_job;
|
||||||
|
|
||||||
|
while (width * height > resolution_threshold) {
|
||||||
|
width = max_ii(1, width / 2);
|
||||||
|
height = max_ii(1, height / 2);
|
||||||
|
divider *= 2;
|
||||||
|
}
|
||||||
|
|
||||||
/* customdata for preview thread */
|
/* customdata for preview thread */
|
||||||
rp->scene = scene;
|
rp->scene = scene;
|
||||||
rp->engine = engine;
|
rp->engine = engine;
|
||||||
@ -1407,7 +1417,8 @@ static void render_view3d_do(RenderEngine *engine, const bContext *C)
|
|||||||
rp->v3d = rp->sa->spacedata.first;
|
rp->v3d = rp->sa->spacedata.first;
|
||||||
rp->rv3d = CTX_wm_region_view3d(C);
|
rp->rv3d = CTX_wm_region_view3d(C);
|
||||||
rp->bmain = CTX_data_main(C);
|
rp->bmain = CTX_data_main(C);
|
||||||
rp->resolution_divider = START_RESOLUTION_DIVIDER;
|
rp->resolution_divider = divider;
|
||||||
|
rp->start_resolution_divider = divider;
|
||||||
copy_m4_m4(rp->viewmat, rp->rv3d->viewmat);
|
copy_m4_m4(rp->viewmat, rp->rv3d->viewmat);
|
||||||
|
|
||||||
/* clear info text */
|
/* clear info text */
|
||||||
|
@ -604,6 +604,9 @@ typedef struct RenderData {
|
|||||||
|
|
||||||
/* Cycles baking */
|
/* Cycles baking */
|
||||||
struct BakeData bake;
|
struct BakeData bake;
|
||||||
|
|
||||||
|
int preview_start_resolution;
|
||||||
|
int pad;
|
||||||
} RenderData;
|
} RenderData;
|
||||||
|
|
||||||
/* *************************************************************** */
|
/* *************************************************************** */
|
||||||
|
@ -4436,7 +4436,15 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
|
|||||||
RNA_def_property_range(prop, 8, 65536);
|
RNA_def_property_range(prop, 8, 65536);
|
||||||
RNA_def_property_ui_text(prop, "Tile Y", "Vertical tile size to use while rendering");
|
RNA_def_property_ui_text(prop, "Tile Y", "Vertical tile size to use while rendering");
|
||||||
RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
|
RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
|
||||||
|
|
||||||
|
prop = RNA_def_property(srna, "preview_start_resolution", PROP_INT, PROP_NONE);
|
||||||
|
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
|
||||||
|
RNA_def_property_range(prop, 8, 16384);
|
||||||
|
RNA_def_property_int_default(prop, 64);
|
||||||
|
RNA_def_property_ui_text(prop, "Start Resolution", "Resolution to start rendering preview at, "
|
||||||
|
"progressively increasing it to the full viewport size");
|
||||||
|
RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
|
||||||
|
|
||||||
prop = RNA_def_property(srna, "pixel_aspect_x", PROP_FLOAT, PROP_NONE);
|
prop = RNA_def_property(srna, "pixel_aspect_x", PROP_FLOAT, PROP_NONE);
|
||||||
RNA_def_property_float_sdna(prop, NULL, "xasp");
|
RNA_def_property_float_sdna(prop, NULL, "xasp");
|
||||||
RNA_def_property_flag(prop, PROP_PROPORTIONAL);
|
RNA_def_property_flag(prop, PROP_PROPORTIONAL);
|
||||||
|
Loading…
Reference in New Issue
Block a user