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); }
void MeshWithoutIndexDataTests::testCreateLineWithMaterial() { String matName = "lineMat"; MaterialPtr matPtr = MaterialManager::getSingleton().create(matName, "General"); Pass* pass = matPtr->getTechnique(0)->getPass(0); pass->setDiffuse(1.0, 0.1, 0.1, 0); ManualObject* line = OGRE_NEW ManualObject("line"); line->begin(matName, RenderOperation::OT_LINE_LIST); line->position(0, 50, 0); line->position(50, 100, 0); line->end(); String fileName = "lineWithMat.mesh"; MeshPtr lineMesh = line->convertToMesh(fileName); OGRE_DELETE line; CPPUNIT_ASSERT(lineMesh->getNumSubMeshes() == 1); CPPUNIT_ASSERT(lineMesh->getSubMesh(0)->indexData->indexCount == 0); RenderOperation rop; lineMesh->getSubMesh(0)->_getRenderOperation(rop); CPPUNIT_ASSERT(rop.useIndexes == false); CPPUNIT_ASSERT(lineMesh->getSubMesh(0)->vertexData->vertexCount == 2); MeshSerializer meshWriter; meshWriter.exportMesh(lineMesh.get(), fileName); MaterialSerializer matWriter; matWriter.exportMaterial( MaterialManager::getSingleton().getByName(matName), matName + ".material" ); mMeshMgr->remove( fileName ); ResourceGroupManager::getSingleton().addResourceLocation(".", "FileSystem"); MeshPtr loadedLine = mMeshMgr->load(fileName, "General"); remove(fileName.c_str()); remove((matName + ".material").c_str()); CPPUNIT_ASSERT(loadedLine->getNumSubMeshes() == 1); CPPUNIT_ASSERT(loadedLine->getSubMesh(0)->indexData->indexCount == 0); loadedLine->getSubMesh(0)->_getRenderOperation(rop); CPPUNIT_ASSERT(rop.useIndexes == false); CPPUNIT_ASSERT(lineMesh->getSubMesh(0)->vertexData->vertexCount == 2); mMeshMgr->remove( fileName ); }