[1]. Level_Manager 클래스의 주요 함수 : Open_Level함수.
[2]. Client 프로젝트에서 Engine 프로젝트의 부모 클래스를 상속받는, 실질적인 씬(Level)클래스들을 만든다.
[3]. Engine에서 만든 Level 클래스들을 Client 프로젝트에서 보여주겠다는 의미로, ENGINE_DLL 선언은 필수. 이렇게 해서, 제대로 작성된 부모클래스를 Client에 제공할 수 있게 되었다.
[4]. Client 프로젝트에 Logo / GamePlay / Loading 이라는 이름의 Level 클래스들을 만들고, 이들은 아까 말햇듯이, Engine의 Level클래스의 상속을 받고 있다. Level 클래스에서, Reference Count들을 관리 및 해제 하고 있다.
[5]. 이제 프로그램 실행 시, Loading 클래스가 나오게 끔, MainApp 클래스에서, Start_Level 이라는 함수 안에, Level_Manager 클래스의 Open_Level 함수를 호출하게끔 작성한다.
[6]. Level_Manager의 Open_Level 함수를 GameInstance 클래스에 추가해주고, GameInstance 클래스를 통해서 호출하는 식으로 진행한다.

[7]. MainApp 클래스에서, 필요한 Level 클래스들을 할당하고 있다.
[8]. Level_Loading 클래스에는, 항상 “어떤 Level에 어떤 자원들이 필요해서 로딩을 해야하는가” 라는 개념이 필요하기 때문에, Create 함수에, 열거체형 LEVELID 를 인자를 필요로 한다.
[9]. Level_Loading 클래스의 역할은,
[10]. 위 두 역할 때문에라도 현재 Level_Loading 클래스에서 쭉 코드를 작성하면 매우 길어지고, 관리가 힘들어 질 것이기에, 궁극적으로 쓰레드를 통한 역할 분배를 시켜주도록 한다.
[11]. Loader 라는 클래스를 새로 만들고, 기존의 Level_Loading 클래스가 이 Loader 클래스를 내포하고, 이 Loader 클래스에서 쓰레드를 만들어서, 다음 Level의 자원을 준비하는 과정을 작성해 준다.
[12]. Loader 클래스는 Base 클래스의 상속을 받고, 이 Loader 클래스 또한 Device 와 Context 가 필요하고, 다음 Level이 어떤 Level인가에 대한 인덱스가 필요로 한다. 그리고 Loader 클래스의 Initialize 함수에서는 이 인덱스를 Loader 클래스의 멤버변수에 담아주도록 한다.
[13]. 이 Loader 클래스 또한 장치의 객체 주소가 공유되기 때문에, Reference Count 를 증가 및 해제 / 차감 작업을 해줘야 하고, Initialize 함수 안에 쓰레드 작업을 진행한다.

[14]. 쓰레드와 관련되어 있는 로딩 기능을 Loader 클래스로 이전시킨 것이다.