Как приостановить нить рендеринга в UE4?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как приостановить нить рендеринга в UE4?

Сообщение Anonymous »

Мобильная платформа, которую я использую в моем текущем проекте UE 4.27, имеет низкую производительность, поэтому я рассматриваю, могу ли я приостановить поток рендеринга и выпустить ресурсы рендеринга на сцене, когда программа вступает в фон (чтобы уменьшить использование видео памяти). Сначала я проверил его в режиме редактора, но результат не уменьшил использование видео памяти, как я ожидал. Регистрация ресурсов использует актеры сцены для регистрации всех ресурсов и спасения их членам класса Tarray. При выпуске интерфейс FCEREDELEGATES :: ApplicationWillEnterbackgroundDelegate < /code> уведомляет метод выпуска для их освобождения.
Вот пример кода: < /p>
// Here is registeration code.
for (TActorIterator It(GetWorld()); It; ++It)
{
AActor* Actor = *It;
TArray MeshComponents;
Actor->GetComponents(MeshComponents);
for (auto* Comp : MeshComponents)
{
if (Comp && Comp->GetStaticMesh())
{
// Push the static mesh pointer to the
optimizer->RegisterDefaultResources(Comp->GetStaticMesh());
}
}
}

...

// Here is resource release code (In another function).
for (auto Res : DefaultResources)
{
// Texture release.
if (UTexture2D* Tex = Cast(Res))
{
if (Tex->Resource)
{
Tex->ReleaseResource();
}
}
// Static mesh release.
else if (UStaticMesh* Mesh = Cast(Res))
{
if (Mesh->GetRenderData())
{
for (auto& LOD : Mesh->GetRenderData()->LODResources)
{
ENQUEUE_RENDER_COMMAND(ReleasePositionVBResource)([lodRes = LOD.VertexBuffers.PositionVertexBuffer](FRHICommandListImmediate& RHICmdList)
{
auto& res = const_cast(lodRes);
res.ReleaseResource();
});
ENQUEUE_RENDER_COMMAND(ReleaseMeshVBResource)([lodRes = LOD.VertexBuffers.StaticMeshVertexBuffer](FRHICommandListImmediate& RHICmdList)
{
auto& res = const_cast(lodRes);
res.ReleaseResource();
});
ENQUEUE_RENDER_COMMAND(ReleaseIBResource)([lodRes = LOD.IndexBuffer](FRHICommandListImmediate& RHICmdList)
{
auto& res = const_cast(lodRes);
res.ReleaseResource();
});
}
}
}
}

...

// Here is release call (In another function).
SCOPED_SUSPEND_RENDERING_THREAD(false);
StopRenderingThread();
RHIExit();
GIsRunning = false;
MemoryOptimizer->OptimizerBackgroundProcess(); // Here is release logic.
< /code>
В режиме редактора поток рендеринга действительно остановлен. Но графическая память не выпущена. Я не понимаю, почему.


Подробнее здесь: https://stackoverflow.com/questions/797 ... ead-in-ue4
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»