Non puoi selezionare più di 25 argomenti Gli argomenti devono iniziare con una lettera o un numero, possono includere trattini ('-') e possono essere lunghi fino a 35 caratteri.
 
 
 
 
 
 

133 righe
4.2 KiB

  1. #include "UnitTestPCH.h"
  2. #include "utRemoveRedundantMaterials.h"
  3. CPPUNIT_TEST_SUITE_REGISTRATION (RemoveRedundantMatsTest);
  4. // ------------------------------------------------------------------------------------------------
  5. aiMaterial* getUniqueMaterial1()
  6. {
  7. // setup an unique name for each material - this shouldn't care
  8. aiString mTemp;
  9. mTemp.Set("UniqueMat1");
  10. aiMaterial* pcMat = new aiMaterial();
  11. pcMat->AddProperty(&mTemp,AI_MATKEY_NAME);
  12. float f = 2.0f;
  13. pcMat->AddProperty<float>(&f, 1, AI_MATKEY_BUMPSCALING);
  14. pcMat->AddProperty<float>(&f, 1, AI_MATKEY_SHININESS_STRENGTH);
  15. return pcMat;
  16. }
  17. // ------------------------------------------------------------------------------------------------
  18. aiMaterial* getUniqueMaterial2()
  19. {
  20. // setup an unique name for each material - this shouldn't care
  21. aiString mTemp;
  22. mTemp.Set("Unique Mat2");
  23. aiMaterial* pcMat = new aiMaterial();
  24. pcMat->AddProperty(&mTemp,AI_MATKEY_NAME);
  25. float f = 4.0f;int i = 1;
  26. pcMat->AddProperty<float>(&f, 1, AI_MATKEY_BUMPSCALING);
  27. pcMat->AddProperty<int>(&i, 1, AI_MATKEY_ENABLE_WIREFRAME);
  28. return pcMat;
  29. }
  30. // ------------------------------------------------------------------------------------------------
  31. aiMaterial* getUniqueMaterial3()
  32. {
  33. // setup an unique name for each material - this shouldn't care
  34. aiString mTemp;
  35. mTemp.Set("Complex material name");
  36. aiMaterial* pcMat = new aiMaterial();
  37. pcMat->AddProperty(&mTemp,AI_MATKEY_NAME);
  38. return pcMat;
  39. }
  40. // ------------------------------------------------------------------------------------------------
  41. void RemoveRedundantMatsTest :: setUp (void)
  42. {
  43. // construct the process
  44. piProcess = new RemoveRedundantMatsProcess();
  45. // create a scene with 5 materials (2 is a duplicate of 0, 3 of 1)
  46. pcScene1 = new aiScene();
  47. pcScene1->mNumMaterials = 5;
  48. pcScene1->mMaterials = new aiMaterial*[5];
  49. pcScene1->mMaterials[0] = getUniqueMaterial1();
  50. pcScene1->mMaterials[1] = getUniqueMaterial2();
  51. pcScene1->mMaterials[4] = getUniqueMaterial3();
  52. // all materials must be referenced
  53. pcScene1->mNumMeshes = 5;
  54. pcScene1->mMeshes = new aiMesh*[5];
  55. for (unsigned int i = 0; i < 5;++i) {
  56. pcScene1->mMeshes[i] = new aiMesh();
  57. pcScene1->mMeshes[i]->mMaterialIndex = i;
  58. }
  59. // setup an unique name for each material - this shouldn't care
  60. aiString mTemp;
  61. mTemp.length = 1;
  62. mTemp.data[0] = 48;
  63. mTemp.data[1] = 0;
  64. aiMaterial* pcMat;
  65. pcScene1->mMaterials[2] = pcMat = new aiMaterial();
  66. aiMaterial::CopyPropertyList(pcMat,(const aiMaterial*)pcScene1->mMaterials[0]);
  67. pcMat->AddProperty(&mTemp,AI_MATKEY_NAME);
  68. mTemp.data[0]++;
  69. pcScene1->mMaterials[3] = pcMat = new aiMaterial();
  70. aiMaterial::CopyPropertyList(pcMat,(const aiMaterial*)pcScene1->mMaterials[1]);
  71. pcMat->AddProperty(&mTemp,AI_MATKEY_NAME);
  72. mTemp.data[0]++;
  73. }
  74. // ------------------------------------------------------------------------------------------------
  75. void RemoveRedundantMatsTest :: tearDown (void)
  76. {
  77. delete piProcess;
  78. delete pcScene1;
  79. }
  80. // ------------------------------------------------------------------------------------------------
  81. void RemoveRedundantMatsTest :: testRedundantMaterials (void)
  82. {
  83. piProcess->SetFixedMaterialsString();
  84. piProcess->Execute(pcScene1);
  85. CPPUNIT_ASSERT_EQUAL(pcScene1->mNumMaterials,3u);
  86. CPPUNIT_ASSERT(0 != pcScene1->mMaterials &&
  87. 0 != pcScene1->mMaterials[0] &&
  88. 0 != pcScene1->mMaterials[1] &&
  89. 0 != pcScene1->mMaterials[2]);
  90. aiString sName;
  91. CPPUNIT_ASSERT(AI_SUCCESS == aiGetMaterialString(pcScene1->mMaterials[2],AI_MATKEY_NAME,&sName));
  92. CPPUNIT_ASSERT(!::strcmp( sName.data, "Complex material name" ));
  93. }
  94. // ------------------------------------------------------------------------------------------------
  95. void RemoveRedundantMatsTest :: testRedundantMaterialsWithExcludeList (void)
  96. {
  97. piProcess->SetFixedMaterialsString("\'Unique Mat2\'\t\'Complex material name\' and_another_one_which_we_wont_use");
  98. piProcess->Execute(pcScene1);
  99. CPPUNIT_ASSERT_EQUAL(pcScene1->mNumMaterials,4u);
  100. CPPUNIT_ASSERT(0 != pcScene1->mMaterials &&
  101. 0 != pcScene1->mMaterials[0] &&
  102. 0 != pcScene1->mMaterials[1] &&
  103. 0 != pcScene1->mMaterials[2] &&
  104. 0 != pcScene1->mMaterials[3]);
  105. aiString sName;
  106. CPPUNIT_ASSERT(AI_SUCCESS == aiGetMaterialString(pcScene1->mMaterials[3],AI_MATKEY_NAME,&sName));
  107. CPPUNIT_ASSERT(!::strcmp( sName.data, "Complex material name" ));
  108. }