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:
Diffstat (limited to 'source/blender/draw/intern')
-rw-r--r--source/blender/draw/intern/DRW_render.h2
-rw-r--r--source/blender/draw/intern/draw_manager.c41
2 files changed, 19 insertions, 24 deletions
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index 1a4950bbf97..203fb80c0a0 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -410,7 +410,7 @@ struct DefaultTextureList *DRW_viewport_texture_list_get(void);
void DRW_viewport_request_redraw(void);
-void DRW_render_to_image(struct RenderEngine *re, struct Depsgraph *depsgraph);
+void DRW_render_to_image(struct RenderEngine *engine, struct Depsgraph *graph);
void DRW_render_object_iter(
void *vedata, struct RenderEngine *engine, struct Depsgraph *graph,
void (*callback)(void *vedata, struct Object *ob, struct RenderEngine *engine, struct Depsgraph *graph));
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index dafd16be270..baa76518270 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -3664,11 +3664,11 @@ void DRW_draw_render_loop_offscreen(
void DRW_render_to_image(RenderEngine *engine, struct Depsgraph *depsgraph)
{
Scene *scene = DEG_get_evaluated_scene(depsgraph);
+ ViewLayer *view_layer = DEG_get_evaluated_view_layer(depsgraph);
RenderEngineType *engine_type = engine->type;
DrawEngineType *draw_engine_type = engine_type->draw_engine;
RenderData *r = &scene->r;
Render *render = engine->re;
- const EvaluationContext *eval_ctx = RE_GetEvalCtx(render);
/* Changing Context */
DRW_opengl_context_enable();
/* IMPORTANT: We dont support immediate mode in render mode!
@@ -3682,7 +3682,7 @@ void DRW_render_to_image(RenderEngine *engine, struct Depsgraph *depsgraph)
DST.options.draw_background = scene->r.alphamode == R_ADDSKY;
DST.draw_ctx = (DRWContextState){
- NULL, NULL, NULL, scene, NULL, NULL, engine_type, depsgraph, eval_ctx->object_mode, NULL,
+ NULL, NULL, NULL, scene, view_layer, NULL, engine_type, depsgraph, OB_MODE_OBJECT, NULL,
};
drw_context_state_init();
@@ -3699,9 +3699,7 @@ void DRW_render_to_image(RenderEngine *engine, struct Depsgraph *depsgraph)
glDisable(GL_SCISSOR_TEST);
glViewport(0, 0, size[0], size[1]);
- /* Main rendering loop. */
-
- const float *render_size = DRW_viewport_size_get();
+ /* Main rendering. */
rctf view_rect;
rcti render_rect;
RE_GetViewPlane(render, &view_rect, &render_rect);
@@ -3710,33 +3708,30 @@ void DRW_render_to_image(RenderEngine *engine, struct Depsgraph *depsgraph)
}
/* Init render result. */
- RenderResult *render_result = RE_engine_begin_result(engine, 0, 0, (int)render_size[0], (int)render_size[1], NULL, NULL);
-
+ RenderResult *render_result = RE_engine_begin_result(
+ engine,
+ 0,
+ 0,
+ (int)size[0],
+ (int)size[1],
+ view_layer->name,
+ /* RR_ALL_VIEWS */ NULL);
+
+ RenderLayer *render_layer = render_result->layers.first;
for (RenderView *render_view = render_result->views.first;
render_view != NULL;
render_view = render_view->next)
{
RE_SetActiveRenderView(render, render_view->name);
- for (RenderLayer *render_layer = render_result->layers.first;
- render_layer != NULL;
- render_layer = render_layer->next)
- {
- ViewLayer *view_layer = BLI_findstring(&scene->view_layers, render_layer->name, offsetof(ViewLayer, name));
- DST.draw_ctx.view_layer = view_layer;
-
- /* TODO(dfelinto/sergey) we should not get depsgraph from scene.
- * For rendering depsgraph is to be owned by Render. */
- DST.draw_ctx.depsgraph = BKE_scene_get_depsgraph(scene, view_layer, true);
-
- engine_type->draw_engine->render_to_image(data, engine, render_layer, &render_rect);
- DST.buffer_finish_called = false;
- /* Force cache to reset. */
- drw_viewport_cache_resize();
- }
+ engine_type->draw_engine->render_to_image(data, engine, render_layer, &render_rect);
+ DST.buffer_finish_called = false;
}
RE_engine_end_result(engine, render_result, false, false, false);
+ /* Force cache to reset. */
+ drw_viewport_cache_resize();
+
/* TODO grease pencil */
GPU_viewport_free(DST.viewport);