OSDN Git Service

fix CMakeList.txt for windows
[moflib/moflib.git] / moflib-1.0 / moflib / moflib / mof / MeshBuilder.cpp
index 416ee7c..ab2a19b 100644 (file)
-#include "MeshBuilder.hpp"\r
-#include "mof/private/GraphicsDeviceImpl.hpp"\r
-#include "mof/ConsoleIO.hpp"\r
-#include <stdexcept>\r
-#include "mof/private/MeshDisposer.hpp"\r
-#include <memory>\r
-#include <stdlib.h>\r
-#include "mof/FilePath.hpp"\r
-#include "mof/private/VertexFVF.hpp"\r
-#include "mof/Material.hpp"\r
-#include "mof/Texture.hpp"\r
-#include "mof/private/Mesh.hpp"\r
-\r
-struct mof::MeshBuilder::Impl{\r
-       std::shared_ptr<mof::MeshDisposer> pMeshDisposer;\r
-       unsigned long nMaterials;\r
-       std::shared_ptr<Material>* materials;\r
-       std::shared_ptr<Texture>* textures;\r
-\r
-\r
-       Impl()\r
-               : pMeshDisposer() , nMaterials(0) ,\r
-                 materials(NULL) , textures(NULL){\r
-       }\r
-\r
-       ~Impl(){\r
-               delete[] materials;\r
-               delete[] textures;\r
-       }\r
-\r
-};\r
-\r
-mof::MeshBuilder::MeshBuilder(const mof::tstring& path )\r
-: m_pImpl(new Impl())\r
-{\r
-\r
-       LPDIRECT3DDEVICE9 pDevice = mof::GraphicsDevice::getRawDevice();\r
-       HRESULT hr;\r
-       LPD3DXBUFFER pD3DXMtrlBuffer;   //\83}\83e\83\8a\83A\83\8b\97p\83o\83b\83t\83@\r
-       m_pImpl->pMeshDisposer = std::shared_ptr<mof::MeshDisposer>( new mof::MeshDisposer() );\r
-\r
-       //\83t\83@\83C\83\8b\83\8d\81[\83h\r
-       hr = D3DXLoadMeshFromX(path.c_str() , D3DXMESH_MANAGED, pDevice,\r
-               &(m_pImpl->pMeshDisposer->pAdjacency) ,\r
-               &pD3DXMtrlBuffer , NULL, \r
-               &(m_pImpl->nMaterials) , \r
-               &(m_pImpl->pMeshDisposer->pMesh) );\r
-       if(hr != D3D_OK)throw std::invalid_argument("Failed --- D3DXLoadMeshFromX");\r
-\r
-       //\8ae\8eí\83C\83\93\83X\83^\83\93\83X\8eæ\93¾\r
-       D3DXMATERIAL* d3dxMaterials = (D3DXMATERIAL*)pD3DXMtrlBuffer->GetBufferPointer();\r
-       try{\r
-               m_pImpl->materials = new std::shared_ptr<mof::Material>[m_pImpl->nMaterials];\r
-               m_pImpl->textures = new std::shared_ptr<mof::Texture>[m_pImpl->nMaterials];\r
-               \r
-       \r
-               for( DWORD i = 0; i< m_pImpl->nMaterials; i++ )\r
-                       {\r
-                       //\83}\83e\83\8a\83A\83\8b\82Ì\83R\83s\81[\r
-                       D3DMATERIAL9 mat = d3dxMaterials[i].MatD3D;\r
-                       mat.Ambient = mat.Diffuse;\r
-                       mof::Material tmp;\r
-                       memcpy(\r
-                               static_cast<void*>(&tmp) , \r
-                               static_cast<const void*>(&mat) ,\r
-                               sizeof(D3DMATERIAL9)\r
-                               );\r
-                       \r
-                       std::shared_ptr<mof::Material> p(new mof::Material(tmp));\r
-                       m_pImpl->materials[i] = p;\r
-\r
-                       //\83e\83N\83X\83`\83\83\83t\83@\83C\83\8b\82Ì\93Ç\82Ý\8d\9e\82Ý\r
-                  if( d3dxMaterials[i].pTextureFilename != NULL && \r
-                     lstrlen(d3dxMaterials[i].pTextureFilename) > 0 )\r
-                       {\r
-                               mof::otstringstream os;\r
-                               mof::FilePath path(path);\r
-                               os << path.dir().c_str() << _T("/") << d3dxMaterials[i].pTextureFilename;\r
-                               m_pImpl->textures[i] = std::shared_ptr<mof::Texture>(new mof::Texture( os.str()));\r
-                       }\r
-               }\r
-\r
-       }\r
-       catch( std::exception& e){\r
-               pD3DXMtrlBuffer->Release();     //\83o\83b\83t\83@\89ð\95ú\r
-               throw e;\r
-       }\r
-       pD3DXMtrlBuffer->Release();     //\83o\83b\83t\83@\89ð\95ú\r
-\r
-       LPD3DXMESH pMesh = NULL;\r
-       if(m_pImpl->pMeshDisposer->pMesh->GetFVF() != mof::getFVF<VertexXYZNUV>())\r
-       {\r
-               //\83\81\83b\83V\83\85\82É\96@\90ü\82ª\82È\82¢\8fê\8d\87\8f\91\82«\8d\9e\82Þ\r
-               m_pImpl->pMeshDisposer->pMesh->CloneMeshFVF(\r
-                       m_pImpl->pMeshDisposer->pMesh->GetOptions() ,\r
-                       mof::getFVF<VertexXYZNUV>() ,\r
-                       pDevice , &pMesh );\r
-       \r
-               LPD3DXMESH tmp = m_pImpl->pMeshDisposer->pMesh;\r
-               m_pImpl->pMeshDisposer->pMesh = pMesh;\r
-               tmp->Release();\r
-       }\r
-\r
-}\r
-       \r
-mof::MeshBuilder::~MeshBuilder(){}\r
-\r
-mof::Graphics3D* mof::MeshBuilder::construct() const{\r
-       return new mof::Mesh(\r
-               m_pImpl->pMeshDisposer ,\r
-               m_pImpl->nMaterials , \r
-               m_pImpl->materials ,\r
-               m_pImpl->textures \r
-               );\r
-}\r
+#include "MeshBuilder.hpp"
+#include "mof/private/GraphicsDeviceImpl.hpp"
+#include "mof/ConsoleIO.hpp"
+#include <stdexcept>
+#include "mof/private/MeshDisposer.hpp"
+#include <memory>
+#include <stdlib.h>
+#include "mof/FilePath.hpp"
+#include "mof/private/VertexFVF.hpp"
+#include "mof/Material.hpp"
+#include "mof/Texture.hpp"
+#include "mof/private/Mesh.hpp"
+
+struct mof::MeshBuilder::Impl{
+       std::shared_ptr<mof::MeshDisposer> pMeshDisposer;
+       unsigned long nMaterials;
+       std::shared_ptr<Material>* materials;
+       std::shared_ptr<Texture>* textures;
+
+
+       Impl()
+               : pMeshDisposer() , nMaterials(0) ,
+                 materials(NULL) , textures(NULL){
+       }
+
+       ~Impl(){
+               delete[] materials;
+               delete[] textures;
+       }
+
+};
+
+mof::MeshBuilder::MeshBuilder(const mof::tstring& path )
+: m_pImpl(new Impl())
+{
+
+       LPDIRECT3DDEVICE9 pDevice = mof::GraphicsDevice::getRawDevice();
+       HRESULT hr;
+       LPD3DXBUFFER pD3DXMtrlBuffer;   //\83}\83e\83\8a\83A\83\8b\97p\83o\83b\83t\83@
+       m_pImpl->pMeshDisposer = std::shared_ptr<mof::MeshDisposer>( new mof::MeshDisposer() );
+
+       //\83t\83@\83C\83\8b\83\8d\81[\83h
+       hr = D3DXLoadMeshFromX(path.c_str() , D3DXMESH_MANAGED, pDevice,
+               &(m_pImpl->pMeshDisposer->pAdjacency) ,
+               &pD3DXMtrlBuffer , NULL, 
+               &(m_pImpl->nMaterials) , 
+               &(m_pImpl->pMeshDisposer->pMesh) );
+       if(hr != D3D_OK)throw std::invalid_argument("Failed --- D3DXLoadMeshFromX");
+
+       //\8ae\8eí\83C\83\93\83X\83^\83\93\83X\8eæ\93¾
+       D3DXMATERIAL* d3dxMaterials = (D3DXMATERIAL*)pD3DXMtrlBuffer->GetBufferPointer();
+       try{
+               m_pImpl->materials = new std::shared_ptr<mof::Material>[m_pImpl->nMaterials];
+               m_pImpl->textures = new std::shared_ptr<mof::Texture>[m_pImpl->nMaterials];
+               
+       
+               for( DWORD i = 0; i< m_pImpl->nMaterials; i++ )
+                       {
+                       //\83}\83e\83\8a\83A\83\8b\82Ì\83R\83s\81[
+                       D3DMATERIAL9 mat = d3dxMaterials[i].MatD3D;
+                       mat.Ambient = mat.Diffuse;
+                       mof::Material tmp;
+                       memcpy(
+                               static_cast<void*>(&tmp) , 
+                               static_cast<const void*>(&mat) ,
+                               sizeof(D3DMATERIAL9)
+                               );
+                       
+                       std::shared_ptr<mof::Material> p(new mof::Material(tmp));
+                       m_pImpl->materials[i] = p;
+
+                       //\83e\83N\83X\83`\83\83\83t\83@\83C\83\8b\82Ì\93Ç\82Ý\8d\9e\82Ý
+                  if( d3dxMaterials[i].pTextureFilename != NULL && 
+                     lstrlen(d3dxMaterials[i].pTextureFilename) > 0 )
+                       {
+                               mof::otstringstream os;
+                               mof::FilePath path(path);
+                               os << path.dir().c_str() << _T("/") << d3dxMaterials[i].pTextureFilename;
+                               m_pImpl->textures[i] = std::shared_ptr<mof::Texture>(new mof::Texture( os.str()));
+                       }
+               }
+
+       }
+       catch( std::exception& e){
+               pD3DXMtrlBuffer->Release();     //\83o\83b\83t\83@\89ð\95ú
+               throw e;
+       }
+       pD3DXMtrlBuffer->Release();     //\83o\83b\83t\83@\89ð\95ú
+
+       LPD3DXMESH pMesh = NULL;
+       if(m_pImpl->pMeshDisposer->pMesh->GetFVF() != mof::getFVF<VertexXYZNUV>())
+       {
+               //\83\81\83b\83V\83\85\82É\96@\90ü\82ª\82È\82¢\8fê\8d\87\8f\91\82«\8d\9e\82Þ
+               m_pImpl->pMeshDisposer->pMesh->CloneMeshFVF(
+                       m_pImpl->pMeshDisposer->pMesh->GetOptions() ,
+                       mof::getFVF<VertexXYZNUV>() ,
+                       pDevice , &pMesh );
+       
+               LPD3DXMESH tmp = m_pImpl->pMeshDisposer->pMesh;
+               m_pImpl->pMeshDisposer->pMesh = pMesh;
+               tmp->Release();
+       }
+
+}
+       
+mof::MeshBuilder::~MeshBuilder(){}
+
+mof::Graphics3D* mof::MeshBuilder::construct() const{
+       return new mof::Mesh(
+               m_pImpl->pMeshDisposer ,
+               m_pImpl->nMaterials , 
+               m_pImpl->materials ,
+               m_pImpl->textures 
+               );
+}