IShader* MaterialShaderSystem::getShaderForName (const std::string& name) { MaterialShaders::iterator i = _activeMaterialShaders.find(name); if (i != _activeMaterialShaders.end()) { (*i).second->IncRef(); return (*i).second; } MaterialShader *material; std::string block = GlobalMaterialSystem()->getBlock(name); if (block.empty()) material = new MaterialShader(name); else material = new MaterialShader(name, block); MaterialDefinitionMap::iterator idef = _materialDefinitions.find(name); if (idef == _materialDefinitions.end()) { _materialDefinitions[name] = name; } MaterialPointer pShader(material); _activeMaterialShaders.insert(MaterialShaders::value_type(name, pShader)); pShader->setIsValid(_licenseParser.isValid(name)); pShader->IncRef(); g_ActiveShadersChangedNotify(); return pShader; }
gint PrefabSelector::callbackButtonPress (GtkWidget *widget, GdkEventButton *event, PrefabSelector *self) { if (event->type == GDK_2BUTTON_PRESS && event->button == 1) { GtkTreeModel* model; GtkTreeIter iter; if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(self->_view), &model, &iter) == FALSE) { return FALSE; } else { UndoableCommand undo("mapImport"); const std::string text = gtkutil::TreeModel::getString(model, &iter, PREFAB_NAME); switch (self->_selectedSelectionStrategy) { case PREFAB_SELECT_REPLACE: selection::algorithm::deleteSelection(); break; case PREFAB_SELECT_UNSELECT: Selection_Deselect(); break; case PREFAB_SELECT_EXTEND: //do nothing break; } const std::string fileName = PrefabSelector::GetFullPath(text); GlobalMap().importFile(fileName); GlobalMaterialSystem()->importMaterialFile(os::stripExtension(fileName) + ".mat"); return TRUE; } } return FALSE; }
void MaterialShaderSystem::realise () { GlobalMaterialSystem()->loadMaterials(); _licenseParser.openLicenseFile(GlobalRegistry().get(RKEY_LICENSE_PATH)); // notify the observers that this module is initialized now g_observers.realise(); }
void MaterialShaderSystem::unrealise () { // notify the observers that this module is going to get shut down now g_observers.unrealise(); for (MaterialShaders::iterator i = _activeMaterialShaders.begin(); i != _activeMaterialShaders.end(); ++i) { ASSERT_MESSAGE(i->second->refcount() == 1, "orphan material still referenced"); } _activeMaterialShaders.clear(); _materialDefinitions.clear(); g_ActiveShadersChangedNotify(); GlobalMaterialSystem()->freeMaterials(); }
void ToolsGenerateMaterials () { if (!GlobalMap().askForSave(_("Generate Materials"))) return; /* empty map? */ if (!GlobalRadiant().getCounter(counterBrushes).get()) { gtkutil::errorDialog(_("Nothing to generate materials for\n")); return; } try { const std::string mapName = GlobalMap().getName(); NullMapCompilerObserver observer; GlobalMapCompiler().generateMaterial(mapName, observer); GlobalMaterialSystem()->showMaterialDefinition(); } catch (MapCompileException& e) { gtkutil::errorDialog(e.what()); } }