diff options
Diffstat (limited to 'source/blender/editors/render')
-rw-r--r-- | source/blender/editors/render/render_internal.c | 10 | ||||
-rw-r--r-- | source/blender/editors/render/render_opengl.c | 25 | ||||
-rw-r--r-- | source/blender/editors/render/render_preview.c | 15 | ||||
-rw-r--r-- | source/blender/editors/render/render_shading.c | 42 | ||||
-rw-r--r-- | source/blender/editors/render/render_update.c | 4 | ||||
-rw-r--r-- | source/blender/editors/render/render_view.c | 4 |
6 files changed, 49 insertions, 51 deletions
diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c index 1db7bf5a766..25b4ddc15fd 100644 --- a/source/blender/editors/render/render_internal.c +++ b/source/blender/editors/render/render_internal.c @@ -220,12 +220,10 @@ static void image_buffer_rect_update(RenderJob *rj, ibuf->userflags |= IB_DISPLAY_BUFFER_INVALID; return; } - else { - if (rr->renlay == NULL) { - return; - } - rectf = RE_RenderLayerGetPass(rr->renlay, RE_PASSNAME_COMBINED, viewname); + if (rr->renlay == NULL) { + return; } + rectf = RE_RenderLayerGetPass(rr->renlay, RE_PASSNAME_COMBINED, viewname); } if (rectf == NULL) { return; @@ -579,7 +577,7 @@ static void image_rect_update(void *rjv, RenderResult *rr, volatile rcti *renrec rj->image_outdated = true; return; } - else if (rj->image_outdated) { + if (rj->image_outdated) { /* update entire render */ rj->image_outdated = false; BKE_image_signal(rj->main, ima, NULL, IMA_SIGNAL_COLORMANAGE); diff --git a/source/blender/editors/render/render_opengl.c b/source/blender/editors/render/render_opengl.c index 2861e851282..3d3936523f9 100644 --- a/source/blender/editors/render/render_opengl.c +++ b/source/blender/editors/render/render_opengl.c @@ -79,7 +79,6 @@ #include "RNA_define.h" #include "GPU_framebuffer.h" -#include "GPU_glew.h" #include "GPU_matrix.h" #include "render_intern.h" @@ -351,7 +350,7 @@ static void screen_opengl_render_doit(const bContext *C, OGLRender *oglrender, R G.f &= ~G_FLAG_RENDER_VIEWPORT; gp_rect = MEM_mallocN(sizex * sizey * sizeof(uchar) * 4, "offscreen rect"); - GPU_offscreen_read_pixels(oglrender->ofs, GL_UNSIGNED_BYTE, gp_rect); + GPU_offscreen_read_pixels(oglrender->ofs, GPU_DATA_UNSIGNED_BYTE, gp_rect); for (i = 0; i < sizex * sizey * 4; i += 4) { blend_color_mix_byte(&render_rect[i], &render_rect[i], &gp_rect[i]); @@ -766,7 +765,7 @@ static bool screen_opengl_render_init(bContext *C, wmOperator *op) /* corrects render size with actual size, not every card supports non-power-of-two dimensions */ DRW_opengl_context_enable(); /* Offscreen creation needs to be done in DRW context. */ - ofs = GPU_offscreen_create(sizex, sizey, 0, true, true, err_out); + ofs = GPU_offscreen_create(sizex, sizey, true, true, err_out); DRW_opengl_context_disable(); if (!ofs) { @@ -1236,9 +1235,8 @@ static int screen_opengl_render_modal(bContext *C, wmOperator *op, const wmEvent screen_opengl_render_end(C, op->customdata); return OPERATOR_FINISHED; } - else { - ret = screen_opengl_render_anim_step(C, op); - } + + ret = screen_opengl_render_anim_step(C, op); /* stop at the end or on error */ if (ret == false) { @@ -1291,16 +1289,15 @@ static int screen_opengl_render_exec(bContext *C, wmOperator *op) return OPERATOR_FINISHED; } - else { - bool ret = true; - if (!screen_opengl_render_anim_initialize(C, op)) { - return OPERATOR_CANCELLED; - } + bool ret = true; - while (ret) { - ret = screen_opengl_render_anim_step(C, op); - } + if (!screen_opengl_render_anim_initialize(C, op)) { + return OPERATOR_CANCELLED; + } + + while (ret) { + ret = screen_opengl_render_anim_step(C, op); } /* no redraw needed, we leave state as we entered it */ diff --git a/source/blender/editors/render/render_preview.c b/source/blender/editors/render/render_preview.c index 19e4f652963..85fc6927063 100644 --- a/source/blender/editors/render/render_preview.c +++ b/source/blender/editors/render/render_preview.c @@ -82,7 +82,6 @@ #include "BIF_glutil.h" -#include "GPU_glew.h" #include "GPU_shader.h" #include "RE_engine.h" @@ -632,18 +631,8 @@ static bool ed_preview_draw_rect(ScrArea *area, int split, int first, rcti *rect } IMMDrawPixelsTexState state = immDrawPixelsTexSetup(GPU_SHADER_2D_IMAGE_COLOR); - immDrawPixelsTex(&state, - fx, - fy, - rres.rectx, - rres.recty, - GL_RGBA, - GL_UNSIGNED_BYTE, - GL_NEAREST, - rect_byte, - 1.0f, - 1.0f, - NULL); + immDrawPixelsTex( + &state, fx, fy, rres.rectx, rres.recty, GPU_RGBA8, false, rect_byte, 1.0f, 1.0f, NULL); MEM_freeN(rect_byte); diff --git a/source/blender/editors/render/render_shading.c b/source/blender/editors/render/render_shading.c index 49ab2c485b1..536252f5003 100644 --- a/source/blender/editors/render/render_shading.c +++ b/source/blender/editors/render/render_shading.c @@ -162,7 +162,7 @@ void OBJECT_OT_material_slot_add(wmOperatorType *ot) /* api callbacks */ ot->exec = material_slot_add_exec; - ot->poll = ED_operator_object_active_editable; + ot->poll = ED_operator_object_active_local_editable; /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_INTERNAL; @@ -207,7 +207,7 @@ void OBJECT_OT_material_slot_remove(wmOperatorType *ot) /* api callbacks */ ot->exec = material_slot_remove_exec; - ot->poll = ED_operator_object_active_editable; + ot->poll = ED_operator_object_active_local_editable; /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_INTERNAL; @@ -238,7 +238,7 @@ static int material_slot_assign_exec(bContext *C, wmOperator *UNUSED(op)) else { /* Find the first matching material. * Note: there may be multiple but that's not a common use case. */ - for (short i = 0; i < ob->totcol; i++) { + for (int i = 0; i < ob->totcol; i++) { const Material *mat = BKE_object_material_get(ob, i + 1); if (mat_active == mat) { mat_nr_active = i; @@ -310,7 +310,7 @@ void OBJECT_OT_material_slot_assign(wmOperatorType *ot) /* api callbacks */ ot->exec = material_slot_assign_exec; - ot->poll = ED_operator_object_active_editable; + ot->poll = ED_operator_object_active_local_editable; /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_INTERNAL; @@ -339,7 +339,7 @@ static int material_slot_de_select(bContext *C, bool select) else { /* Find the first matching material. * Note: there may be multiple but that's not a common use case. */ - for (short i = 0; i < ob->totcol; i++) { + for (int i = 0; i < ob->totcol; i++) { const Material *mat = BKE_object_material_get(ob, i + 1); if (mat_active == mat) { mat_nr_active = i; @@ -465,17 +465,27 @@ static int material_slot_copy_exec(bContext *C, wmOperator *UNUSED(op)) { Main *bmain = CTX_data_main(C); Object *ob = ED_object_context(C); - Material ***matar; + Material ***matar_obdata; - if (!ob || !(matar = BKE_object_material_array_p(ob))) { + if (!ob || !(matar_obdata = BKE_object_material_array_p(ob))) { return OPERATOR_CANCELLED; } + BLI_assert(ob->totcol == *BKE_object_material_len_p(ob)); + + Material ***matar_object = &ob->mat; + + Material **matar = MEM_callocN(sizeof(*matar) * (size_t)ob->totcol, __func__); + for (int i = ob->totcol; i--;) { + matar[i] = ob->matbits[i] ? (*matar_object)[i] : (*matar_obdata)[i]; + } + CTX_DATA_BEGIN (C, Object *, ob_iter, selected_editable_objects) { if (ob != ob_iter && BKE_object_material_array_p(ob_iter)) { - if (ob->data != ob_iter->data) { - BKE_object_material_array_assign(bmain, ob_iter, matar, ob->totcol); - } + /* If we are using the same obdata, we only assign slots in ob_iter that are using object + * materials, and not obdata ones. */ + const bool is_same_obdata = ob->data == ob_iter->data; + BKE_object_material_array_assign(bmain, ob_iter, &matar, ob->totcol, is_same_obdata); if (ob_iter->totcol == ob->totcol) { ob_iter->actcol = ob->actcol; @@ -486,6 +496,8 @@ static int material_slot_copy_exec(bContext *C, wmOperator *UNUSED(op)) } CTX_DATA_END; + MEM_freeN(matar); + return OPERATOR_FINISHED; } @@ -564,6 +576,7 @@ void OBJECT_OT_material_slot_move(wmOperatorType *ot) ot->description = "Move the active material up/down in the list"; /* api callbacks */ + ot->poll = ED_operator_object_active_local_editable; ot->exec = material_slot_move_exec; /* flags */ @@ -638,7 +651,7 @@ void OBJECT_OT_material_slot_remove_unused(wmOperatorType *ot) /* api callbacks */ ot->exec = material_slot_remove_unused_exec; - ot->poll = ED_operator_object_active_editable; + ot->poll = ED_operator_object_active_local_editable; /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; @@ -707,6 +720,7 @@ void MATERIAL_OT_new(wmOperatorType *ot) ot->description = "Add a new material"; /* api callbacks */ + ot->poll = ED_operator_object_active_local_editable; ot->exec = new_material_exec; /* flags */ @@ -1666,13 +1680,13 @@ static int freestyle_get_modifier_type(PointerRNA *ptr) if (RNA_struct_is_a(ptr->type, &RNA_LineStyleColorModifier)) { return LS_MODIFIER_TYPE_COLOR; } - else if (RNA_struct_is_a(ptr->type, &RNA_LineStyleAlphaModifier)) { + if (RNA_struct_is_a(ptr->type, &RNA_LineStyleAlphaModifier)) { return LS_MODIFIER_TYPE_ALPHA; } - else if (RNA_struct_is_a(ptr->type, &RNA_LineStyleThicknessModifier)) { + if (RNA_struct_is_a(ptr->type, &RNA_LineStyleThicknessModifier)) { return LS_MODIFIER_TYPE_THICKNESS; } - else if (RNA_struct_is_a(ptr->type, &RNA_LineStyleGeometryModifier)) { + if (RNA_struct_is_a(ptr->type, &RNA_LineStyleGeometryModifier)) { return LS_MODIFIER_TYPE_GEOMETRY; } return -1; diff --git a/source/blender/editors/render/render_update.c b/source/blender/editors/render/render_update.c index 10f69f3fe9d..7d0ad42c703 100644 --- a/source/blender/editors/render/render_update.c +++ b/source/blender/editors/render/render_update.c @@ -178,7 +178,7 @@ void ED_render_engine_area_exit(Main *bmain, ScrArea *area) } } -void ED_render_engine_changed(Main *bmain) +void ED_render_engine_changed(Main *bmain, const bool update_scene_data) { /* on changing the render engine type, clear all running render engines */ for (bScreen *screen = bmain->screens.first; screen; screen = screen->id.next) { @@ -198,7 +198,7 @@ void ED_render_engine_changed(Main *bmain) update_ctx.view_layer = view_layer; ED_render_id_flush_update(&update_ctx, &scene->id); } - if (scene->nodetree) { + if (scene->nodetree && update_scene_data) { ntreeCompositUpdateRLayers(scene->nodetree); } } diff --git a/source/blender/editors/render/render_view.c b/source/blender/editors/render/render_view.c index a9c855b14b0..fd5963b217b 100644 --- a/source/blender/editors/render/render_view.c +++ b/source/blender/editors/render/render_view.c @@ -283,12 +283,12 @@ static int render_view_cancel_exec(bContext *C, wmOperator *UNUSED(op)) return OPERATOR_FINISHED; } - else if (sima->flag & SI_FULLWINDOW) { + if (sima->flag & SI_FULLWINDOW) { sima->flag &= ~SI_FULLWINDOW; ED_screen_state_toggle(C, win, area, SCREENMAXIMIZED); return OPERATOR_FINISHED; } - else if (WM_window_is_temp_screen(win)) { + if (WM_window_is_temp_screen(win)) { wm_window_close(C, CTX_wm_manager(C), win); return OPERATOR_FINISHED; } |