void ff::BufferCache::ReturnBuffer(ID3D11Buffer *pBuffer) { assertRet(pBuffer); size_t nBytes = GetBufferSize(pBuffer); size_t nBuffer = GetBufferIndex(nBytes); _buffers[nBuffer].Insert(pBuffer); }
void CHostBaseDownloadDlg::OnBnClickedSendBin() { GetValue(); CGPSDlg::gpsDlg->m_DownloadMode = CGPSDlg::HostBasedBinOnly; CGPSDlg::gpsDlg->m_nDownloadBaudIdx = GetBaudrateIndex(); CGPSDlg::gpsDlg->m_strDownloadImage = GetFilePath(); CGPSDlg::gpsDlg->m_nDownloadBufferIdx = GetBufferIndex(); GetDlgItem(IDOK)->EnableWindow(FALSE); ::AfxBeginThread(DownloadThread, 0); }
Buffer::Buffer(int currentUnitIndex, std::vector<int> currentBufferGenes) { //std::cout<<"Buffer creation begun"<<std::endl; unitIndex = currentUnitIndex; unitBufferTypeIndex = (unitIndex==0)? 0 : 1; bufferName = (unitBufferTypeIndex==0)? "FuelTank0" : "Battery0"; bufferGenes= currentBufferGenes; GetBufferIndex(); GetBufferFileName(); LoadBuffer(); UpdateBufferAvailabilityRatio(); minimumStateOfBuffer = 1; //bufferAvailabilityRatioOverMission.push_back(bufferAvailabilityRatio); //stateOfBufferOverMission.push_back(stateOfBuffer); }
void CHostBaseDownloadDlg::OnBnClickedSendBin() { GetValue(); // CGPSDlg::gpsDlg->m_bHostBasedMode = TRUE; // CGPSDlg::gpsDlg->m_isHostOnlySendCmd = FALSE; // CGPSDlg::gpsDlg->m_isHostOnlySendBin = TRUE; // CGPSDlg::gpsDlg->m_isUsingV8InternalLoader = FALSE; CGPSDlg::gpsDlg->m_DownloadMode = CGPSDlg::HostBasedBinOnly; CGPSDlg::gpsDlg->m_nDownloadBaudIdx = GetBaudrateIndex(); CGPSDlg::gpsDlg->m_strDownloadImage = GetFilePath(); CGPSDlg::gpsDlg->m_nDownloadBufferIdx = GetBufferIndex(); GetDlgItem(IDOK)->EnableWindow(FALSE); ::AfxBeginThread(DownloadThread, 0); }
bool ff::BufferCache::BorrowAndMapBuffer(size_t nBytes, ID3D11Buffer **ppBuffer, void **ppMapped) { assertRetVal(ppBuffer, false); size_t nBuffer = GetBufferIndex(nBytes); size_t nLargestBuffer = _countof(_buffers) - 1; // Try to reuse a cached buffer for (ComPtr<ID3D11Buffer> *pCur = _buffers[nBuffer].GetFirst(); pCur; pCur = _buffers[nBuffer].GetNext(*pCur)) { size_t nCurSize = GetBufferSize(*pCur); if (nCurSize >= nBytes) { if (ppMapped) { // Try to lock the buffer D3D11_MAPPED_SUBRESOURCE map; assertRetVal(SUCCEEDED(_device->GetContext()->Map(*pCur, 0, D3D11_MAP_WRITE_DISCARD, 0, &map)), false); *ppMapped = map.pData; } *ppBuffer = pCur->AddRef(); _buffers[nBuffer].Delete(*pCur); return true; } } // See if one of the large buffers should be thrown away // (to make room for a larger one) if (nBuffer == nLargestBuffer && _allocated[nLargestBuffer] >= GetMaxBufferCount() && _buffers[nLargestBuffer].Size()) { // Throw away one of the "large" buffers, it isn't large enough for (ComPtr<ID3D11Buffer> *pCur = _buffers[nLargestBuffer].GetFirst(); pCur; pCur = _buffers[nLargestBuffer].GetNext(*pCur)) { size_t nCurSize = GetBufferSize(*pCur); if (nCurSize < nBytes) { _buffers[nLargestBuffer].Delete(*pCur); _allocated[nLargestBuffer]--; break; } } } // Add a few empty buffers for later if (nBuffer != nLargestBuffer && !_allocated[nBuffer]) { for (size_t i = 0; i < GetMaxBufferCount() - 1; i++) { ComPtr<ID3D11Buffer> pBuffer; assertRetVal(CreateBuffer(GetAllocationSize(nBytes), &pBuffer), false); _buffers[nBuffer].Insert(pBuffer); _allocated[nBuffer]++; } } // Can't reuse an existing buffer, so create a new one { ComPtr<ID3D11Buffer> pBuffer; assertRetVal(CreateBuffer(GetAllocationSize(nBytes), &pBuffer), false); if (ppMapped) { D3D11_MAPPED_SUBRESOURCE map; assertRetVal(SUCCEEDED(_device->GetContext()->Map(pBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &map)), false); *ppMapped = map.pData; } *ppBuffer = pBuffer.Detach(); _allocated[nBuffer]++; return true; } }