2014-06-30 1 views
1

은 심미적 인 이유로 자신의 스레드에서 실행됩니다. 이렇게하면 메인 스레드의 창 크기 조정이나 다른 메시지 펌프 블록에 관계없이 부드럽고 즉각적인 애니메이션이 가능합니다. 이 렌더링 스레드는 장면 등등 마우스 마우스 오버, 스크롤, 창 크기를 조정하여 무효화하고,하지 않는 한 (Monitor.Wait를 사용하여) 대부분의 시간을 차단 된 상태로 유지됩니다. 도면 코드가 렌더 타겟에 BeginDraw를 호출하면다른 스레드에서 RenderTarget의 그리기를 취소 할 수 있습니까? Direct2D의 루프를 렌더링

나는 프레젠테이션을 취소 할 수있는 방법을 볼 수 없습니다. 특정 방법으로 창을 무효화하면 씬이 버리고 다시 그려집니다. 내가 마무리 장면을 제시하지 않고, 다시 깨끗한 상태로 다음 BeginDraw에 대한 준비를 위해 무엇을 할 수 있는가? 프레젠테이션을 건너 뛸 드로잉 스레드를 중단하기 위해 렌더링 오류가 발생할 수 있습니까?

+0

는 한 프레임의 렌더링은 귀찮게 할 필요가 너무 오래 걸립니까? 그렇다면 다른 문제가있을 것입니다. –

+0

[이 깜박임 문제를 해결하기 위해 노력하고있어] (http://stackoverflow.com/questions/1382915/how-to-fix-the-wpf-form-resize-controls-lagging-behind-and-black-background). 단순한 클리어링으로도 지연됩니다. 내 옵션으로 놀고 싶다. 렌더 타겟의 크기를 변경하기 전에 장면을 보여 주어야하는 것은 비효율적입니다. – jnm2

답변

0

그래, 시도하고 오류가 발생합니다. 예를 들어 renderTarget->PushAxisAlignedClip()이면 renderTarget->EndDraw() 클립을 팝핑하지 않습니다. 이로 인해 D2DERR_PUSH_POP_UNBALANCED (0x88990016)이 발생합니다. 그런 다음 Flush() 대상을 사용하여 오류 상태를 재설정하십시오.

관련 문제