Basically this tries to make the API to stop and kill jobs more explicit &
consistent, so intent is expressed clearly & behavior as expected.
- Remove use of the job start callback address as identifier for the job.
6887dea786 already removed this pattern from the jobs system internals, this
commit also removes it from the API.
- Make stop & kill API and implementation consistent. E.g. don't stop/kill jobs
by either owner **or** type/callback in one function, and by owner (if
provided) **and** type/callback in another. Causes some small behavior
changes, documented inline.
- Use the same job type and API for all preview render jobs (change by Brecht).
There doesn't seem to be a need for the separated types, in fact the
separation might have caused some issues earlier (and added code complexity).
- Add/improve function documentation.
This does actually have subtle behavior changes that are known, see PR, but
they were investigated carefully and seem like implementing wanted behavior.
Co-authored-by: Brecht Van Lommel <brecht@blender.org>
Pull Request: https://projects.blender.org/blender/blender/pulls/123086
51 lines
1.4 KiB
C++
51 lines
1.4 KiB
C++
/* SPDX-FileCopyrightText: 2023 Blender Authors
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
#pragma once
|
|
|
|
#include "RE_pipeline.h"
|
|
|
|
#include "IMB_imbuf.hh"
|
|
|
|
#include "DNA_material_types.h"
|
|
|
|
struct bContext;
|
|
struct bNodeTree;
|
|
struct ImBuf;
|
|
struct Render;
|
|
|
|
namespace blender::ed::space_node {
|
|
|
|
struct NestedTreePreviews {
|
|
Render *previews_render = nullptr;
|
|
/** Use this map to keep track of the latest #ImBuf used (after freeing the render-result). */
|
|
blender::Map<int32_t, ImBuf *> previews_map;
|
|
int preview_size;
|
|
bool rendering = false;
|
|
bool restart_needed = false;
|
|
ePreviewType cached_preview_type = MA_FLAT;
|
|
ePreviewType rendering_preview_type = MA_FLAT;
|
|
uint32_t cached_previews_refresh_state = -1;
|
|
uint32_t rendering_previews_refresh_state = -1;
|
|
NestedTreePreviews(const int size) : preview_size(size) {}
|
|
~NestedTreePreviews()
|
|
{
|
|
if (this->previews_render) {
|
|
RE_FreeRender(this->previews_render);
|
|
}
|
|
for (ImBuf *ibuf : this->previews_map.values()) {
|
|
IMB_freeImBuf(ibuf);
|
|
}
|
|
}
|
|
};
|
|
|
|
void free_previews(wmWindowManager &wm, SpaceNode &snode);
|
|
ImBuf *node_preview_acquire_ibuf(bNodeTree &ntree,
|
|
NestedTreePreviews &tree_previews,
|
|
const bNode &node);
|
|
void node_release_preview_ibuf(NestedTreePreviews &tree_previews);
|
|
NestedTreePreviews *get_nested_previews(const bContext &C, SpaceNode &snode);
|
|
|
|
} // namespace blender::ed::space_node
|