2010-06-23 3 views
3

Direct2D에서는 불필요한 GPU 상태 변경을 피하기 위해 비슷한 것들을 함께 그리는 것이 좋습니다. 그들은 또한 그저 장면의 뒤에서 순서를 바꾸는 작업을합니다.WPF 고성능 드로잉 - 브러시 색상별로 그룹화해야합니까?

2 가지 색상 중 하나를 가질 수있는 사각형을 많이 그려야합니다. 저는 두 가지 패스로 드로잉을 할 생각입니다. 하나는 첫 번째 컬러가있는 직사각형을위한 것이고 다른 하나는 다른 컬러를 가진 사각형입니다.

이렇게하면 렌더링 속도가 향상 될지 알고 있나요? 지금 당장 가지고있는 속도는 그렇게 크지 않습니다. DrawingVisual에서 가져온 DrawingContext를 그립니다.

+0

왜 당신이 테스트하는 간단한 벤치 마크를 생성하지 않습니다. 두 가지 버전으로 하나의 색상 A를 그 다음 색상 B를 그려야합니다. 두 번째 버전은 교대 색상을 그립니다. 'StopWatch'을 추가하고 결과를 비교하십시오. – ChrisF

+0

나는 시도 할 것이다. 아무도 이미 그 해답을 알고 있거나 이것에 대한 통찰력이 있는지 알아 보려고했습니다. – Meh

답변

1

는 정말해야합니다 브러시에 의해 어떤 영향을 그룹화 모르겠지만, 당신이 먼저 확인해야합니다 몇 가지가 있습니다 :

  • 모든 브러쉬가, 펜 및 기타 freezables 냉동되어 있는지 확인은.
  • 시각적 트리를 단순화하고 요소 수를 줄이십시오.
  • 도면을 업데이트 할 때마다 변경되는 요소의 수를 줄여보십시오.

읽기 : http://msdn.microsoft.com/en-us/magazine/dd483292.aspx

+0

나는 이미 그것 모두를한다. 내가 C에서 Direct2D를 사용하여/CLI는, 속도가 뛰어난했지만, 나는 제대로 작동하도록 포커스를 얻을 수 없습니다 (http://stackoverflow.com/questions/2844165/wpf-hwndhost-keyboard-focus), 그래서 지금은 Direct3D로가는 것 외에도 찾을 수있는 가장 낮은 수준의 WPF 드로잉 API를 사용하고 있습니다. – Meh

+0

@Adal - DrawingVisual은 가장 낮은 레벨의 WPF API가 아니며, 가장 낮은 레벨이 OnRender를 재정의합니다. 여러 DrawingVisual을 사용하면 큰 데이터 세트를 처리 할 때 데이터의 모든 작은 부분이 변경되므로, 시각적으로 변경된 데이터를 포함하고 전체 데이터 세트를 다시 렌더링하지 않습니다. – Nir