2015-02-01 24 views
1

저는 DirectX 11에서 잠시 동안 프로젝트 작업을 해왔지만 일부 사람들은 Direct2D에서해야한다고 제안했습니다. 그래서 저는 프로젝트에서 아이디어를 가지고 놀았습니다. 내가 끝내게되었던 것은 HORRIFIC 실행이다. Direct2D는 수십만 개의 버텍스와 함께 사용하도록되어 있습니까? 그게 내가 사용하고있는 것이기 때문이야.Direct2D 성능

+0

Direct2D는 DirectX, AFAIK의 일부입니다. Direct3D11을 사용하고 있습니까? Direct2D는 Direct3D 위에 레이어로 만들어 졌으므로 더 빠를 가능성이 거의 없습니다. 그 많은 버텍스의 경우 버텍스/인덱스 버퍼가있는 Direct3D를 사용하는 것이 좋습니다. –

답변

1

Direct2D는 고화질 2D 그래픽을 그리기 위해 API를 사용하기 쉽지만 미세 조정 된 dx11 렌더링에 비해 성능면에서 비용이 많이 든다. 여기

참조 용 연신 당 프리미티브 비용

  • FillRoundedRectangle (1 개 화소 모서리) : 96
  • DrawRoundedRectancle 264
  • FillRectangle 6
  • DrawRectangle 190
  • FillEllipse : 204
  • DrawEllipse : 204
  • 라인 (이든/수직 크기 ...) : 46
  • 지어 : 312 -> 620

Direct2D의 지형지 물 레벨 (10) 장치에 내장하고, 내부 버퍼에 정점을 구축한다 (경우에만 곳 그것은 인스턴스를 사용하여 텍스트를 그리는 것입니다).

인스턴스 프리미티브를 배치해야하는 경우 인스턴스 드로어를 사용하면 상당한 성능 향상을 얻을 수 있습니다 (예 : 내 타임 라인 키 프레임 렌더링이 15ms에서 2ms로 변경되어 드로잉을 d2d에서 사용자 정의 dx11 인스턴스 셰이더로 교체).

Windows 8 인 경우 동일한 "뷰포트"에서 direct2d와 direct3d를 쉽게 섞어서 볼만한 가치가 있습니다. (모든 유익한 부분에 대해 dx11 및 구조화 된 버퍼 기반 인스턴스를 사용합니다. 텍스트 및 기타 작은 비트의 경우 direct2d 컨텍스트로 스왑합니다.

사용자 지정 지오메트리 (특히 합리적으로 높은 다각형 수)를 그리려면 Direct3D11을 사용하는 것이 가장 좋습니다. 완전히 설계되었으므로 Direct3D11을 사용하는 것이 가장 좋습니다.