Plite
전자오락 공방
Plite
전체 방문자
오늘
어제
  • 분류 전체보기 (274)
    • 프로젝트 (18)
      • 완성 프로젝트 (3)
      • 프로젝트 진행 내역 (15)
    • 공부 및 정리 (241)
      • 백준 코드 (222)
      • C++ (8)
      • DirectX (2)
      • Unreal Engine (6)
      • 프로그래밍 패턴 (3)
    • 기타 (12)
      • 기타 주저리 (10)
    • 게임과 취미 (1)
    • 대문 (1)

블로그 메뉴

  • 홈
  • 프로젝트
  • 취미, 일상
  • 백준 프로필

공지사항

  • [Read Me]
  • 제 블로그에 방문하신 것을 환영합니다.

인기 글

태그

  • KMP
  • 동적계획법
  • 정수론
  • 정렬
  • 큐
  • 조합론
  • 최소 스패닝 트리
  • 누적합
  • 위상 정렬
  • 분할정복
  • 우선순위큐
  • 문자열
  • 브루트포스
  • LCA
  • 수학
  • 이분탐색
  • 백준
  • 투포인터
  • 백트래킹
  • C++
  • SCC
  • 스택
  • 트라이
  • UC++
  • 트리
  • 그래프
  • 세그먼트 트리
  • 유니온 파인드
  • 기하
  • 구현

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Plite

전자오락 공방

GOF 프로그래밍 패턴 - 경량 패턴
공부 및 정리/프로그래밍 패턴

GOF 프로그래밍 패턴 - 경량 패턴

2022. 11. 12. 22:41

* 인스턴싱과 관련이 있는 패턴입니다.

 

예시)

 

위와 같이 똑같은 나무를 잔뜩 심을 거라고 가정해 봅시다.

 

나무 객체 데이터 수십, 수백개를 저장한다면 메모리가 터져버리고 말겁니다.

 

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());
}

 

좌측 위의 프레임 수가 10밖에 되지 않는다.

 

이번에는 다음과 같이 한번에 렌더링을 하도록 해보겠습니다.

shader->DrawIndexedInstanced(0, 0, indicies.size(), MAX_INSTANCE_COUNT);

 

프레임 수가 확연히 차이난다.

 

 

저작자표시 (새창열림)

'공부 및 정리 > 프로그래밍 패턴' 카테고리의 다른 글

GOF 프로그래밍 패턴 - 명령 패턴  (0) 2022.11.12
GOF - 싱글톤 패턴  (0) 2022.10.18
    '공부 및 정리/프로그래밍 패턴' 카테고리의 다른 글
    • GOF 프로그래밍 패턴 - 명령 패턴
    • GOF - 싱글톤 패턴
    Plite
    Plite
    개발 일지, 게임 이야기 등을 적어두는 공간입니다.

    티스토리툴바