본 글에서는 EngineCore에 대해 다뤄보도록 하겠습니다.
EngineCore는 엔진의 핵심 구동 부분을 명시합니다.
현재 개발중인 Engine의 로직은 다음과 같습니다.
WinMain에서 EngineSystem의 SystemStart( ) 함수를 호출 하면
EngineSystem의 필요한 항목들을 초기화시키고 EngineCore를 Start 합니다.
EngineCore( ) 가 시작되면 가상함수로 넣어 뒀던 Update ( )와 Render ( ) 구역을 멀티 쓰레드로 수행하게 됩니다.
문제는 매 프레임 Update ( )와 Render ( ) 함수가 수행 되어야 하는데, 두 펑션이 멀티쓰레드로 구현 될 경우 루프를 돌면서 두 펑션이 각기 다른 타이밍에 돌 수 있다는 가정이 바로 나올 수 밖에 없습니다.
Update Thread는 45 Frame 째를 update ( ) 중이지만
Render Thread 는 아직 40 Frame 째를 Render ( ) 할 수도 있다는 것이지요.
따라서 두 쓰레드는 매 프레임 같은 간격으로 호출 될 수 있도록 동기화가 되어야 합니다.
Update Thread와 Render Thread 는 EngineCore에서 구현이 되어 있으며
이 글에서는 이 두 쓰레드에 대한 동기화에 대해서 먼저 보도록 하겠습니다.
공부하면서 만들다 보니 쓰레드를 백날 여러개만들어서 돌려봤자 동기화와 제대로 된 실행 시점이 정의 되지 않으면 똥망 한다는 것을 직접 체험해버렸습니다.
그래서 코어의 구조 자체를 한번 엎고 돌아오겠습니다.
'Programming > Engine Journal' 카테고리의 다른 글
#05-1_Component Based GameObject (0) | 2017.03.14 |
---|---|
인텔이 제시하는 병렬 프로그래밍 엔진 (0) | 2017.03.14 |
#03. Engine Graphics. Engine에 DirectX 올리기 [.Cpp] (0) | 2017.03.13 |
#03. Engine Graphics. Engine에 DirectX 올리기 [.h] (0) | 2017.03.13 |
#02_Engine WindowSystem. 엔진 GUI 설계 (0) | 2017.03.12 |