* 인스턴싱과 관련이 있는 패턴입니다.
예시)
위와 같이 똑같은 나무를 잔뜩 심을 거라고 가정해 봅시다.
나무 객체 데이터 수십, 수백개를 저장한다면 메모리가 터져버리고 말겁니다.
class Tree
{
private:
Mesh mesh;
Texture leaves;
//....
Vector position;
};
위는 일반적인 트리 클래스의 정의입니다.
그러나, 우리는 메시부터 텍스쳐 등의 내용은 모두 동일하고
나무의 위치, 회전 각도 정도만 차이가 있다는 사실을 알 수 있습니다.
이번에는 경량 패턴을 적용해보겠습니다.
class Tree
{
private:
Mesh *mesh; //공통 내용은 주소화
Texture *leaves;
//....
Vector position;
};
공통 내용이 주소로 변하면서 객체가 차지하는 메모리 양이 확 줄어들었습니다.
* 인스턴싱
인스턴싱은 위의 경량 패턴에서 한 단계 더 나아갑니다.
기존 경량패턴까지 적용한 후 for문을 통해 렌더링 하면 다음과 같습니다.
for (int i = 0; i < MAX_INSTANCE_COUNT; i++)
{
transform[i]->Render();
shader->DrawIndexed(0, 0, Indicies.size());
}
이번에는 다음과 같이 한번에 렌더링을 하도록 해보겠습니다.
shader->DrawIndexedInstanced(0, 0, indicies.size(), MAX_INSTANCE_COUNT);
'공부 및 정리 > 프로그래밍 패턴' 카테고리의 다른 글
GOF 프로그래밍 패턴 - 명령 패턴 (0) | 2022.11.12 |
---|---|
GOF - 싱글톤 패턴 (0) | 2022.10.18 |