//----------------------------------------------------------------------------- // Name: InitDeviceObjects() // Desc: Initialize scene objects. //----------------------------------------------------------------------------- HRESULT CMyD3DApplication::InitDeviceObjects() { HRESULT hr = S_OK; LPD3DXMESH pMeshSysMem = NULL; LPD3DXBUFFER pAdjacencyBuffer = NULL; // Initialize the font m_pFont->InitDeviceObjects( m_pd3dDevice ); // check current display setting CheckMenuItem( GetMenu(m_hWnd), ID_OPTIONS_DISPLAY1 + (m_cObjectsPerSide-1), MF_CHECKED ); CheckMenuItem( GetMenu(m_hWnd), IDM_SHOWNONOPTIMIZEDMESH, (!m_bShowStripReordered && !m_bShowVertexCacheOptimized) ? MF_CHECKED : MF_UNCHECKED ); CheckMenuItem( GetMenu(m_hWnd), IDM_SHOWVCACHEOPTIMIZED, m_bShowVertexCacheOptimized ? MF_CHECKED : MF_UNCHECKED ); CheckMenuItem( GetMenu(m_hWnd), IDM_SHOWSTRIPREORDERED, m_bShowStripReordered ? MF_CHECKED : MF_UNCHECKED ); CheckMenuItem( GetMenu(m_hWnd), IDM_SHOWTRILIST, (!m_bShowStrips && !m_bShowSingleStrip) ? MF_CHECKED : MF_UNCHECKED ); CheckMenuItem( GetMenu(m_hWnd), IDM_SHOWONESTRIP, m_bShowSingleStrip ? MF_CHECKED : MF_UNCHECKED ); CheckMenuItem( GetMenu(m_hWnd), IDM_SHOWMANYSTRIPS, m_bShowStrips ? MF_CHECKED : MF_UNCHECKED ); CheckMenuItem( GetMenu(m_hWnd), IDM_DYNAMICVB, (m_dwMemoryOptions == D3DXMESH_DYNAMIC) ? MF_CHECKED : MF_UNCHECKED ); CheckMenuItem( GetMenu(m_hWnd), IDM_FORCE32BYTEVERTEX, m_bForce32ByteFVF ? MF_CHECKED : MF_UNCHECKED ); hr = LoadMeshData(&pMeshSysMem, &pAdjacencyBuffer); if (FAILED(hr)) { // ignore load errors, just draw blank screen if mesh is invalid hr = S_OK; goto End; } hr = OptimizeMeshData(pMeshSysMem, pAdjacencyBuffer, D3DXMESHOPT_ATTRSORT, &m_MeshAttrSorted); if (FAILED(hr)) goto End; hr = OptimizeMeshData(pMeshSysMem, pAdjacencyBuffer, D3DXMESHOPT_STRIPREORDER, &m_MeshStripReordered); if (FAILED(hr)) goto End; hr = OptimizeMeshData(pMeshSysMem, pAdjacencyBuffer, D3DXMESHOPT_VERTEXCACHE, &m_MeshVertexCacheOptimized); if (FAILED(hr)) goto End; End: SAFE_RELEASE( pMeshSysMem ); SAFE_RELEASE( pAdjacencyBuffer ); return hr; }
std::pair<Mesh**, int> ResourceManager::LoadMesh(std::string path, unsigned importFlags) { std::pair<Mesh**, int> meshes = std::pair<Mesh**, int>(); std::pair<Mesh::MeshData**, int> meshData = LoadMeshData(path, importFlags); if (meshData.first == nullptr) { return meshes; } meshes.first = new Mesh*[meshData.second]; meshes.second = meshData.second; for (int i = 0; i < meshData.second; i++) { meshes.first[i] = new Mesh(meshData.first[i]); } return meshes; }