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;
}
Example #2
0
	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();
}
Example #5
0
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());
	}
}