[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [48800] trunk/blender/source/blender: refactor node highlight code.
Jeroen Bakker
j.bakker at atmind.nl
Tue Jul 10 14:23:49 CEST 2012
Revision: 48800
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=48800
Author: jbakker
Date: 2012-07-10 12:23:49 +0000 (Tue, 10 Jul 2012)
Log Message:
-----------
refactor node highlight code. New implementation will not write to
uninitialized memory. it happened when you delete a node that was being
executed. in the compostor
Modified Paths:
--------------
trunk/blender/source/blender/compositor/COM_compositor.h
trunk/blender/source/blender/compositor/intern/COM_WorkScheduler.cpp
trunk/blender/source/blender/editors/space_node/CMakeLists.txt
trunk/blender/source/blender/editors/space_node/SConscript
trunk/blender/source/blender/editors/space_node/node_draw.c
trunk/blender/source/blender/makesdna/DNA_node_types.h
trunk/blender/source/blender/nodes/composite/node_composite_tree.c
Modified: trunk/blender/source/blender/compositor/COM_compositor.h
===================================================================
--- trunk/blender/source/blender/compositor/COM_compositor.h 2012-07-10 11:01:25 UTC (rev 48799)
+++ trunk/blender/source/blender/compositor/COM_compositor.h 2012-07-10 12:23:49 UTC (rev 48800)
@@ -299,6 +299,19 @@
*/
void COM_execute(RenderData* rd, bNodeTree *editingtree, int rendering);
+/**
+ * @brief Return a list of highlighted bnodes pointers.
+ * @return
+ */
+void COM_startReadHighlights();
+
+/**
+ * @brief check if a bnode is highlighted
+ * @param bnode
+ * @return
+ */
+int COM_isHighlightedbNode(bNode* bnode);
+
#ifdef __cplusplus
}
#endif
Modified: trunk/blender/source/blender/compositor/intern/COM_WorkScheduler.cpp
===================================================================
--- trunk/blender/source/blender/compositor/intern/COM_WorkScheduler.cpp 2012-07-10 11:01:25 UTC (rev 48799)
+++ trunk/blender/source/blender/compositor/intern/COM_WorkScheduler.cpp 2012-07-10 12:23:49 UTC (rev 48800)
@@ -66,6 +66,12 @@
#endif
#endif
+#define MAX_HIGHLIGHT 8
+extern "C" {
+int g_highlightIndex;
+void ** g_highlightedNodes;
+void ** g_highlightedNodesRead;
+
#define HIGHLIGHT(wp) \
{ \
ExecutionGroup* group = wp->getExecutionGroup(); \
@@ -77,15 +83,39 @@
bNode *node = complexOperation->getbNode(); \
if (node) { \
if (node->original) { \
- node->original->highlight = 1;\
- } else {\
- node->highlight = 1; \
+ node = node->original;\
}\
+ if (g_highlightIndex < MAX_HIGHLIGHT) {\
+ g_highlightedNodes[g_highlightIndex++] = node;\
+ }\
} \
} \
} \
}
+void COM_startReadHighlights() {
+ if (g_highlightedNodesRead) {
+ delete g_highlightedNodesRead;
+ }
+
+ g_highlightedNodesRead = g_highlightedNodes;
+ g_highlightedNodes = new void*[MAX_HIGHLIGHT];
+ g_highlightIndex = 0;
+ for (int i = 0 ; i < MAX_HIGHLIGHT; i++) {
+ g_highlightedNodes[i] = 0;
+ }
+}
+int COM_isHighlightedbNode(bNode* bnode) {
+ if (!g_highlightedNodesRead) return false;
+ for (int i = 0 ; i < MAX_HIGHLIGHT; i++) {
+ void* p = g_highlightedNodesRead[i];
+ if (!p) return false;
+ if (p == bnode) return true;
+ }
+ return false;
+}
+} // end extern "C"
+
#if COM_CURRENT_THREADING_MODEL == COM_TM_QUEUE
void *WorkScheduler::thread_execute_cpu(void *data)
{
@@ -219,6 +249,9 @@
void WorkScheduler::initialize()
{
+ g_highlightedNodesRead = 0;
+ g_highlightedNodes = 0;
+ COM_startReadHighlights();
#if COM_CURRENT_THREADING_MODEL == COM_TM_QUEUE
int numberOfCPUThreads = BLI_system_thread_count();
@@ -313,3 +346,4 @@
#endif
#endif
}
+
Modified: trunk/blender/source/blender/editors/space_node/CMakeLists.txt
===================================================================
--- trunk/blender/source/blender/editors/space_node/CMakeLists.txt 2012-07-10 11:01:25 UTC (rev 48799)
+++ trunk/blender/source/blender/editors/space_node/CMakeLists.txt 2012-07-10 12:23:49 UTC (rev 48800)
@@ -31,6 +31,7 @@
../../nodes
../../render/extern/include
../../windowmanager
+ ../../compositor
../../../../intern/guardedalloc
../../../../intern/opennl/extern
)
Modified: trunk/blender/source/blender/editors/space_node/SConscript
===================================================================
--- trunk/blender/source/blender/editors/space_node/SConscript 2012-07-10 11:01:25 UTC (rev 48799)
+++ trunk/blender/source/blender/editors/space_node/SConscript 2012-07-10 12:23:49 UTC (rev 48800)
@@ -4,7 +4,7 @@
sources = env.Glob('*.c')
incs = '../include ../../blenfont ../../blenlib ../../blenkernel ../../makesdna ../../makesrna ../../imbuf'
-incs += ' ../../nodes ../../render/extern/include ../../blenloader ../../gpu'
+incs += ' ../../nodes ../../render/extern/include ../../blenloader ../../gpu ../../compositor'
incs += ' ../../windowmanager #intern/guardedalloc #extern/glew/include'
defs = []
cf = []
Modified: trunk/blender/source/blender/editors/space_node/node_draw.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_draw.c 2012-07-10 11:01:25 UTC (rev 48799)
+++ trunk/blender/source/blender/editors/space_node/node_draw.c 2012-07-10 12:23:49 UTC (rev 48800)
@@ -80,6 +80,7 @@
#include "intern/node_util.h"
#include "node_intern.h"
+#include "COM_compositor.h"
/* width of socket columns in group display */
#define NODE_GROUP_FRAME 120
@@ -726,9 +727,8 @@
UI_ThemeColorBlend(color_id, TH_REDALERT, 0.5f);
if (ntree->type == NTREE_COMPOSIT && (snode->flag & SNODE_SHOW_HIGHLIGHT)) {
- if (node->highlight) {
+ if (COM_isHighlightedbNode(node)) {
UI_ThemeColorBlend(color_id, TH_ACTIVE, 0.5f);
- node->highlight = 0;
}
}
uiSetRoundBox(UI_CNR_TOP_LEFT | UI_CNR_TOP_RIGHT);
@@ -893,9 +893,8 @@
UI_ThemeColorBlend(color_id, TH_REDALERT, 0.5f);
if (ntree->type == NTREE_COMPOSIT && (snode->flag & SNODE_SHOW_HIGHLIGHT)) {
- if (node->highlight) {
+ if (COM_isHighlightedbNode(node)) {
UI_ThemeColorBlend(color_id, TH_ACTIVE, 0.5f);
- node->highlight = 0;
}
}
@@ -1133,6 +1132,7 @@
if (snode->nodetree) {
bNode *node;
+ void** highlights = 0;
node_uiblocks_init(C, snode->nodetree);
@@ -1145,6 +1145,9 @@
}
node_update_nodetree(C, snode->nodetree, 0.0f, 0.0f);
+ if (snode->nodetree->type == NTREE_COMPOSIT) {
+ COM_startReadHighlights();
+ }
node_draw_nodetree(C, ar, snode, snode->nodetree);
#if 0
Modified: trunk/blender/source/blender/makesdna/DNA_node_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_node_types.h 2012-07-10 11:01:25 UTC (rev 48799)
+++ trunk/blender/source/blender/makesdna/DNA_node_types.h 2012-07-10 12:23:49 UTC (rev 48800)
@@ -178,9 +178,7 @@
char label[64]; /* custom user-defined label, MAX_NAME */
short custom1, custom2; /* to be abused for buttons */
float custom3, custom4;
- int highlight; /* 0 = not highlighted, 1-N = highlighted*/
- int pad;
-
+
short need_exec, exec; /* need_exec is set as UI execution event, exec is flag during exec */
void *threaddata; /* optional extra storage for use in thread (read only then!) */
rctf totr; /* entire boundbox */
Modified: trunk/blender/source/blender/nodes/composite/node_composite_tree.c
===================================================================
--- trunk/blender/source/blender/nodes/composite/node_composite_tree.c 2012-07-10 11:01:25 UTC (rev 48799)
+++ trunk/blender/source/blender/nodes/composite/node_composite_tree.c 2012-07-10 12:23:49 UTC (rev 48800)
@@ -61,7 +61,7 @@
#include "node_composite_util.h"
#ifdef WITH_COMPOSITOR
-# include "COM_compositor.h"
+ #include "COM_compositor.h"
#endif
static void foreach_nodetree(Main *main, void *calldata, bNodeTreeCallback func)
More information about the Bf-blender-cvs
mailing list