Summary: Mainly addressed to solve old TODO with color managed fallback to CPU mode when displaying render result during rendering. That fallback was caused by the fact that partial image update was always acquiring image buffer for composite output and was only modifying display buffer directly. This was a big issue for Cycles rendering which renders layers one by one and wanted to display progress of each individual layer. This lead to situations when display buffer was based on what Cycles passes via RenderResult and didn't take layer/pass from image editor header into account. Now made it so image buffer which partial update is operating with always corresponds to what is set in image editor header. To make Cycles displaying progress of all the layers one by one made it so image_rect_update switches image editor user to newly rendering render layer. It happens only once when render engine starts rendering next render layer, so should not be annoying for navigation during rendering. Additional change to render engines was done to make it so they're able to merge composite output to final result without marking tile as done. This is done via do_merge_result argument to end_result() callback. This argument is optional so should not break script compatibility. Additional changes: - Partial display update for Blender Internal now happens from the same thread as tile rendering. This makes it so display conversion (which could be pretty heavy actually) is done in separate threads. Also gives better UI feedback when rendering easy scene with small tiles. - Avoid freeing/allocating byte buffer for render result if it's owned by the image buffer. Only mark it as invalid for color management. Saves loads of buffer re-allocations in cases when having several image editors opened with render result. This change in conjunction with the rest of the patch gave around 50%-100% speedup of render time when displaying non-combined pass during rendering on my laptop. - Partial display buffer update was wrong for buffers with number of channels different from 4. - Remove unused window from RenderJob. - Made image_buffer_rect_update static since it's only used in single file. Reviewers: brecht Reviewed By: brecht CC: dingto Differential Revision: http://developer.blender.org/D98
101 lines
3.8 KiB
C++
101 lines
3.8 KiB
C++
/*
|
|
* ***** BEGIN GPL LICENSE BLOCK *****
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*
|
|
* The Original Code is Copyright (C) 2008 Blender Foundation.
|
|
* All rights reserved.
|
|
*
|
|
*
|
|
* Contributor(s): Blender Foundation
|
|
*
|
|
* ***** END GPL LICENSE BLOCK *****
|
|
*/
|
|
|
|
/** \file blender/editors/render/render_intern.h
|
|
* \ingroup edrend
|
|
*/
|
|
|
|
|
|
#ifndef __RENDER_INTERN_H__
|
|
#define __RENDER_INTERN_H__
|
|
|
|
struct wmOperatorType;
|
|
struct RenderResult;
|
|
struct Scene;
|
|
struct ScrArea;
|
|
|
|
/* render_shading.c */
|
|
void OBJECT_OT_material_slot_add(struct wmOperatorType *ot);
|
|
void OBJECT_OT_material_slot_remove(struct wmOperatorType *ot);
|
|
void OBJECT_OT_material_slot_assign(struct wmOperatorType *ot);
|
|
void OBJECT_OT_material_slot_select(struct wmOperatorType *ot);
|
|
void OBJECT_OT_material_slot_deselect(struct wmOperatorType *ot);
|
|
void OBJECT_OT_material_slot_copy(struct wmOperatorType *ot);
|
|
|
|
void MATERIAL_OT_new(struct wmOperatorType *ot);
|
|
void TEXTURE_OT_new(struct wmOperatorType *ot);
|
|
void WORLD_OT_new(struct wmOperatorType *ot);
|
|
|
|
void MATERIAL_OT_copy(struct wmOperatorType *ot);
|
|
void MATERIAL_OT_paste(struct wmOperatorType *ot);
|
|
|
|
void SCENE_OT_render_layer_add(struct wmOperatorType *ot);
|
|
void SCENE_OT_render_layer_remove(struct wmOperatorType *ot);
|
|
|
|
#ifdef WITH_FREESTYLE
|
|
void SCENE_OT_freestyle_module_add(struct wmOperatorType *ot);
|
|
void SCENE_OT_freestyle_module_remove(struct wmOperatorType *ot);
|
|
void SCENE_OT_freestyle_module_move(struct wmOperatorType *ot);
|
|
void SCENE_OT_freestyle_lineset_add(struct wmOperatorType *ot);
|
|
void SCENE_OT_freestyle_lineset_copy(struct wmOperatorType *ot);
|
|
void SCENE_OT_freestyle_lineset_paste(struct wmOperatorType *ot);
|
|
void SCENE_OT_freestyle_lineset_remove(struct wmOperatorType *ot);
|
|
void SCENE_OT_freestyle_lineset_move(struct wmOperatorType *ot);
|
|
void SCENE_OT_freestyle_linestyle_new(struct wmOperatorType *ot);
|
|
void SCENE_OT_freestyle_color_modifier_add(struct wmOperatorType *ot);
|
|
void SCENE_OT_freestyle_alpha_modifier_add(struct wmOperatorType *ot);
|
|
void SCENE_OT_freestyle_thickness_modifier_add(struct wmOperatorType *ot);
|
|
void SCENE_OT_freestyle_geometry_modifier_add(struct wmOperatorType *ot);
|
|
void SCENE_OT_freestyle_modifier_remove(struct wmOperatorType *ot);
|
|
void SCENE_OT_freestyle_modifier_move(struct wmOperatorType *ot);
|
|
void SCENE_OT_freestyle_modifier_copy(struct wmOperatorType *ot);
|
|
#endif
|
|
|
|
|
|
void TEXTURE_OT_slot_copy(struct wmOperatorType *ot);
|
|
void TEXTURE_OT_slot_paste(struct wmOperatorType *ot);
|
|
void TEXTURE_OT_slot_move(struct wmOperatorType *ot);
|
|
void TEXTURE_OT_envmap_save(struct wmOperatorType *ot);
|
|
void TEXTURE_OT_envmap_clear(struct wmOperatorType *ot);
|
|
void TEXTURE_OT_envmap_clear_all(struct wmOperatorType *ot);
|
|
|
|
/* render_internal.c */
|
|
void RENDER_OT_render(struct wmOperatorType *ot);
|
|
void render_view3d_update(struct RenderEngine *engine, const struct bContext *C);
|
|
void render_view3d_draw(struct RenderEngine *engine, const struct bContext *C);
|
|
|
|
/* render_view.c */
|
|
struct ScrArea *render_view_open(struct bContext *C, int mx, int my);
|
|
|
|
void RENDER_OT_view_show(struct wmOperatorType *ot);
|
|
void RENDER_OT_view_cancel(struct wmOperatorType *ot);
|
|
|
|
/* render_opengl.c */
|
|
void RENDER_OT_opengl(struct wmOperatorType *ot);
|
|
|
|
#endif /* __RENDER_INTERN_H__ */
|
|
|