문제

DirectX 응용 프로그램을 작성할 때 다음을 통해 사용자가 응용 프로그램을 일시 중지하도록 지원하는 것이 바람직합니다. Alt- 그런 면에서는 빠르고 오류 없는.이를 보장하기 위한 최선의 방법은 무엇입니까?해결해야 할 사항은 다음과 같습니다.

  1. 응용 프로그램이 Alt 키를 누른 채 빠져나갔을 때와 다시 돌아왔을 때를 감지하는 가장 좋은 방법입니다.
  2. 사용자가 Alt-Tab을 누를 때 손실되는 DirectX 리소스와 이에 대처하는 최선의 방법.
  3. Alt-Tab 지원을 위해 애플리케이션 아키텍처에서 해야 할 주요 작업과 피해야 할 작업입니다.
  4. 위에 적용되는 주요 DirectX 버전 간의 중요한 차이점.

흥미로운 트릭과 정보도 듣기 좋습니다.

도움이 되었습니까?

해결책

제 답변의 목적상 귀하가 C++를 사용하고 있다고 가정하겠습니다. 그러나 C#을 사용할 여유가 있다면 XNA(http://creators.xna.com/)는 이러한 모든 문제를 처리해 주는 훌륭한 게임 플랫폼입니다.

1]

이 문서는 창이 포커스를 잃거나 얻는 시기를 감지하기 위한 창 프로시저의 Windows 이벤트에 유용합니다. 기본 창에서 이를 처리할 수 있습니다. http://www.functionx.com/win32/Lesson05.htm.또한 여기에서 WM_ACTIVATEAPP 메시지를 확인하세요. http://msdn.microsoft.com/en-us/library/ms632614(VS.85).aspx

2]

3]

나는 Alt-Tab을 절대로 비활성화하지 않을 것입니다.사용자가 다른 작업을 원하기 때문에 Alt 키를 누른 상태에서 애플리케이션이 활성화되지 않은 동안 CPU 로드를 최소화하고 싶을 수도 있습니다. 그러면 애플리케이션을 완전히 일시 중지하거나 초당 렌더링되는 프레임을 줄일 수 있습니다.응용 프로그램이 최소화되면 물론 아무것도 렌더링할 필요가 없습니다.네트워크 게임에 대해 생각해 본 후 가장 좋은 해결책은 초당 렌더링되는 프레임 수와 처리되는 네트워크 패킷의 양을 줄여야 한다는 것입니다. 심지어 게임이 다시 활성화될 때까지 들어오는 많은 패킷을 버려야 할 수도 있습니다.

4]

솔직히 저는 가능하다면 DirectX 9.0c(또는 대상 운영 체제를 Vista 이상으로 제한하려는 경우 DirectX 10)를 고수하겠습니다. :)

마지막으로 DirectX SDK에는 수많은 튜토리얼과 샘플이 있습니다. http://www.microsoft.com/downloads/details.aspx?FamilyID=24a541d6-0486-4453-8641-1eee9e21b282&displaylang=en

다른 팁

전체 화면 DirectX 장치를 전혀 사용하지 않음으로써 해결했습니다. 대신 작업 표시 줄을 숨기도록 가장 상단 플래그가있는 전체 스크린 창을 사용했습니다. 그것에서 abt 탭하면 플래그를 제거하고 창을 최소화 할 수 있습니다. 텍스처 리소스는 창으로 살아남습니다.

그러나이 접근법은 '잠금 화면', CTRL+ALT+DELETE, 원격 데스크톱 연결, 사용자 스위칭 또는 이와 유사하여 장치 손실 이벤트를 처리하지 않습니다. 그러나 그것들은 매우 빠르거나 효율적으로 처리 할 필요가 없습니다 (적어도 우리 응용 프로그램의 경우였습니다).

모든 심각한 D3D 앱은 다양한 이유로 발생할 수 있는 분실된 장치를 처리할 수 있어야 합니다.

Vista의 DX10에는 새로운 "시간 초과 감지 및 복구" 기능이 있어 내 경험상 그래픽 장치를 재설정하면 앱 장치가 손실되는 일이 흔해졌습니다.이는 운전자가 성숙해짐에 따라 개선되는 것처럼 보이지만 어쨌든 이를 처리해야 합니다.

DX8 및 9 (및 10?)에서 D3dPool_Managed를 사용하여 리소스 (정점 및 인덱스 버퍼 및 텍스처)를 작성하면 손실 된 장치를 통해 지속되며 다시로드 할 필요가 없습니다. 이는 시스템 메모리에 저장되고 DX 런타임 복사가 비디오 메모리에 자동으로 저장되어 있기 때문입니다. 그러나 복사로 인한 성능 비용이 있으며, 이는 급속하게 변경되는 정점 데이터에 권장되지 않습니다. 물론 속도 문제가 있는지 확인하기 위해 먼저 프로필을 제공합니다 :-)

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