Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // dxhierarchy.cpp
- #include "dxhierarchy.h"
- HRESULT MeshHierarchy::CreateFrame(const char* name, D3DXFRAME** outframe){
- Frame* frame = new Frame;
- memset(frame, 0, sizeof(Frame));
- D3DXMatrixIdentity(&frame->TransformationMatrix);
- D3DXMatrixIdentity(&frame->matCombined);
- frame->pMeshContainer = 0;
- frame->pFrameSibling = 0;
- frame->pFrameFirstChild = 0;
- if(name && strlen(name)){
- frame->Name = new char[strlen(name)+1];
- memcpy(frame->Name, name, strlen(name)+1);
- }
- *outframe = frame;
- return 0;
- }
- HRESULT MeshHierarchy::CreateMeshContainer(const char* name, const D3DXMESHDATA* meshdata,
- const D3DXMATERIAL* materials, const D3DXEFFECTINSTANCE*, DWORD imat,
- const DWORD* adjacency, ID3DXSkinInfo* skininfo, D3DXMESHCONTAINER** outmesh){
- MeshContainer* mesh = new MeshContainer;
- memset(mesh, 0, sizeof(MeshContainer));
- if(name && strlen(name)){
- mesh->Name = new char[strlen(name)+1];
- memcpy(mesh->Name, name, strlen(name)+1);
- }
- mesh->MeshData.Type = D3DXMESHTYPE_MESH;
- DWORD iface = meshdata->pMesh->GetNumFaces();
- mesh->pAdjacency = new DWORD[iface*3];
- memcpy(mesh->pAdjacency, adjacency, sizeof(DWORD)*iface*3);
- mesh->MeshData.pMesh = meshdata->pMesh;
- mesh->MeshData.pMesh->AddRef();
- mesh->NumMaterials = max(imat,1);
- mesh->mat = new D3DMATERIAL9[mesh->NumMaterials];
- mesh->tex = new IDirect3DTexture9*[mesh->NumMaterials];
- ZeroMemory(mesh->tex, sizeof(IDirect3DTexture9*)*mesh->NumMaterials);
- LPDIRECT3DDEVICE9 dxdev;
- meshdata->pMesh->GetDevice(&dxdev);
- if(imat>0){
- for(DWORD i = 0; i < imat; i++){
- mesh->tex[i] = 0;
- mesh->mat[i] = materials[i].MatD3D;
- if(materials[i].pTextureFilename) D3DXCreateTextureFromFile(dxdev, materials[i].pTextureFilename, &mesh->tex[i]);
- }
- }
- if(skininfo){
- mesh->pSkinInfo = skininfo;
- skininfo->AddRef();
- UINT iBone = skininfo->GetNumBones();
- mesh->boneoff = new D3DXMATRIX[iBone];
- mesh->matCombined = new D3DXMATRIX*[iBone];
- for(UINT i = 0; i < iBone; i++) mesh->boneoff[i] = *mesh->pSkinInfo->GetBoneOffsetMatrix(i);
- }else{
- mesh->pSkinInfo = 0;
- mesh->boneoff = 0;
- mesh->mesh = 0;
- mesh->matCombined = 0;
- }
- dxdev->Release();
- *outmesh = mesh;
- return 0;
- }
- HRESULT MeshHierarchy::DestroyFrame(D3DXFRAME* frame){
- Frame *exframe = (Frame*)frame;
- if(exframe->Name) delete []exframe->Name;
- delete exframe;
- return 0;
- }
- HRESULT MeshHierarchy::DestroyMeshContainer(D3DXMESHCONTAINER* mesh){
- MeshContainer* exmesh = (MeshContainer*)mesh;
- if(!exmesh) return 0;
- if(exmesh->Name) delete []exmesh->Name;
- if(exmesh->mat) delete []exmesh->mat;
- if(exmesh->tex){
- for(UINT i = 0; i < exmesh->NumMaterials; i++)
- if(exmesh->tex[i]) exmesh->tex[i]->Release();
- delete []exmesh->tex;
- }
- if (exmesh->pAdjacency) delete []exmesh->pAdjacency;
- if (exmesh->boneoff) delete []exmesh->boneoff;
- if (exmesh->matCombined) delete []exmesh->matCombined;
- if (exmesh->mesh) exmesh->mesh->Release();
- if (exmesh->MeshData.pMesh) exmesh->MeshData.pMesh->Release();
- if (exmesh->pSkinInfo) exmesh->pSkinInfo->Release();
- delete exmesh;
- exmesh = 0;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment