void WorkspacePanel::OnEdit(wxCommandEvent& event) { wxTreeItemId selId = mTreeCtrl->GetSelection(); if(isMaterial(selId)) { MaterialController* mc = getMaterial(selId); EditorManager* editorManager = EditorManager::getSingletonPtr(); Editor* editor = editorManager->findEditor(mc->getMaterial()->getName().c_str()); Editor* editorMat = editorManager->findEditor(Ogre::String(mc->getMaterial()->getName() + ".material").c_str()); if(editor != NULL) { editorManager->setActiveEditor(editor); } else if(editorMat != NULL) { editorManager->setActiveEditor(editorMat); } else { MaterialSerializer* ms = new MaterialSerializer(); ms->queueForExport(mc->getMaterial(), true); String script = ms->getQueuedAsString(); MaterialScriptEditor* materialEditor = new MaterialScriptEditor(editorManager->getEditorNotebook(), wxID_ANY); wxString name = mc->getMaterial()->getName().c_str(); name += wxT(".material"); materialEditor->setName(name); materialEditor->SetText(script); editorManager->openEditor(materialEditor); } } }
TEST(MaterialSerializer, Basic) { Root root; String group = "General"; auto mat = std::make_shared<Material>(nullptr, "Material Name", 0, group); auto pass = mat->createTechnique()->createPass(); auto tus = pass->createTextureUnitState(); tus->setTextureFiltering(FT_MIP, FO_POINT); tus->setName("Test TUS"); pass->setAmbient(ColourValue::Green); // export to string MaterialSerializer ser; ser.queueForExport(mat); auto str = ser.getQueuedAsString(); // printf("%s\n", str.c_str()); // load again DataStreamPtr stream = std::make_shared<MemoryDataStream>("memory.material", &str[0], str.size()); MaterialManager::getSingleton().parseScript(stream, group); auto mat2 = MaterialManager::getSingleton().getByName("Material Name", group); ASSERT_TRUE(mat2); EXPECT_EQ(mat2->getTechniques().size(), mat->getTechniques().size()); EXPECT_EQ(mat2->getTechniques()[0]->getPasses()[0]->getAmbient(), ColourValue::Green); EXPECT_EQ(mat2->getTechniques()[0]->getPasses()[0]->getTextureUnitState("Test TUS")->getTextureFiltering(FT_MIP), FO_POINT); }