더블 버퍼링 예제

GUI 환경에서 동기화는 다소 복잡해집니다. 예를 들어 아래를 참조하십시오. 여러 버퍼링의 작동 방식을 설명하는 쉬운 방법은 실제 예제를 사용하는 것입니다. 그것은 좋은 화창한 날이며, 당신은 당신의 정원 호스를 찾을 수 없습니다, 밖으로 패들 풀을 얻기로 결정했다. 풀을 버킷으로 채워야 합니다. 그래서 당신은 탭에서 하나의 양동이 (또는 버퍼)를 채우고, 탭을 끄고, 수영장으로 걸어 가서 물을 붓고, 운동을 반복하기 위해 다시 탭으로 걸어 가십시오. 이는 단일 버퍼링과 유사합니다. 물통을 « 처리 »하는 동안 수도꼭지의 꺼져 있어야 합니다. 컴퓨터 그래픽에서 트리플 버퍼링은 이중 버퍼링과 유사하지만 향상된 성능을 제공할 수 있습니다. 이중 버퍼링에서 프로그램은 완성된 도면이 복사되거나 교환될 때까지 기다렸다가 다음 도면을 시작해야 합니다. 이 대기 기간은 몇 밀리초가 될 수 있으며 두 버퍼를 모두 건드리지 않을 수 있습니다. 궁극적으로 메모리가 문제가 되지 않으면 각 창과 전체 데스크톱을 세 번 버퍼링하여 모든 창, 데스크톱 관리자 및 비디오 카드가 자체 속도로 업데이트될 수 있습니다.

일부 GUI에서는 각 창이 바탕 화면의 백 버퍼로 직접 그릴 수 있습니다. 예를 들어 초기 버전의 Windows 프로그램에서는 데스크톱의 백 버퍼에 직접 연결되었기 때문에 해당 창을 겹치는 모든 창도 다시 그려야 했습니다. 단점은 응용 프로그램이 다시 그리기 요청에 즉시 응답하지 않으면 시각적 아티팩트(예)를 얻을 수 있다는 것입니다. 이중 버퍼링은 개념적으로 매우 간단하며 오브젝트를 하나씩 그리는 대신 이미지에 그림을 그린 다음 렌더러에게 전체 이미지를 그리도록 지시합니다. 이렇게 하면 깜박임이 제거됩니다. 화면에 전체 그림을 픽셀 단위로 또는 한 줄씩 그려야 한다고 가정합니다. 이러한 것을 화면에 직접 그리는 경우(예: Graphics.drawLine 사용), 시간이 조금 걸리는 것을 실망하게 될 것입니다. 당신은 아마 당신의 그림이 그려지는 방법의 눈에 보이는 유물을 알 수 있습니다. 대부분의 프로그래머는 이러한 방식으로 그려지는 것을 보는 대신 이중 버퍼링이라는 기술을 사용합니다. 이미 이중 버퍼링을 사용하는 시스템에서는 트리플 버퍼링을 구현하기가 간단합니다. 대부분의 경우 수정이 필요한 기본 시스템 없이 비디오 드라이버에 추가할 수 있습니다.

나는이 예가 대부분 분명하다고 믿는다. 비디오 모드를 변경하거나 픽셀을 넣는 방법이 너무 많기 때문에 직접 채울 수 있도록 하겠습니다. 자세한 정보를 원할 경우 GUI 또는 보호 모드의 그리기 페이지로 이동하십시오. OpenGL[3] 및 Direct3D와 같은 3D 표준은 쿼드 버퍼링을 지원합니다. 이제 두 개의 버킷이 있는 경우 어떻게 할 지 생각해 보십시오. 첫 번째 버킷을 채운 다음 실행 중인 탭 아래에서 두 번째 버킷을 교체합니다. 그런 다음 첫 번째 버킷을 패들 풀에 비우기 위해 두 번째 버킷을 채우는 데 걸리는 시간이 있습니다.

Dark Bugsy더블 버퍼링 예제