4. 숲에 들어갈 나무들
실제 나무 객체는 중복된 데이터가 있을 것이다
(모델링, 텍스쳐)
중복되는 데이터와 객체 별로 고유한 데이터를
분리해보자
5. 숲에 들어갈 나무들
이제 Tree객체는 공유 데이터는 참조하기만 하고
고유한 데이터만 가지고 있다
6. Instanced rendering
한 번의 드로우 콜로 같은 객체를 여러 개
그리는 방식
GPU에 데이터 전송 시 공유 데이터와 고유 데이터
를 분리해서 보내기 때문에 전송 되는 데이터 양이
적어진다
그래픽 카드나 API에서
지원하고 있음
7. 경량 패턴
어떤 객체의 개수가 너무 많아서 좀 더 가볍게
만들고 싶을 때 사용한다
객체 데이터를 공유 데이터와 고유 데이터로 분리
공유 데이터
고유상태(intrinsic state), 자유문맥(context-free)
고유 데이터
외부상태(extrinsic state)
8. 지형 정보
지형을 타일 기반으로 구현
각 지형에 필요한 속성
- 플레이어가 얼마나 빠르게 이동할 수 있는지 이동
비용 값
- 강이나 바다처럼 보트로 건너갈 수 있는 곳인지
여부
- 렌더링할 때 사용할 텍스쳐
9. 지형 정보 구현1
지형 정보를 World 클래스
내의 여러 곳에서 처리하고
있다 (개선 필요)
13. 지형 정보 구현3
공유 객체의 생명주기를
안전하게 관리하기 위해
Wolrd 클래스 내에
선언하고 지형정보를
초기화 한다
14. 성능에 대해서
공유 객체에 접근하려면 포인터를 거쳐서 접근해야
되기 때문에 캐시 미스가 자주 일어난다면 성능이
떨어질 수는 있지만 측정해본 결과 성능이 크게 떨
어지거나 하지는 않았다
테스트 코드 : https://git.io/vwkEL
15. 성능에 대해서
경량 패턴을 사용하면 객체를 마구 늘리지
않으면서도 객체지향 방식의 장점을 취할 수 있다
열거형을 선언해 수많은 switch문을 만들
생각이라면 경량 패턴을 고려해 보자
16. 관련 자료
어떤 경량 객체가 실제 필요한지 예측 할 수 없다면
필요할 때 만드는 것이 좋은데 객체 생성과정을
숨기고 싶다면 팩토리 메소드 패턴을 활용
경량 객체를 중복으로 생성하지 않으려면 이미 생성
한 객체를 관리하고 있어야 한다 이때 객체 풀 패턴
(19장)을 활용
상태 패턴(7장)을 쓸 때 각 상태를 처리하는 클래스
는 멤버 변수가 하나도 없는 경우가 종종 있는데
이때 경량 패턴 활용