2010-08-03 4 views
2

저는 스레딩과 관련하여 다소 신빙성이 있습니다. 따라서 올바른 방향의 포인터가 큰 도움이 될 것입니다. 상당히 많은 업데이트 기능과 상당히 무거운 인출 기능을 모두 갖춘 게임이 있습니다. 나는 draw 함수의 대부분의 무게가 GPU에서 발생한다고 가정합니다. 이 때문에 드로잉이 진행되는 동안 다음 프레임에서 업데이트 계산을 시작하고 싶습니다. 지금, 내 게임 루프는 매우 간단합니다 : 그것은 그리기 독립적으로 실행할 수 있도록, 게임 상태를 변경하지 마십시오iPhone에서의 업데이트에서 OpenGL 호출 분리하기

Game->Update1(); 
Game->Update2(); 
Game->Draw(); 

Update1() 업데이트 변수. 즉, 둘 사이의 데이터에 대한 투쟁이 없어야합니다. 또한 CPU 처리의 대부분입니다.

Update2() 그리기에 필요한 변수가 매우 빠르며 따라서 Draw()을 직렬로 실행하는 것이 옳은 것처럼 보입니다. 또한 Draw() 함수는 CPU에서 가벼우 며 GPU에서는 무겁다 고 생각합니다.

GPU가 모든 그리기 기능을 처리하는 동안 다음 프레임의 Update1()이 다음 프레임의 업데이트 준비를 위해 CPU를 사용할 수 있습니다. 내가 자동으로이 기능을 사용하는 것 같지 않습니다. 그리기주기가 조금 걸릴 것 같고 완료 될 때까지 모든 것을 차단합니다. 이상적인 것보다 적습니다.

이 작업을 수행하는 올바른 방법은 무엇입니까? 이미 이런 일이 벌어지고 있으며, 제대로 관찰하지 않고있는 중입니까?

답변

0

Draw()에 포함 된 내용에 따라 Draw() 내부의 일부 호출이 CPU와 GPU를 동기화하지 않는 한 자동으로 CPU-GPU 병렬 처리를 수행해야합니다. 하나의 간단한 예제는 glReadPixels를 사용하는 것입니다.

+0

아, 훌륭합니다! 감사! – Perrako