Blender 源码学习 --- Notifiers
Published
16 August 2014
Contents
via http://wiki.blender.org/index.php/Dev:2.5/Source/Architecture/Notifiers/Updates and http://wiki.blender.org/index.php/Dev:2.5/Source/Architecture/Notifiers/Data
blender 里有三种更新的方式:
- Notifier: Notifier 主要用来通知窗口系统
- Dependency Graph: 主要针对依赖数据的改变
- Redraw Tag: 重绘事件, 经常被 Notifier 调用
个人感觉这几个的层级关系是 Dependency Graph -> Notifier -> Redraw Tag
Notifier
void WM_event_add_notifier(const struct bContext *C, unsigned int type, void *data);
向窗口系统发出 notifier, type 有四个层次: * category: 前缀为 NC_
, 如 window, screen, object * Data: 前缀为 ND_
, 根据 category 不同, data 不同, 如 object 下有 ND_TRANSFORM
, ND_POSE
* Data sub types, Action, 多数情况下不常用, 可以参考 WM_types.h
约定
这里有几条简单的方针:
- Datablocks: 当修改对应的 datablock 时, 应当修改对应的 category, 然后再找到正确的
ND_*
- Space/ Region Data: 可以使用
NC_SPACE
, 然后找到对应的ND_*
- User Perferences: 发送
NC_WINDOW
Notifier 来刷新整个屏幕
blog comments powered by Disqus