2009-12-03 5 views
1

데스크톱 구성을 사용하는 경우에도 더블 버퍼링이 필요합니까? 마이크로 소프트의 Application Compatibility Guide에서데스크톱 구성이 활성화 된 상태에서 더블 버퍼링이 필요합니까?

:

이전 Windows Vista 및 Windows 서버 2008 (GDI)은, 윈도우 핸들 (HWND) 직접 화면에 그려진 그래픽 장치 인터페이스, 에는 특정 이점이 있지만 은 Windows의 표시 방법을 제한하고 은 최상위 창을 관리합니다. 윈도우 Vista 및 Windows Server 2008에서 모든 최상위 창 ( WS_EX_LAYERED과 유사)을 오프 스크린 비트 맵 렌더링, 및 바탕 화면 창 관리자는 바탕 화면을 그릴 함께 을 이미지를 결합합니다. 그것은 모든 렌더링 같은 소리

지금 오프 스크린 비트 맵으로 수행됩니다

창 오프 스크린 비트 맵

이 맞로 렌더링?

난 아직 표준 페인트주기 동안 점멸보기 때문에 내가 물어 그 이유는 : 바탕 화면 구성이 활성화 된 상태

  • WM_ERASEBKGND
  • WM_PAINT

:

alt text http://i48.tinypic.com/1zdanwj.jpg

나는 에드 모든 그림은 백 버퍼에 일어날 것이라고

BeginPaint(hWnd, paintStructure); 
    ... 
    EndPaint(hWnd, paintStructure); 

에 대한 호출 사이 :

창 한편 오프 스크린 비트 맵

에 렌더링

는 A 프런트 버퍼는 것 영향을받지 않아.

답변

1

이 정보가 맞습니까?

넵 (현재 표시되지 않는 부분을 미리보기 이미지로 표시 할 수 있음)

DWM의 화면 렌더링은 이중 버퍼링됩니다. 그러나 버퍼를 지우고 그림을 그려야하는 경우 ... 가시적 인 인공물로 나타납니다. 따라서 버퍼를 두 배로 늘려야합니다. 이중 버퍼링은 각 창을 그려야하는 오프 스크린 버퍼가 아니라 바탕 화면에서 발생합니다 (즉, 다음 데스크톱보기를 완전히 그려서 뒤집습니다).

+0

둘 다 똑같은 것을 지적했습니다. 아마 올바른 답이 될 것입니다. 나는 그림에 사용되는 버퍼에 직접 페인트한다. DWM이 반 페인트를하는 동안 버퍼를 잡으면 반 페인트 된 내용을 보게됩니다. –

1

글쎄, 화면이 아닌 비트 맵으로 페인팅하면 응용 프로그램이 다시 그리기를 기다릴 필요없이 DWM이 좋아하는대로 창을 합성 할 수 있습니다 (예 : XP를 다른 창 위로 이동할 때처럼).).

이것은 이 아닙니다.은 오프 스크린 표면을 그리면 자동으로 깜박임이 줄어 듭니다. 창을 지우고 다시 그려 넣으면 두 작업 사이에서 DWM이 화면을 다시 그립니다 (초당 약 60 회 수행). 그러면 물론 깜박임을 볼 수 있습니다.

응용 프로그램이 충분히 빠르게 다시 그리지 않을 때 "흰 창"문제가 해결되고 창이 겹쳐져 다시 그리기가 줄어 듭니다. 그러나 깜박임에 도움이되지는 않습니다. DWM에는 페인트 작업이 아직 완료되지 않았으며 내용을 다시 그릴 때까지 창 이미지가 표시되기를 원하는지 여부를 알 수있는 방법이 없습니다.

+0

BeginPaint와 EndPaint에 대한 호출 사이에 창에 그림이 멋지게 표시되어 있으면 DWM *이 업데이트를 가져올 때 안전한지를 알 수 있다고 생각할 수 있습니다. –

+0

그것은 이것을 추적해야 할 것입니다. 아마도 성능 고려 사항이 반 페인트 콘텐츠 위에 놓여 있다고 생각합니다. – Joey

+0

@Chris : 애플리케이션이 'BeginPaint'와 'EndPaint'를 호출 할 필요는 없습니다. 완벽한 세계에서 시스템이 어떻게 구현 될 수 있는지 설명하고 있습니다. 이 세상은 그렇지 않습니다. – IInspectable