문제

많은 벡터 그래픽을 사용하는 Windows CE 응용 프로그램이 있으며 장소는 매우 느립니다. 나는 현재 깜박임 무료 새로 고침을위한 비트 맵을 통해 렌더링을 위해 GDI를 사용하고 있습니다. 일반적으로 큰 3D 맵의 일부에 윈도우가 있습니다. 일부 장치 (예 : 166MHz SH4)에서는 큰 데이터 세트의 경우 3-5 초의 새로 고침 시간이 느려집니다. 내 질문은 이것입니다.

  • Windows Mobile과 Win32에서 그래픽 작업의 상대적인 속도와 비교 한 사람이 있습니까? 다른 방법으로, GDI 호출 만보고 있다고 가정 할 때 Wince 버전에 적용 가능한 Win32 버전의 소프트웨어에서 프로파일 링 결과를 얻습니다.

  • Wince 플랫폼 (C ++ App)에서 온보드에 프로파일 링을 시도한 사람은 그렇습니다.

  • Windows CE에서 드로잉 속도를 향상시키는 방법을 알고있는 사람이 있습니까? 나는 현재 a의 피드백에 따라 FastGraph를보고 있습니다 이전 질문, 그러나 이것은 약간 장기 솔루션입니다. 나쁘고 그 모든 것, 나는 다가오는 릴리스를 위해 구현하기에 더 빠른 것을 찾고 있습니다.

도움이 되었습니까?

해결책

Windows CE 6.0 이전 - 따라서 모든 Windows Mobile/Windows Embedded Handheld 버전을 포함하여 그래픽 코드는 다른 프로세스 (gwes.exe)에서 구현되었으며 GDI 호출을 할 때마다 크로스 프로세스 호출이 필요합니다. CE 5.X 크로스 프로세스 호출은 데스크탑보다 훨씬 저렴하지만 일반 기능 호출 또는 커널 모드로의 호출보다 여전히 비쌉니다.

데스크탑에서 GDI는 NT 4.0 이후 커널 모드로 구현됩니다. 원래 NT 3.1에서는 CE 모델, 크로스 프로세스 호출과 같습니다. 크로스 프로세스 호출 또는 사용자/커널 모드 스위치의 오버 헤드를 완화하려면 Desktop GDI는 다른 펜 또는 브러시를 사용하는 등 큐를 플러시 해야하는 작업을 수행 할 때까지 사용자 모드 측면에서 작업을 배치합니다. 다른 것을 반환하는 레거시 기능 중 BOOL - 또는 버퍼가 가득 차 있거나 전화하여 명시 적으로 플러시합니다. GdiFlush.

Windows CE에는이 배치 기능이 없습니다. 모든 통화는 GWES 프로세스를 직접 호출하여 훨씬 느리게 만듭니다. 각 통화에서 가능한 한 많은 작업을 수행하여 완화 할 수 있습니다. 복잡한 라인이 필요한 경우 개별 Movetoex/Lineto 호출 대신 폴리 라인을 고려하십시오. 겹치는 객체를 렌더링하는 대신 각 픽셀 만 한 번만 만지고 유효하지 않은 영역을 사용하여 레인팅이 필요한 화면의 일부만 페인트하십시오 (사용하십시오. GetUpdateRgn 또는 GetUpdateRect 그러나 전화하기 전에 그렇게하십시오 BeginPaint,이 지역은 유효합니다).

CE 그래픽 가속 모델은 비트 블리트를 기반으로하는 상당히 기본입니다. Windows 2000 모델 데스크탑 장치 드라이버가 지원하는 더 큰 기능 세트를 지원하지 않습니다. 가속도를 사용할 수 있는지 여부는 하드웨어에 가속기 칩이 있는지 여부에 따라 다릅니다. 많은 장치가 응용 프로그램 프로세서에 내장 된 LCD 컨트롤러를 사용하여 일반적으로 가속도를 수행하지 않습니다.

배치를 비활성화하고 사용하여 데스크탑에서 CE의 동작을 시뮬레이션 할 수 있습니다. GdiSetBatchLimit 한계를 1로 설정하려면 SVGA 그래픽 드라이버를 사용하여 가속을 비활성화하십시오. Windows Vista 또는 Windows 7에서 Aero 환경을 사용하는 경우 GDI가 가속화되지 않으며 Windows 7이 새로운 비트 블릿 하드웨어 가속 기능을 추가했지만 모든 작업이 소프트웨어로 구현됩니다.

Windows CE 6.0에는 새로운 커널 및 프로세스 모델이있어 GDI를 데스크톱 Wind 여전히 배치가 없습니다.

다른 팁

나는 그래픽 측면에 대한 많은 지식이 없지만 경험을 통해 특정 하드웨어 관련 것들에 빠르기를 원한다면 "금속"에 가까울수록 더 빨리 얻을 수 있습니다 (그리고 더 어려워 질수록 더 어려워집니다! ). 그래서 당신은 사용을 살펴볼 수 있습니다 직접 그리기 또는 직접 3D (Altho 나는 그들이 D3D를 떨어 뜨리고 WM7의 OpenGl es로 넘어 가고 있다고 생각합니다). 게임 개발자가 사용하는 방식을 조사하고 싶을 수도 있습니다.

프로필 문제에 대해서는 찾지 못했지만 내 소유하다.

나는 이런 종류의 벤치마킹을 많이했으며 GDI 운영은 일반 Win32보다 Wince에서 느리지만 Wince 장치의 느린 프로세서에 비례하여 느립니다. 다시 말해, Wince에서 GDI를 사용함으로써 추가 성능을 얻지 못하는 것 같습니다.

죄송합니다. 마지막 두 질문에 대한 답이 없습니다.

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