/src/Assets_Converter/AssimpSceneData.cpp

http://github.com/Akranar/daguerreo · C++ · 136 lines · 112 code · 24 blank · 0 comment · 8 complexity · fd6473d8369b0b751124c9c017eed962 MD5 · raw file

  1. #include "AssimpSceneData.h"
  2. #include "ExLib_BinaryFileStream.h"
  3. #include <sstream>
  4. #include "ExLib_SceneBase.h"
  5. #include "ExLib_BoundingVolume.h"
  6. AssimpSceneData::AssimpSceneData()
  7. {
  8. }
  9. AssimpSceneData::~AssimpSceneData()
  10. {
  11. for (unsigned int i = 0; i < skeletons.size(); ++i)
  12. {
  13. delete skeletons[i];
  14. }
  15. skeletons.clear();
  16. for (unsigned int i = 0; i < skeletal_animations.size(); ++i)
  17. {
  18. delete skeletal_animations[i];
  19. }
  20. skeletal_animations.clear();
  21. }
  22. void AssimpSceneData::OutputMeshResources(const std::string & filename)
  23. {
  24. BinaryFileStream stream;
  25. for (unsigned int i = 0; i < mesh_descs.GetSize(); ++i)
  26. {
  27. RendererBaseMesh & current_mesh = mesh_descs[i];
  28. std::stringstream string_stream;
  29. string_stream << filename << '_' << i << '.';
  30. {
  31. std::stringstream out_file;
  32. out_file << string_stream.str() << "vbr";
  33. STLSerializer<FixedArray<unsigned char> > data_serializer(stream);
  34. stream.StartWrite(out_file.str().c_str());
  35. {
  36. stream.Save(current_mesh.GetFormatDesc());
  37. stream.Save(current_mesh.GetVertexDesc());
  38. data_serializer.Save(current_mesh.GetVertexData());
  39. }
  40. stream.Close();
  41. }
  42. {
  43. std::stringstream out_file;
  44. out_file << string_stream.str() << "ibr";
  45. STLSerializer<FixedArray<unsigned char> > data_serializer(stream);
  46. stream.StartWrite(out_file.str().c_str());
  47. {
  48. stream.Save(current_mesh.GetIndexDesc());
  49. data_serializer.Save(current_mesh.GetIndexData());
  50. }
  51. stream.Close();
  52. }
  53. }
  54. }
  55. void AssimpSceneData::OutputSceneGraphResources(const std::string & filename)
  56. {
  57. BinaryFileStream stream;
  58. for (unsigned int i = 0; i < mesh_descs.GetSize(); ++i)
  59. {
  60. RendererBaseMesh & current_mesh = mesh_descs[i];
  61. std::stringstream string_stream;
  62. string_stream << filename << '_' << i << '.';
  63. std::stringstream vb_file;
  64. vb_file << string_stream.str() << "vbr";
  65. std::stringstream ib_file;
  66. ib_file << string_stream.str() << "ibr";
  67. std::stringstream out_file;
  68. out_file << string_stream.str() << "vsr";
  69. DescVisual visual_desc;
  70. visual_desc.SetVertexBufferID(vb_file.str());
  71. visual_desc.SetIndexBufferID(ib_file.str());
  72. DescVertexFormatEntry & attrib = current_mesh.GetFormatDesc()[0];
  73. if (attrib.GetName().compare("POSITION") == 0)
  74. {//Only AABB supported currently.
  75. visual_desc.CreateBoundingVolume(BoundingVolume::BV_AABB,
  76. current_mesh.GetVertexData().GetData() + attrib.GetOffset(),
  77. attrib.GetStride() / 4, //NEED TO FIX THIS LATER
  78. current_mesh.GetVertexData().GetSize() / attrib.GetStride());
  79. }
  80. stream.StartWrite(out_file.str().c_str());
  81. stream.Save(visual_desc);
  82. stream.Close();
  83. }
  84. }
  85. void AssimpSceneData::OuptutAnimationResources(const std::string & filename)
  86. {
  87. BinaryFileStream stream;
  88. for (unsigned int i = 0; i < skeletons.size(); ++i)
  89. {
  90. std::stringstream string_stream;
  91. string_stream << filename << '_' << i << '.';
  92. std::stringstream skeleton_file;
  93. skeleton_file << string_stream.str() << "skel";
  94. stream.StartWrite(skeleton_file.str().c_str());
  95. {
  96. stream.Save(skeletons[i]);
  97. }
  98. stream.Close();
  99. }
  100. for (unsigned int i = 0; i < skeletal_animations.size(); ++i)
  101. {
  102. std::stringstream string_stream;
  103. string_stream << filename << '_' << i << '.';
  104. std::stringstream anim_file;
  105. anim_file << string_stream.str() << "anim";
  106. stream.StartWrite(anim_file.str().c_str());
  107. {
  108. stream.Save(skeletal_animations[i]);
  109. }
  110. stream.Close();
  111. }
  112. }