В настоящее время у меня есть проект с использованием DirectX11, который генерирует случайный ландшафт на основе алгоритма Хилла. У меня есть настройка, по которой вы можете изменять входы на местности (семена, количество холмов и т. Д.), А затем повторно инициализировать и наблюдать за рельефом, созданным холмом на холме. Проблема заключается в том, что (как и следовало ожидать) есть большая потеря FPS, но и такие вещи, как камера, будут заикаться при попытке ее переместить. По существу, то, что я хочу сделать, это создать поток для шага холма местности, чтобы поколение не мешало времени кадра и для камеры (поэтому камера все равно может перемещаться без проблем). Я просмотрел несколько ресурсов, но я до сих пор не понимаю нити правильно.C++ - (DirectX11) Как использовать поток внутри класса
Проверка при переинициализировать местности, во время выполнения метода обновления:
void CThrive::Update(float frameTime)
{
CKeyboardState kb = CKeyboardState::GetKeyboardState(mWindow->GetHWND());
mCamera->Update(kb, frameTime);
if (mGui->Reint())
{
SafeDelete(mTerrain);
mTerrain = new CTerrain(mGui->GetTerrSize(), mGui->GetTerrMin(), mGui->GetTerrMax(), mGui->GetTerrNumHills(), mGui->GetTerrSeed());
mNewTerrain = true;
mGui->SetReint(false);
}
метод Calling генерировать новые холмы, во время метода визуализации:
void CThrive::Render()
{
if (mNewTerrain)
{
reintTerrain();
}
MainPass();
}
Метод используется для добавления к местности:
void CThrive::reintTerrain()
{
if (!mTerrain->GenerationComplete())
{
mTerrain->GenerateStep(mGraphicsDevice->GetDevice());
}
else
{
mNewTerrain = false;
}
}
Я предполагаю, что создаю поток для reintTerrain, но я не полностью как правильно сделать эту работу внутри класса, так как я требую, чтобы он прекратил добавлять холмы, когда он закончен.
Спасибо за вашу помощь
В чем ваша проблема? Вы пробовали 'std :: thread (& reintTerrain) .detach()'? –