GameEngine 2D : GameObject, Camera
소프트렌더러 프로젝트에 여러 개의 게임 오브젝트를 구현.
GameEngine.cpp / LoadScene
소프트렌더러 프로젝트에서 카메라를 따라 플레이어를 구현
SoftRenderer2D.cpp / Update2D
결과
소프트렌더 전체 프로세스 정리
렌더링 파이프라인
GameEngine, GameObject2D 클래스에서 각 멤버 변수 유형에 대한 적절한 이유는?
Smart Pointer에는 세 가지 포인터가 존재한다.
1. Shared_ptr : 인스턴스를 가리키는 포인터의 갯수를 카운팅하여 메모리 누수가 발생하지 않도록 한다.
2. unique_ptr : 하나의 포인터만이 해당 인스턴스를 가리킬 수 있도록 한다.
3. weak_ptr : 하나 이상의 shared_ptr가 가리키는 객체를 참조할 수 있지만 reference count를 늘리지 않는다.
C#과 언리얼에서는 unique_ptr이 아닌 Shared_ptr을 사용한다.
왜냐하면 C#과 언리얼 엔진에서는 GC(가비지컬렉션)를 통해서 메모리를 관리하기 때문에 어쩔 수 없이
Shared_ptr을 사용을 해야한다.
_Player
_QuadMesh
_Camera2D
위에 3가지 멤버 변수는 각각의 인스턴스에 대한 유니크 포인터이다.
이것을 사용하는 이유는 파생 클래스를 처리하거나 또는 원하는 곳에서 객체를 생성과 소멸시키기 위해서이다.
_Transform
Transform2D는 하나의 변수로 선언한다. 왜냐하면 모든 게임 오브젝트는 최소 하나씩의 값을 가지고 있기 때문이다.
_MeshPtr
Mesh는 일반 포인터를 사용한다. 왜냐하면 Mesh는 엔진을 초기화할 때 이미 생성된 초기 Mesh 데이터를 사용하기
때문이다. 또한 Mesh 데이터는 처음에 생성이 된 후에는 변화가 생겨서는 안 된다.