BufferStrategy — 버퍼 전략
BufferStrategy — 버퍼 전략 (java.awt.image)
특정 Canvas나 Window에서 복합 메모리를 구성하는 메커니즘을 나타내는 추상 클래스예요. Java 1.4부터 도입됐어요.
본문
BufferStrategy는 java.lang.Object를 확장하고, 직접 알려진 서브클래스로 Component.BltBufferStrategy, Component.FlipBufferStrategy가 있어요.
하드웨어와 소프트웨어의 제약이 특정 버퍼 전략을 구현할 수 있는지와 방법을 결정해요. 이러한 제약은 Canvas나 Window를 만들 때 사용한 GraphicsConfiguration의 성능(capabilities)을 통해 감지할 수 있어요.
여기서 버퍼(buffer)와 서피스(surface)는 같은 뜻으로 쓰여요 — 비디오 장치 메모리나 시스템 메모리의 연속된 메모리 영역을 말해요.
복합 버퍼 전략에는 순차 링 버퍼링(sequential ring buffering)과 blit 버퍼링 등 여러 종류가 있어요. 순차 링 버퍼링(이중·삼중 버퍼링)이 가장 일반적이에요. 애플리케이션은 단일 백 버퍼에 그리고 나서, 데이터를 복사하거나 비디오 포인터를 이동해 한 단계로 내용을 프론트(표시)로 옮겨요. 비디오 포인터를 이동하는 것은 버퍼를 교환해 처음 그려진 버퍼가 프론트 버퍼(현재 장치에 표시되는 것)가 되게 하는데, 이를 페이지 플리핑(page flipping) 이라고 해요. 대안으로 백 버퍼의 내용을 복사하거나 비디오 포인터를 움직이는 대신 체인으로 앞으로 blit할 수 있어요.
// 버퍼 전략 생성 예시
Canvas c = new Canvas();
c.createBufferStrategy(2); // 이중 버퍼링
BufferStrategy bs = c.getBufferStrategy();
Graphics g = bs.getDrawGraphics();
g.drawImage(img, 0, 0, null);
bs.show();
g.dispose();
생성자
protected BufferStrategy()
서브클래스가 호출하기 위한 생성자예요.
메서드 상세
getCapabilities()
public abstract BufferCapabilities getCapabilities()
이 BufferStrategy의 BufferCapabilities를 반환해요.
getDrawGraphics()
public abstract Graphics getDrawGraphics()
드로잉 버퍼용 그래픽 컨텍스트를 만들어요. 성능상 동기화되지 않을 수 있으므로 여러 스레드의 사용은 애플리케이션 레벨에서 처리해야 해요. 얻은 그래픽 객체의 폐기도 애플리케이션이 처리해야 해요.
contentsLost()
public abstract boolean contentsLost()
마지막 getDrawGraphics 호출 이후 드로잉 버퍼가 손실됐는지 반환해요. 버퍼 전략의 버퍼는 보통 VolatileImage 타입이라 손실될 수 있어요.
contentsRestored()
public abstract boolean contentsRestored()
드로잉 버퍼가 최근에 손실 상태에서 복원되어 기본 배경색(흰색)으로 재초기화됐는지 반환해요. 표면이 최근에 복원됐다면 다시 칠해야 할 수 있어요.
show()
public abstract void show()
메모리를 복사(blitting)하거나 표시 포인터를 변경(flipping)해 다음 사용 가능한 버퍼를 보이게 해요.
dispose()
public void dispose()
이 BufferStrategy가 현재 소비하는 시스템 리소스를 해제하고 연관된 Component에서 제거해요. 이 메서드 호출 후 getBufferStrategy는 null을 반환해요. 폐기된 후 BufferStrategy를 사용하려 하면 정의되지 않은 동작이 일어나요. (1.6부터)