void MD5ModelNode::constructRemaps() { // greebo: Acquire the ModelSkin reference from the SkinCache // Note: This always returns a valid reference ModelSkin& skin = GlobalModelSkinCache().capture(_skin); // Iterate over all surfaces and remaps _surfaceRemaps.resize(_model->size()); MD5ModelNode::SurfaceRemaps::iterator j = _surfaceRemaps.begin(); for (MD5Model::const_iterator i = _model->begin(); i != _model->end(); ++i,++j) { // Get the replacement shadername std::string remap = skin.getRemap((*i)->getShader()); if (!remap.empty()) { // We have a valid remap, store it j->name = remap; j->shader = GlobalRenderSystem().capture(remap); } else { // No remap, leave the name as it is j->shader = ShaderPtr(); } } // Refresh the scene GlobalSceneGraph().sceneChanged(); }
void ReloadSkins(const cmd::ArgumentList& args) { GlobalModelSkinCache().refresh(); RefreshSkinWalker walker; Node_traverseSubgraph(GlobalSceneGraph().root(), walker); // Refresh the ModelSelector too ui::ModelSelector::refresh(); }
// Skin changed notify void PicoModelNode::skinChanged(const std::string& newSkinName) { // The new skin name is stored locally _skin = newSkinName; // greebo: Acquire the ModelSkin reference from the SkinCache // Note: This always returns a valid reference ModelSkin& skin = GlobalModelSkinCache().capture(_skin); _picoModel->applySkin(skin); // Refresh the scene (TODO: get rid of that) GlobalSceneGraph().sceneChanged(); }
void ModelPreview::setSkin(const std::string& skin) { // Load and apply the skin, checking first to make sure the model is valid // and not null if (_modelNode != NULL) { model::ModelNodePtr model = Node_getModel(_modelNode); if (model) { ModelSkin& mSkin = GlobalModelSkinCache().capture(skin); model->getIModel().applySkin(mSkin); } } // Redraw queueDraw(); }