コード例 #1
0
ファイル: BufferCache.cpp プロジェクト: am11/ffcore
void ff::BufferCache::ReturnBuffer(ID3D11Buffer *pBuffer)
{
	assertRet(pBuffer);

	size_t nBytes  = GetBufferSize(pBuffer);
	size_t nBuffer = GetBufferIndex(nBytes);

	_buffers[nBuffer].Insert(pBuffer);
}
コード例 #2
0
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);
}
コード例 #3
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);
}
コード例 #4
0
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);
}
コード例 #5
0
ファイル: BufferCache.cpp プロジェクト: am11/ffcore
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;
	}
}