Changeset View
Changeset View
Standalone View
Standalone View
source/blender/editors/space_outliner/outliner_tree.c
| Show First 20 Lines • Show All 228 Lines • ▼ Show 20 Lines | for (curBone = curBone->childbase.first; curBone; curBone = curBone->next) { | ||||
| outliner_add_bone(soops, &te->subtree, id, curBone, te, a); | outliner_add_bone(soops, &te->subtree, id, curBone, te, a); | ||||
| } | } | ||||
| } | } | ||||
| /* -------------------------------------------------------- */ | /* -------------------------------------------------------- */ | ||||
| #define LOG2I(x) (int)(log(x) / M_LN2) | #define LOG2I(x) (int)(log(x) / M_LN2) | ||||
| static void outliner_add_passes(SpaceOops *soops, TreeElement *tenla, ID *id, SceneRenderLayer *srl) | static void outliner_add_passes(SpaceOops *soops, TreeElement *tenla, ID *id, SceneLayer *scene_layer) | ||||
| { | { | ||||
| TreeStoreElem *tselem = NULL; | TreeStoreElem *tselem = NULL; | ||||
| TreeElement *te = NULL; | TreeElement *te = NULL; | ||||
| /* log stuff is to convert bitflags (powers of 2) to small integers, | /* log stuff is to convert bitflags (powers of 2) to small integers, | ||||
| * in order to not overflow short tselem->nr */ | * in order to not overflow short tselem->nr */ | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_COMBINED)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_COMBINED)); | ||||
| te->name = IFACE_("Combined"); | te->name = IFACE_("Combined"); | ||||
| te->directdata = &srl->passflag; | te->directdata = &scene_layer->passflag; | ||||
| /* save cpu cycles, but we add the first to invoke an open/close triangle */ | /* save cpu cycles, but we add the first to invoke an open/close triangle */ | ||||
| tselem = TREESTORE(tenla); | tselem = TREESTORE(tenla); | ||||
| if (tselem->flag & TSE_CLOSED) | if (tselem->flag & TSE_CLOSED) | ||||
| return; | return; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_Z)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_Z)); | ||||
| te->name = IFACE_("Z"); | te->name = IFACE_("Z"); | ||||
| te->directdata = &srl->passflag; | te->directdata = &scene_layer->passflag; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_VECTOR)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_VECTOR)); | ||||
| te->name = IFACE_("Vector"); | te->name = IFACE_("Vector"); | ||||
| te->directdata = &srl->passflag; | te->directdata = &scene_layer->passflag; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_NORMAL)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_NORMAL)); | ||||
| te->name = IFACE_("Normal"); | te->name = IFACE_("Normal"); | ||||
| te->directdata = &srl->passflag; | te->directdata = &scene_layer->passflag; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_UV)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_UV)); | ||||
| te->name = IFACE_("UV"); | te->name = IFACE_("UV"); | ||||
| te->directdata = &srl->passflag; | te->directdata = &scene_layer->passflag; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_MIST)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_MIST)); | ||||
| te->name = IFACE_("Mist"); | te->name = IFACE_("Mist"); | ||||
| te->directdata = &srl->passflag; | te->directdata = &scene_layer->passflag; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_INDEXOB)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_INDEXOB)); | ||||
| te->name = IFACE_("Index Object"); | te->name = IFACE_("Index Object"); | ||||
| te->directdata = &srl->passflag; | te->directdata = &scene_layer->passflag; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_INDEXMA)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_INDEXMA)); | ||||
| te->name = IFACE_("Index Material"); | te->name = IFACE_("Index Material"); | ||||
| te->directdata = &srl->passflag; | te->directdata = &scene_layer->passflag; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_RGBA)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_RGBA)); | ||||
| te->name = IFACE_("Color"); | te->name = IFACE_("Color"); | ||||
| te->directdata = &srl->passflag; | te->directdata = &scene_layer->passflag; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_DIFFUSE)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_DIFFUSE)); | ||||
| te->name = IFACE_("Diffuse"); | te->name = IFACE_("Diffuse"); | ||||
| te->directdata = &srl->passflag; | te->directdata = &scene_layer->passflag; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_SPEC)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_SPEC)); | ||||
| te->name = IFACE_("Specular"); | te->name = IFACE_("Specular"); | ||||
| te->directdata = &srl->passflag; | te->directdata = &scene_layer->passflag; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_SHADOW)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_SHADOW)); | ||||
| te->name = IFACE_("Shadow"); | te->name = IFACE_("Shadow"); | ||||
| te->directdata = &srl->passflag; | te->directdata = &scene_layer->passflag; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_AO)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_AO)); | ||||
| te->name = IFACE_("AO"); | te->name = IFACE_("AO"); | ||||
| te->directdata = &srl->passflag; | te->directdata = &scene_layer->passflag; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_REFLECT)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_REFLECT)); | ||||
| te->name = IFACE_("Reflection"); | te->name = IFACE_("Reflection"); | ||||
| te->directdata = &srl->passflag; | te->directdata = &scene_layer->passflag; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_REFRACT)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_REFRACT)); | ||||
| te->name = IFACE_("Refraction"); | te->name = IFACE_("Refraction"); | ||||
| te->directdata = &srl->passflag; | te->directdata = &scene_layer->passflag; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_INDIRECT)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_INDIRECT)); | ||||
| te->name = IFACE_("Indirect"); | te->name = IFACE_("Indirect"); | ||||
| te->directdata = &srl->passflag; | te->directdata = &scene_layer->passflag; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_ENVIRONMENT)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_ENVIRONMENT)); | ||||
| te->name = IFACE_("Environment"); | te->name = IFACE_("Environment"); | ||||
| te->directdata = &srl->passflag; | te->directdata = &scene_layer->passflag; | ||||
| te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_EMIT)); | te = outliner_add_element(soops, &tenla->subtree, id, tenla, TSE_R_PASS, LOG2I(SCE_PASS_EMIT)); | ||||
| te->name = IFACE_("Emit"); | te->name = IFACE_("Emit"); | ||||
| te->directdata = &srl->passflag; | te->directdata = &scene_layer->passflag; | ||||
| } | } | ||||
| #undef LOG2I | #undef LOG2I | ||||
| static bool outliner_animdata_test(AnimData *adt) | static bool outliner_animdata_test(AnimData *adt) | ||||
| { | { | ||||
| if (adt) | if (adt) | ||||
| return (adt->action || adt->drivers.first || adt->nla_tracks.first); | return (adt->action || adt->drivers.first || adt->nla_tracks.first); | ||||
| return false; | return false; | ||||
| } | } | ||||
| #ifdef WITH_FREESTYLE | #ifdef WITH_FREESTYLE | ||||
| static void outliner_add_line_styles(SpaceOops *soops, ListBase *lb, Scene *sce, TreeElement *te) | static void outliner_add_line_styles(SpaceOops *soops, ListBase *lb, Scene *sce, TreeElement *te) | ||||
| { | { | ||||
| SceneRenderLayer *srl; | SceneLayer *scene_layer; | ||||
| FreestyleLineSet *lineset; | FreestyleLineSet *lineset; | ||||
| for (srl = sce->r.layers.first; srl; srl = srl->next) { | for (scene_layer = sce->render_layers.first; scene_layer; scene_layer = scene_layer->next) { | ||||
| for (lineset = srl->freestyleConfig.linesets.first; lineset; lineset = lineset->next) { | for (lineset = scene_layer->freestyleConfig.linesets.first; lineset; lineset = lineset->next) { | ||||
| FreestyleLineStyle *linestyle = lineset->linestyle; | FreestyleLineStyle *linestyle = lineset->linestyle; | ||||
| if (linestyle) { | if (linestyle) { | ||||
| linestyle->id.tag |= LIB_TAG_DOIT; | linestyle->id.tag |= LIB_TAG_DOIT; | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| for (srl = sce->r.layers.first; srl; srl = srl->next) { | for (scene_layer = sce->render_layers.first; scene_layer; scene_layer = scene_layer->next) { | ||||
| for (lineset = srl->freestyleConfig.linesets.first; lineset; lineset = lineset->next) { | for (lineset = scene_layer->freestyleConfig.linesets.first; lineset; lineset = lineset->next) { | ||||
| FreestyleLineStyle *linestyle = lineset->linestyle; | FreestyleLineStyle *linestyle = lineset->linestyle; | ||||
| if (linestyle) { | if (linestyle) { | ||||
| if (!(linestyle->id.tag & LIB_TAG_DOIT)) | if (!(linestyle->id.tag & LIB_TAG_DOIT)) | ||||
| continue; | continue; | ||||
| linestyle->id.tag &= ~LIB_TAG_DOIT; | linestyle->id.tag &= ~LIB_TAG_DOIT; | ||||
| outliner_add_element(soops, lb, linestyle, te, 0, 0); | outliner_add_element(soops, lb, linestyle, te, 0, 0); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| #endif | #endif | ||||
| static void outliner_add_scene_contents(SpaceOops *soops, ListBase *lb, Scene *sce, TreeElement *te) | static void outliner_add_scene_contents(SpaceOops *soops, ListBase *lb, Scene *sce, TreeElement *te) | ||||
| { | { | ||||
| SceneRenderLayer *srl; | SceneLayer *scene_layer; | ||||
| TreeElement *tenla = outliner_add_element(soops, lb, sce, te, TSE_R_LAYER_BASE, 0); | TreeElement *tenla = outliner_add_element(soops, lb, sce, te, TSE_R_LAYER_BASE, 0); | ||||
| int a; | int a; | ||||
| tenla->name = IFACE_("RenderLayers"); | tenla->name = IFACE_("RenderLayers"); | ||||
| for (a = 0, srl = sce->r.layers.first; srl; srl = srl->next, a++) { | for (a = 0, scene_layer = sce->render_layers.first; scene_layer; scene_layer = scene_layer->next, a++) { | ||||
| TreeElement *tenlay = outliner_add_element(soops, &tenla->subtree, sce, te, TSE_R_LAYER, a); | TreeElement *tenlay = outliner_add_element(soops, &tenla->subtree, sce, te, TSE_R_LAYER, a); | ||||
| tenlay->name = srl->name; | tenlay->name = scene_layer->name; | ||||
| tenlay->directdata = &srl->layflag; | tenlay->directdata = &scene_layer->flag; | ||||
| outliner_add_passes(soops, tenlay, &sce->id, scene_layer); | |||||
| if (srl->light_override) | |||||
| outliner_add_element(soops, &tenlay->subtree, srl->light_override, tenlay, TSE_LINKED_LAMP, 0); | |||||
| if (srl->mat_override) | |||||
| outliner_add_element(soops, &tenlay->subtree, srl->mat_override, tenlay, TSE_LINKED_MAT, 0); | |||||
| outliner_add_passes(soops, tenlay, &sce->id, srl); | |||||
| } | } | ||||
| // TODO: move this to the front? | // TODO: move this to the front? | ||||
| if (outliner_animdata_test(sce->adt)) | if (outliner_animdata_test(sce->adt)) | ||||
| outliner_add_element(soops, lb, sce, te, TSE_ANIM_DATA, 0); | outliner_add_element(soops, lb, sce, te, TSE_ANIM_DATA, 0); | ||||
| outliner_add_element(soops, lb, sce->gpd, te, 0, 0); | outliner_add_element(soops, lb, sce->gpd, te, 0, 0); | ||||
| ▲ Show 20 Lines • Show All 1,582 Lines • Show Last 20 Lines | |||||