개요
이중 버퍼는 지속적으로 갱신되는 데이터가 있을때 아직 완성되지않은 중간 처리 단계에서 해당 데이터에 접근하려하면 현재 상태가 아닌 완성된 가장 최신버전의 데이터를 제공해주는 기법이다. 대표적인 것이 그래픽스의 교환 사슬이다. 비디오 드라이버가 화면을 렌더링하려고하면 교환사슬의 읽기용 버퍼를 제공해주고 쓰기는 쓰기용 버퍼에 진행한다. cpu내에서의 로직에서도 멀티 스레드, 인터럽트등에 의해 데이터 처리 중간에 데이터 접근이 발생할 수 있고 이러한 경우에 이중버퍼 기법을 사용할 수 있다.
동기에서의 사용
위 예시처럼 비동기 상황외 동기상황에도 이중버퍼를 쓸 수 있다. A 데이터를 갱신하는 과정에서 참조하는 데이터가 A 데이터에 영향받는 경우이다.
Update
대표적인 경우는 Update처리이다. 만약 여러 엑터의 Update처리에서 다른 엑터의 데이터를 수정하고 그러한 수정이 해당 엑터의 Update의 영향을 줄 경우 매 프레임 엑터들의 초기상태가 같더라도 Update호출 순서에 따라 다른 결과가 나올 수 있다. 이를 방지하기위해 현재 프레임 Update에서 다른 엑터의 상태를 바꿀때 바로 바꾸는게 아닌 쓰기용 버퍼, 즉 다음 프레임에서 사용할 상태용 데이터를 갱신한다. 현재 프레임에서는 이전 프레임에서 갱신한 데이터를 사용하기에 현재의 수정은 현재 프레임의 Update처리에 영향을 주지않는다. 이후 프레임 처리가 끝나면 쓰기, 읽기용 버퍼를 갈고 다음 프레임으로 넘어간다. 다음 프레임에서는 이전 프레임의 갱신을 참조하며 다음 프레임을 위한 데이터를 갱신한다. 이렇게 하면 Update순서에 상관없이 같은 결과가 나온다.
참고서적
게임 프로그래밍 패턴
'디자인 패턴 > 게임 프로그래밍 패턴' 카테고리의 다른 글
[게임 프로그래밍 패턴][10]업데이트 메서드 (0) | 2024.04.28 |
---|---|
[게임 프로그래밍 패턴][9]게임 루프 (0) | 2024.04.28 |
[게임 프로그래밍 패턴][7]상태 패턴 (0) | 2024.04.24 |
[게임 프로그래밍 패턴][6]싱글턴 (0) | 2024.04.23 |
[게임 프로그래밍 패턴][5]프로토타입 패턴 (0) | 2024.04.22 |