forked from bartvdbraak/blender
Make it possible to use preview/viewport render job kill without context
This commit is contained in:
parent
8e16c5294b
commit
54c6a9fd49
@ -40,6 +40,7 @@ struct ScrArea;
|
||||
struct RegionView3D;
|
||||
struct RenderEngine;
|
||||
struct View3D;
|
||||
struct wmWindowManager;
|
||||
|
||||
/* render_ops.c */
|
||||
|
||||
@ -52,7 +53,7 @@ void ED_render_engine_changed(struct Main *bmain);
|
||||
void ED_render_engine_area_exit(struct ScrArea *sa);
|
||||
void ED_render_scene_update(struct Main *bmain, struct Scene *scene, int updated);
|
||||
|
||||
void ED_viewport_render_kill_jobs(const struct bContext *C, bool free_database);
|
||||
void ED_viewport_render_kill_jobs(struct wmWindowManager *wm, struct Main *bmain, bool free_database);
|
||||
struct Scene *ED_render_job_get_scene(const struct bContext *C);
|
||||
|
||||
/* Render the preview
|
||||
@ -72,7 +73,7 @@ void ED_preview_free_dbase(void);
|
||||
|
||||
void ED_preview_shader_job(const struct bContext *C, void *owner, struct ID *id, struct ID *parent, struct MTex *slot, int sizex, int sizey, int method);
|
||||
void ED_preview_icon_job(const struct bContext *C, void *owner, struct ID *id, unsigned int *rect, int sizex, int sizey);
|
||||
void ED_preview_kill_jobs(const struct bContext *C);
|
||||
void ED_preview_kill_jobs(struct wmWindowManager *wm, struct Main *bmain);
|
||||
|
||||
void ED_preview_draw(const struct bContext *C, void *idp, void *parentp, void *slot, rcti *rect);
|
||||
|
||||
|
@ -1551,10 +1551,10 @@ void render_view3d_draw(RenderEngine *engine, const bContext *C)
|
||||
RE_ReleaseResultImage(re);
|
||||
}
|
||||
|
||||
void ED_viewport_render_kill_jobs(const bContext *C, bool free_database)
|
||||
void ED_viewport_render_kill_jobs(wmWindowManager *wm,
|
||||
Main *bmain,
|
||||
bool free_database)
|
||||
{
|
||||
wmWindowManager *wm = CTX_wm_manager(C);
|
||||
Main *bmain = CTX_data_main(C);
|
||||
bScreen *sc;
|
||||
ScrArea *sa;
|
||||
ARegion *ar;
|
||||
|
@ -1180,12 +1180,11 @@ void ED_preview_shader_job(const bContext *C, void *owner, ID *id, ID *parent, M
|
||||
WM_jobs_start(CTX_wm_manager(C), wm_job);
|
||||
}
|
||||
|
||||
void ED_preview_kill_jobs(const struct bContext *C)
|
||||
void ED_preview_kill_jobs(wmWindowManager *wm, Main *bmain)
|
||||
{
|
||||
wmWindowManager *wm = CTX_wm_manager(C);
|
||||
if (wm)
|
||||
WM_jobs_kill(wm, NULL, common_preview_startjob);
|
||||
|
||||
ED_viewport_render_kill_jobs(C, false);
|
||||
|
||||
ED_viewport_render_kill_jobs(wm, bmain, false);
|
||||
}
|
||||
|
||||
|
@ -1127,7 +1127,7 @@ static int image_open_exec(bContext *C, wmOperator *op)
|
||||
}
|
||||
|
||||
/* XXX unpackImage frees image buffers */
|
||||
ED_preview_kill_jobs(C);
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), bmain);
|
||||
|
||||
BKE_image_signal(ima, iuser, IMA_SIGNAL_RELOAD);
|
||||
WM_event_add_notifier(C, NC_IMAGE | NA_EDITED, ima);
|
||||
@ -1279,7 +1279,7 @@ static int image_replace_exec(bContext *C, wmOperator *op)
|
||||
sima->image->source = IMA_SRC_FILE;
|
||||
|
||||
/* XXX unpackImage frees image buffers */
|
||||
ED_preview_kill_jobs(C);
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||
|
||||
BKE_icon_changed(BKE_icon_getid(&sima->image->id));
|
||||
BKE_image_signal(sima->image, &sima->iuser, IMA_SIGNAL_RELOAD);
|
||||
@ -1880,7 +1880,7 @@ static int image_reload_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
/* XXX unpackImage frees image buffers */
|
||||
ED_preview_kill_jobs(C);
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||
|
||||
// XXX other users?
|
||||
BKE_image_signal(ima, (sima) ? &sima->iuser : NULL, IMA_SIGNAL_RELOAD);
|
||||
@ -2309,7 +2309,7 @@ static int image_unpack_exec(bContext *C, wmOperator *op)
|
||||
BKE_report(op->reports, RPT_WARNING, "AutoPack is enabled, so image will be packed again on file save");
|
||||
|
||||
/* XXX unpackImage frees image buffers */
|
||||
ED_preview_kill_jobs(C);
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||
|
||||
unpackImage(op->reports, ima, method);
|
||||
|
||||
|
@ -227,7 +227,7 @@ static int add_reroute_exec(bContext *C, wmOperator *op)
|
||||
float insert_point[2];
|
||||
|
||||
/* always first */
|
||||
ED_preview_kill_jobs(C);
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||
|
||||
node_deselect_all(snode);
|
||||
|
||||
@ -347,7 +347,7 @@ static int node_add_file_exec(bContext *C, wmOperator *op)
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
ED_preview_kill_jobs(C);
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||
|
||||
node = node_add_node(C, NULL, type, snode->cursor[0], snode->cursor[1]);
|
||||
|
||||
@ -426,7 +426,7 @@ static int node_add_mask_exec(bContext *C, wmOperator *op)
|
||||
return OPERATOR_CANCELLED;
|
||||
}
|
||||
|
||||
ED_preview_kill_jobs(C);
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||
|
||||
node = node_add_node(C, NULL, CMP_NODE_MASK, snode->cursor[0], snode->cursor[1]);
|
||||
|
||||
|
@ -1142,7 +1142,7 @@ static int node_duplicate_exec(bContext *C, wmOperator *op)
|
||||
bNodeLink *link, *newlink, *lastlink;
|
||||
const bool keep_inputs = RNA_boolean_get(op->ptr, "keep_inputs");
|
||||
|
||||
ED_preview_kill_jobs(C);
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||
|
||||
lastnode = ntree->nodes.last;
|
||||
for (node = ntree->nodes.first; node; node = node->next) {
|
||||
@ -1277,7 +1277,7 @@ static int node_read_renderlayers_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
Scene *curscene = CTX_data_scene(C), *scene;
|
||||
bNode *node;
|
||||
|
||||
ED_preview_kill_jobs(C);
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), bmain);
|
||||
|
||||
/* first tag scenes unread */
|
||||
for (scene = bmain->scene.first; scene; scene = scene->id.next)
|
||||
@ -1476,7 +1476,7 @@ static int node_preview_toggle_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
if ((snode == NULL) || (snode->edittree == NULL))
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
ED_preview_kill_jobs(C);
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||
|
||||
node_flag_toggle_exec(snode, NODE_PREVIEW);
|
||||
|
||||
@ -1540,7 +1540,7 @@ static int node_socket_toggle_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
if ((snode == NULL) || (snode->edittree == NULL))
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
ED_preview_kill_jobs(C);
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||
|
||||
/* Toggle for all selected nodes */
|
||||
hidden = 0;
|
||||
@ -1588,7 +1588,7 @@ static int node_mute_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
SpaceNode *snode = CTX_wm_space_node(C);
|
||||
bNode *node;
|
||||
|
||||
ED_preview_kill_jobs(C);
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||
|
||||
for (node = snode->edittree->nodes.first; node; node = node->next) {
|
||||
/* Only allow muting of nodes having a mute func! */
|
||||
@ -1626,7 +1626,7 @@ static int node_delete_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
SpaceNode *snode = CTX_wm_space_node(C);
|
||||
bNode *node, *next;
|
||||
|
||||
ED_preview_kill_jobs(C);
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||
|
||||
for (node = snode->edittree->nodes.first; node; node = next) {
|
||||
next = node->next;
|
||||
@ -1667,7 +1667,7 @@ static int node_delete_reconnect_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
SpaceNode *snode = CTX_wm_space_node(C);
|
||||
bNode *node, *next;
|
||||
|
||||
ED_preview_kill_jobs(C);
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||
|
||||
for (node = snode->edittree->nodes.first; node; node = next) {
|
||||
next = node->next;
|
||||
@ -1924,7 +1924,7 @@ static int node_clipboard_copy_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
bNode *node;
|
||||
bNodeLink *link, *newlink;
|
||||
|
||||
ED_preview_kill_jobs(C);
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||
|
||||
/* clear current clipboard */
|
||||
BKE_node_clipboard_clear();
|
||||
@ -2037,7 +2037,7 @@ static int node_clipboard_paste_exec(bContext *C, wmOperator *op)
|
||||
if (!all_nodes_valid)
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
ED_preview_kill_jobs(C);
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||
|
||||
/* deselect old nodes */
|
||||
node_deselect_all(snode);
|
||||
@ -2445,7 +2445,7 @@ static int viewer_border_exec(bContext *C, wmOperator *op)
|
||||
void *lock;
|
||||
ImBuf *ibuf;
|
||||
|
||||
ED_preview_kill_jobs(C);
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||
|
||||
ima = BKE_image_verify_viewer(IMA_TYPE_COMPOSITE, "Viewer Node");
|
||||
ibuf = BKE_image_acquire_ibuf(ima, NULL, &lock);
|
||||
|
@ -144,7 +144,7 @@ static int node_group_edit_exec(bContext *C, wmOperator *op)
|
||||
bNode *gnode;
|
||||
const bool exit = RNA_boolean_get(op->ptr, "exit");
|
||||
|
||||
ED_preview_kill_jobs(C);
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||
|
||||
gnode = node_group_get_active(C, node_idname);
|
||||
|
||||
@ -352,7 +352,7 @@ static int node_group_ungroup_exec(bContext *C, wmOperator *op)
|
||||
const char *node_idname = group_node_idname(C);
|
||||
bNode *gnode;
|
||||
|
||||
ED_preview_kill_jobs(C);
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||
|
||||
gnode = node_group_get_active(C, node_idname);
|
||||
if (!gnode)
|
||||
@ -522,7 +522,7 @@ static int node_group_separate_exec(bContext *C, wmOperator *op)
|
||||
int type = RNA_enum_get(op->ptr, "type");
|
||||
float offx, offy;
|
||||
|
||||
ED_preview_kill_jobs(C);
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||
|
||||
/* are we inside of a group? */
|
||||
ngroup = snode->edittree;
|
||||
@ -915,7 +915,7 @@ static int node_group_make_exec(bContext *C, wmOperator *op)
|
||||
bNode *gnode;
|
||||
Main *bmain = CTX_data_main(C);
|
||||
|
||||
ED_preview_kill_jobs(C);
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||
|
||||
if (!node_group_make_test_selected(ntree, NULL, ntree_idname, op->reports))
|
||||
return OPERATOR_CANCELLED;
|
||||
@ -966,7 +966,7 @@ static int node_group_insert_exec(bContext *C, wmOperator *op)
|
||||
bNode *gnode;
|
||||
Main *bmain = CTX_data_main(C);
|
||||
|
||||
ED_preview_kill_jobs(C);
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||
|
||||
gnode = node_group_get_active(C, node_idname);
|
||||
|
||||
|
@ -368,7 +368,7 @@ static int node_active_link_viewer_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
if (!node)
|
||||
return OPERATOR_CANCELLED;
|
||||
|
||||
ED_preview_kill_jobs(C);
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||
|
||||
if (node_link_viewer(C, node) == OPERATOR_CANCELLED)
|
||||
return OPERATOR_CANCELLED;
|
||||
@ -747,7 +747,7 @@ static int node_link_invoke(bContext *C, wmOperator *op, const wmEvent *event)
|
||||
UI_view2d_region_to_view(&ar->v2d, event->mval[0], event->mval[1],
|
||||
&cursor[0], &cursor[1]);
|
||||
|
||||
ED_preview_kill_jobs(C);
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||
|
||||
nldrag = node_link_init(snode, cursor, detach);
|
||||
|
||||
@ -803,7 +803,7 @@ static int node_make_link_exec(bContext *C, wmOperator *op)
|
||||
SpaceNode *snode = CTX_wm_space_node(C);
|
||||
const bool replace = RNA_boolean_get(op->ptr, "replace");
|
||||
|
||||
ED_preview_kill_jobs(C);
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||
|
||||
snode_autoconnect(snode, 1, replace);
|
||||
|
||||
@ -874,7 +874,7 @@ static int cut_links_exec(bContext *C, wmOperator *op)
|
||||
bool found = false;
|
||||
bNodeLink *link, *next;
|
||||
|
||||
ED_preview_kill_jobs(C);
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||
|
||||
for (link = snode->edittree->links.first; link; link = next) {
|
||||
next = link->next;
|
||||
@ -884,7 +884,8 @@ static int cut_links_exec(bContext *C, wmOperator *op)
|
||||
if (cut_links_intersect(link, mcoords, i)) {
|
||||
|
||||
if (found == false) {
|
||||
ED_preview_kill_jobs(C);
|
||||
/* TODO(sergey): Why did we kill jobs twice? */
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||
found = true;
|
||||
}
|
||||
|
||||
@ -941,7 +942,7 @@ static int detach_links_exec(bContext *C, wmOperator *UNUSED(op))
|
||||
bNodeTree *ntree = snode->edittree;
|
||||
bNode *node;
|
||||
|
||||
ED_preview_kill_jobs(C);
|
||||
ED_preview_kill_jobs(CTX_wm_manager(C), CTX_data_main(C));
|
||||
|
||||
for (node = ntree->nodes.first; node; node = node->next) {
|
||||
if (node->flag & SELECT) {
|
||||
|
@ -47,6 +47,7 @@
|
||||
#include "BKE_blender.h"
|
||||
#include "BKE_context.h"
|
||||
#include "BKE_global.h"
|
||||
#include "BKE_main.h"
|
||||
#include "BKE_screen.h"
|
||||
|
||||
#include "ED_armature.h"
|
||||
@ -124,6 +125,7 @@ static int ed_undo_step(bContext *C, int step, const char *undoname)
|
||||
{
|
||||
wmWindowManager *wm = CTX_wm_manager(C);
|
||||
wmWindow *win = CTX_wm_window(C);
|
||||
Main *bmain = CTX_data_main(C);
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
Object *obedit = CTX_data_edit_object(C);
|
||||
Object *obact = CTX_data_active_object(C);
|
||||
@ -146,7 +148,7 @@ static int ed_undo_step(bContext *C, int step, const char *undoname)
|
||||
if ((obact && (obact->mode & OB_MODE_TEXTURE_PAINT)) || (sima->mode == SI_MODE_PAINT)) {
|
||||
if (!ED_undo_paint_step(C, UNDO_PAINT_IMAGE, step, undoname) && undoname) {
|
||||
if (U.uiflag & USER_GLOBALUNDO) {
|
||||
ED_viewport_render_kill_jobs(C, true);
|
||||
ED_viewport_render_kill_jobs(wm, bmain, true);
|
||||
BKE_undo_name(C, undoname);
|
||||
}
|
||||
}
|
||||
@ -199,7 +201,7 @@ static int ed_undo_step(bContext *C, int step, const char *undoname)
|
||||
/* for example, texface stores image pointers */
|
||||
undo_editmode_clear();
|
||||
|
||||
ED_viewport_render_kill_jobs(C, true);
|
||||
ED_viewport_render_kill_jobs(wm, bmain, true);
|
||||
|
||||
if (undoname)
|
||||
BKE_undo_name(C, undoname);
|
||||
@ -379,7 +381,7 @@ int ED_undo_operator_repeat(bContext *C, struct wmOperator *op)
|
||||
{
|
||||
int retval;
|
||||
|
||||
ED_viewport_render_kill_jobs(C, true);
|
||||
ED_viewport_render_kill_jobs(wm, CTX_data_main(C), true);
|
||||
|
||||
if (G.debug & G_DEBUG)
|
||||
printf("redo_cb: operator redo %s\n", op->type->name);
|
||||
@ -583,7 +585,7 @@ static int undo_history_exec(bContext *C, wmOperator *op)
|
||||
ED_undo_paint_step_num(C, UNDO_PAINT_IMAGE, item );
|
||||
}
|
||||
else {
|
||||
ED_viewport_render_kill_jobs(C, true);
|
||||
ED_viewport_render_kill_jobs(CTX_wm_manager(C), CTX_data_main(C), true);
|
||||
BKE_undo_number(C, item);
|
||||
WM_event_add_notifier(C, NC_SCENE | ND_LAYER_CONTENT, CTX_data_scene(C));
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user