WPF가 하드웨어 또는 소프트웨어 렌더링을 사용하고 있는지 어떻게 결정합니까?

StackOverflow https://stackoverflow.com/questions/149763

  •  02-07-2019
  •  | 
  •  

문제

다양한 플랫폼에서 WPF 응용 프로그램을 벤치마킹하고 있으며 WPF가 하드웨어 또는 소프트웨어 렌더링을 사용하고 있는지 쉽게 결정할 수있는 방법이 필요합니다.

나는 이것을 결정하라는 전화를 기억하는 것 같지만 지금 당장 내 손을 얹을 수는 없습니다.

또한 하나의 렌더링 파이프 라인을 다른 렌더링 파이프 라인을 강요하는 쉬운 코드 기반 방법이 있습니까?

도움이 되었습니까?

해결책

RenderCapability.tier를 확인하십시오

[업데이트]

  • rendercapability.ispixelshaderversionsupported - 지정된 픽셀 셰이더 버전이 지원되는지 여부를 나타내는 값을 가져옵니다.
  • rendercapability.isshadereffectsoftSwarerenderingsupported - 시스템이 소프트웨어에서 비트 맵 효과를 렌더링 할 수 있는지 여부를 나타내는 값을 얻습니다.
  • RenderCapability.Tier - 현재 스레드의 렌더링 계층을 나타내는 값을 가져옵니다.
  • RenderCapability.tierChanged - 현재 스레드의 디스패처 개체에 대해 렌더링 계층이 변경 될 때 발생합니다.

Rendercapability.Tier >> 16

  • 렌더링 티어 0 - 그래픽 하드웨어 가속이 없습니다. DirectX 버전 레벨은 버전 7.0보다 작습니다.
  • 렌더링 계층 1 - 부분 그래픽 하드웨어 가속도. DirectX 버전 레벨은 버전 7.0보다 크거나 동일하며 버전 9.0보다 적습니다.
  • 렌더링 계층 2 - 대부분의 그래픽 기능은 그래픽 하드웨어 가속도를 사용합니다. DirectX 버전 레벨은 버전 9.0보다 크거나 동일합니다.

다른 팁

.NET 4.0은 코드에서 소프트웨어 렌더링을 강제로 제공하는 기능을 제공합니다.

public partial class App : Application 
{    
    protected override void OnStartup(StartupEventArgs e)    
    {         
        if (WeThinkWeShouldRenderInSoftware())            
            RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly;    
    }
}

보다 이 게시물 자세한 내용은.

를 기반으로 렌더링 티어 링크, 여기에 몇 가지 코드가 있습니다.

        logger.InfoFormat("WPF Tier = {0}",RenderCapability.Tier / 0x10000);
        RenderCapability.TierChanged +=
            (sender, args) => logger.InfoFormat("WPF Tier Changed to {0}",
                                                RenderCapability.Tier / 0x10000);

나는 여전히 이것을 테스트하고 작업하고 있습니다. 내가 찾은 것에 대한 향후 편집/답변을 참조하십시오.

어쩌면 다음은 질문의 두 번째 부분에 도움이 될 수 있습니다. 즉, 하나의 렌더링 파이프 라인을 다른 사람보다 강요 할 수 있습니다.

하드웨어 가속을 비활성화하고 소프트웨어 렌더링이 항상 발생하도록 레지스트리 설정을 변경할 수 있습니다. 우리는 종종 이것을 사용하여 우리가보고있는 특정 문제가 비디오 드라이버와 관련이 있는지 확인합니다. 내가 이것에 대해 말하는 것의 예로서 WPF 포럼 게시물.

그래도 여기에 주목해야 할 분명한 점은 ... 이것이 영향을 미친다는 것입니다. 모두 WPF 응용 프로그램은 실제로 테스트 목적으로 만 사용해야합니다.

하드웨어 가속을 비활성화하려면 :

[HKEY_CURRENT_USER\Software\Microsoft\Avalon.Graphics]
"DisableHWAcceleration"=dword:00000001

하드웨어 가속을 활성화하려면 :

[HKEY_CURRENT_USER\Software\Microsoft\Avalon.Graphics]
"DisableHWAcceleration"=dword:00000000

이것을 확인하십시오 MSDN 링크 더 많은 정보를 위해서.

또는 사용하십시오 프로파일 링 도구...

SW 렌더링 레거시 비트 맵 효과를 사용하는 대상 응용 프로그램 요소를 착색하기 위해 새 확인란이 추가되었습니다.

두 번째 답변에 동의하지만 앱이 실제로 HW 렌더링 된 경우 HW 렌더링을 사용하여 기계가 실행할 수있는 능력에 대해 말합니다.

캔버스를 사용하여 간단한 앱을 만들었고 Rotatetransform으로 사각형을 회전시키는 것은 HW 렌더링 된 응용 프로그램의 CPU를 많이 사용합니다. 그것과 'rendercapability.tier'값은 2이므로 HW 기능이 충분합니다.

그렇다면 왜 그렇지 않습니까?

당신의 질문의 후반부에 응답하기 위해, 내가 한 방향으로 강제로 강요 할 방법은 없습니다. 하드웨어 렌더링은 사용 가능한 경우 자동으로 사용됩니다. 그렇지 않으면 소프트웨어입니다.

소프트웨어 모드에서 테스트 해야하는 경우 낮은 사양 시스템을 사용하거나 원격 데스크탑을 사용하여 다른 컴퓨터에서 실행되는 응용 프로그램을보아야합니다. 그러나 성능/프레임 속도의 감소와는 별도로, 둘 사이의 외관에는 눈에 띄는 차이가 없어야합니다. RenderCapability 클래스를 사용하여 애니메이션이나 성능에 유리한 효과와 같은 것들을 비활성화 해야하는지 확인하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top