Blender V4.3
gpencil_update_cache_legacy.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2022 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
9#include <cstdio>
10
12
13#include "BLI_dlrbTree.h"
14#include "BLI_listbase.h"
15
17
18#include "MEM_guardedalloc.h"
19
20static GPencilUpdateCache *update_cache_alloc(int index, int flag, void *data)
21{
22 GPencilUpdateCache *new_cache = static_cast<GPencilUpdateCache *>(
23 MEM_callocN(sizeof(GPencilUpdateCache), __func__));
24 new_cache->children = BLI_dlrbTree_new();
25 new_cache->flag = flag;
26 new_cache->index = index;
27 new_cache->data = data;
28
29 return new_cache;
30}
31
32static void cache_node_free(void *node);
33
35{
37 MEM_SAFE_FREE(cache->children);
38 MEM_freeN(cache);
39}
40
41static void cache_node_free(void *node)
42{
43 GPencilUpdateCache *cache = ((GPencilUpdateCacheNode *)node)->cache;
44 if (cache != nullptr) {
45 update_cache_free(cache);
46 }
47 MEM_freeN(node);
48}
49
52 int depth,
53 void *user_data)
54{
55 if (BLI_listbase_is_empty((ListBase *)parent_cache->children)) {
56 return;
57 }
58
60 GPencilUpdateCache *cache = cache_node->cache;
61
63 if (cb != nullptr) {
64 bool skip = cb(cache, user_data);
65 if (skip) {
66 continue;
67 }
68 }
69
70 gpencil_traverse_update_cache_ex(cache, ts, depth + 1, user_data);
71 }
72}
73
74/* -------------------------------------------------------------------- */
84
87 void *user_data)
88{
89 gpencil_traverse_update_cache_ex(cache, ts, 0, user_data);
90}
91
93{
94 GPencilUpdateCache *gpd_cache = gpd->runtime.update_cache;
95 if (gpd_cache) {
96 update_cache_free(gpd_cache);
97 gpd->runtime.update_cache = nullptr;
98 }
99}
100
bool(* GPencilUpdateCacheIter_Cb)(GPencilUpdateCache *cache, void *user_data)
void BLI_dlrbTree_free(DLRBT_Tree *tree, DLRBT_NFree_FP free_cb)
Definition DLRB_tree.c:50
DLRBT_Tree * BLI_dlrbTree_new(void)
Definition DLRB_tree.c:17
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
#define LISTBASE_FOREACH(type, var, list)
Read Guarded memory(de)allocation.
#define MEM_SAFE_FREE(v)
static void gpencil_traverse_update_cache_ex(GPencilUpdateCache *parent_cache, GPencilUpdateCacheTraverseSettings *ts, int depth, void *user_data)
static void cache_node_free(void *node)
static GPencilUpdateCache * update_cache_alloc(int index, int flag, void *data)
GPencilUpdateCache * BKE_gpencil_create_update_cache(void *data, bool full_copy)
void BKE_gpencil_free_update_cache(bGPdata *gpd)
void BKE_gpencil_traverse_update_cache(GPencilUpdateCache *cache, GPencilUpdateCacheTraverseSettings *ts, void *user_data)
static void update_cache_free(GPencilUpdateCache *cache)
void MEM_freeN(void *vmemh)
Definition mallocn.cc:105
void *(* MEM_callocN)(size_t len, const char *str)
Definition mallocn.cc:42
struct GPencilUpdateCache * update_cache
bGPdata_Runtime runtime
static void cache_node(ShaderToNodeMap &node_cache, const pxr::UsdShadeShader &usd_shader, bNode *node, const char *tag=nullptr)
uint8_t flag
Definition wm_window.cc:138