2009-04-13 7 views
1

저는 스레드, SDL 및 그래픽이 일반적으로 작동하는 것을 처음 사용합니다. 나는 LazyFoo의 모든 SDL 튜토리얼을 살펴 보았고 나를 크게 도와주었습니다. 그러나 멀티 스레딩에 대한 자습서에서 그는 비디오 기능을 별도의 스레드로 사용해서는 안되며 문제가 발생할 수 있다고 설명했습니다. 그래픽과 스레드에 대한 모호한 이해가 여전히 있기 때문에 어떻게해야하는지 궁금합니다.SDl_Threads를 올바르게 사용하려면 어떻게해야합니까?

내 프로젝트 중 하나 인 슛이 위로 올랐기 때문에 모든 그래픽을 표시하는 스레드 하나를 만들고 하나의 스레드가 우주선의 모든 플레이어 입력을 받고 적 AI의 다른 스레드를 생성해야하는지 궁금합니다.

어떻게해야하는지 (내가 잘못한 것 같아요) 사람이 그래픽을 사용자 입력과 스레드 AI를 통해 구현하는 방법에 대한 조언을 갖고 있습니까? http://lazyfoo.net/SDL_tutorials/

답변

0

는 일반적으로 나는 UI/AI 스레드에서 렌더링 스레드를 분리하는 것이 좋습니다 생각 다음 Lazyfoo의 자습서

, 이것은 링크입니다. 코드를 더 이해하기 쉽게 유지하는 데 도움이됩니다. 소스 코드에서 사용할 수있는 게임이 많으므로 어떻게 수행했는지 확인하십시오.

0

처음 시작할 때 책임 기준에 따라 스레드를 분리하는 것이 훨씬 쉬울 수 있습니다. 더 정확한 확장 방법으로이 접근 방식을 사용하면 스레드 풀을 사용하게됩니다. SDL 용 스레드 풀 솔루션을 비롯하여 미리 만들어진 스레드 풀 솔루션이 있습니다.

OpenGL 또는 DirectX를 사용하여 렌더링하는 경우 해당 API 호출로 인해 많은 오버 헤드가 발생하므로 주 스레드에서 게임 루프의 순차적 인 부분을 수행 할 수 있습니다. 입력을 받고, 월드 모델을 업데이트하고 (인공 지능의 계산 결과 사용 포함), 렌더링합니다. 그런 다음 AI, 네트워크 스레드를 병렬로 실행할 수 있습니다. 따라서 별도의 렌더링 스레드에 대해 걱정할 필요가 없습니다. 한가지 예외가 있습니다 : 소프트웨어로 렌더링하는 계산적으로 무거운 (레이 캐스팅/레이 트레이싱과 같이) 렌더링을하는 경우, 병렬 스레드에서 "논리"렌더링을 수행하고, 프레임 버퍼에 쓰기를하는 것이 더 나을 것입니다. 그리고 위의 시퀀스를 수행하는 주 스레드에서 예를 들어 준비된 프레임 버퍼를 블 리팅하십시오. GDI.

렌더링과 관련하여 단일 스레드 (기본 스레드)에서의 예 AFAIK 렌더링은 일반적으로 예를 들어, OpenGL을 사용하면 문제가 없습니다. 다시 AFAIK는 더 이상 주요 플랫폼에서 문제가되지 않습니다. 또한 GDI와 DirectX가 각각 동일한 문제를 가지고 있는지 여부를 알지 못합니다.