플랫폼에 구애받지 않는다고 생각합시다. 게임의 나머지 부분이 실행되는 동안 그래픽 리소스를로드하고 싶습니다.
원칙적으로 실제 파일을 별도의 스레드 또는 비동기 I / O를 사용하여로드 할 수 있습니다. 그러나 그래픽 객체를 사용하면 GPU에 업로드해야하며 주 스레드에서만 수행 할 수 있습니다.
게임 루프를 다음과 같이 바꿀 수 있습니다.
while true do
update()
for each pending resource do
load resource to gpu
end
draw()
end
디스크에서 RAM으로 별도의 스레드로드 자원이있는 동안.
그러나로드 할 큰 리소스가 많은 경우 프레임 마감 시간이 누락되어 결국 프레임이 삭제 될 수 있습니다. 루프를 다음과 같이 변경할 수 있습니다.
while true do
update()
if there are pending resources then
load one resource to gpu
remove that resource from the pending list
end
draw()
end
프레임 당 하나의 리소스 만 효과적으로로드합니다. 그러나로드 할 작은 자원이 많으면 모두로드하는 데 많은 프레임이 필요하며 많은 시간이 낭비됩니다.
최적의로드 시간은 다음과 같습니다.
while true do
time_start = get_time()
update()
while there are pending resources then
current_time = get_time()
if (current_time - time_start) + time_to_load(resource) >= 1/60 then
break
load one resource to gpu
remove that resource from the pending list
end
draw()
end
이렇게하면 해당 프레임에 대해 시간 내에 리소스를 사용할 수있는 경우에만 리소스를로드합니다. 불행히도, 이것은 주어진 리소스를로드하는데 걸리는 시간을 추정 할 수있는 방법을 필요로합니다.
내가 여기서 무엇을 놓치고 있습니까? 많은 게임이 프레임을 완전히 떨어 뜨리거나 로딩 시간이 너무 길지 않고 완전히 비동기식으로 모든 내용을로드하는 방법은 무엇입니까?