2 augusti, 2019 admin

api 더블버퍼링 예제

즉, 나는 그것을 신뢰할 수 있을지 확실하지 않다. 우리는 자바 스크립트가 실행하기 전에 기본 기계 코드로 컴파일되는 시점에 이미 있습니다 (적어도 Chrome의 V8 엔진이 내가 이해하는 것에서 수행하는 일입니다). 브라우저가 UI에서 별도의 스레드에서 자바 스크립트를 실행하고 UI에 액세스하지 않은 자바 스크립트 실행 중에 UI가 업데이트 / 응답 할 수 있도록 UI 요소에 대한 액세스를 동기화하기 시작하기 전에 너무 오래 되지 않았다면 놀라지 않을 것입니다. 그런 일이 발생하면 (그리고 다른 코드를 실행하는 동안 이벤트 처리기가 시작되는 등 극복해야 할 많은 장애물이 있다는 것을 이해합니다) 일종의 이중 버퍼링을 사용하지 않는 캔버스 애니메이션에서 깜박임이 표시될 수 있습니다. 이중 버퍼링을 사용하는 경우 사용자는 버퍼 B로 그리는 동안 버퍼 A를 보고 있습니다. 단일 버퍼링을 사용하는 경우 사용자는 해당 버퍼를 수정하는 동시에 버퍼 A를 보고 있습니다. 즉, 사용자가 화면을 보는 순간에 픽셀이 수정되는 것을 볼 수 없습니다. 버퍼를 교체하는 즉시 변경 사항을 알 수 있습니다. 성능 메트릭이 단순히 이중 버퍼링 또는 페이지 뒤집기와 직접 렌더링이 발생하는 속도인 경우 실망할 수 있습니다. 직접 렌더링의 숫자가 이중 버퍼링의 경우보다 훨씬 초과하고 페이지 뒤집기의 숫자를 훨씬 초과할 수 있습니다. 이러한 각 기술은 수치 성능보다 그래픽 응용 프로그램에서 훨씬 더 중요한 인식 된 성능을 향상시키는 데 사용됩니다. 이 경우 사용자는 얼굴의 눈을 볼 수 있지만 입이 단일 프레임동안 사라집니다.

다음 프레임에서는 다른 지점에서 중단될 수 있습니다. 최종 결과는 끔찍한 깜박이는 그래픽입니다. 이중 버퍼링으로 이 문제를 해결합니다: 대부분의 경우 버퍼링하는 특성이 해답으로 이어질 수 있지만 몇 가지 유연성이 있습니다. 예를 들어, 모든 행위자는 모두 인덱스에 의해 참조되는 메시지를 단일 메시지 블록에 저장할 수 있습니다. 따라야 할 일반적인 규칙은 구성요소의 페인트() 메서드에서 구성요소에 대한 모든 그리기를 수행해야 하는 강력한 이유가 없는 한 다음과 같습니다. 목록 3.1의 기본 레시피 예제에서 그리려는 구성 요소 개체는 myCustomCanvas 클래스(캔버스 확장)의 인스턴스입니다. 이것이 우리가 이 패턴이 필요한 이유입니다. 우리의 프로그램은 한 번에 하나씩 픽셀을 렌더링하지만, 우리는 한 번에 모두 볼 수있는 디스플레이 드라이버가 필요합니다 – 한 프레임에서 얼굴이 없는, 그리고 다음 프레임에. 이중 버퍼링은 이 문제를 해결합니다.

나는 비유로 방법을 설명 할 것이다. 이 패턴은 필요할 때 알 수 있는 패턴 중 하나입니다. 이중 버퍼링이 없는 시스템이 있는 경우 눈에 띄게 잘못(찢어짐 등) 보이거나 잘못 작동합니다. 그러나 ”필요할 때 알게 될 것입니다”라고 말하는 것은 계속될 것이 아닙니다. 보다 구체적으로, 이 패턴은 이러한 모든 것이 사실일 때 적절합니다: GUI 환경에서 동기화는 다소 복잡해집니다. 예를 들어 아래를 참조하십시오. 프로그램을 실행하면 버퍼링과 버퍼링 없음 간에 전환할 수 있습니다. 모드 메뉴에서 찾으세요.