ALT-TAB이 ‘불쾌’/ 느리게 / 불규칙하게되는 원인은 무엇입니까? AGES가 스위치를 껐다가 다시

이것은 개방형 질문에 대한 것이지만 문제를 피하는 방법에 대한 좋은 통찰력을 얻고 싶습니다.

Windows에서 게임을 할 때 ALT-TAB을 사용하고 싶을 수도 있습니다. 어떤 게임에는 문제가없고, 다른 게임은 그렇게 쉬운 일이 아닙니다. AGES가 스위치를 껐다가 다시 켜야 할 수도 있습니다.

이 행동의 원인이 무엇인지 궁금합니다. 이것이 DirectX 또는 OpenGL 일입니까? 화면 설정이 변경 될 때마다 게임이 ‘영리한’캐시를 캐싱 / 와이 핑하여 발생합니까? (내가 ALT-TAB 할 때 어떤 종류의 신호를 얻는다고 가정합니까?)

나는 내 자신의 문제는 없지만 피해야 할 것과 어떤 ‘영리한’트릭이 이런 유형의 끔찍한 고객 경험을 유발할 수 있는지 알고 싶습니다.



답변

경우에 따라 ALT-TAB으로 인해 DirectX 장치가 손실 될 수 있습니다. 장치가 손실되면 모든 GPU 리소스 (버텍스, 텍스처, 쉐이더 등)가 유효하지 않은 것으로 간주되어 다시 사용할 수 없습니다. MSDN 참조 here .

이러한 손실 된 리소스는 해제 한 다음 장치를 복원 할 때 다시 만들어야합니다. 대부분의 게임에서 이러한 리소스를 복원하는 경우 디스크에서 많은 데이터를 다시로드해야합니다. 종종 게임 / 레벨 시작시와 동일한로드 절차가 필요합니다.

이것을 피하기 위해 무엇을 할 수 있습니까?

  • 데이터 캐시를 램에 보관하여 GPU로 다시 전송하는 것이 HD에서 다시로드하는 것보다 빠릅니다. DirectX에서 자동으로 수행하는 방법이 있다고 생각합니다.
  • 새 버전의 DirectX를 사용하십시오. 이 인용문 ( source )은 DirectX 9Ex의 MSDN에서 발췌 한 것입니다.

장치는 이제 두 가지 상황에서만 손실됩니다. 하드웨어가 중단되어 재설정되고 장치 드라이버가 중지 된 경우 하드웨어가 중단되면 ResetEx를 호출하여 장치를 재설정 할 수 있습니다. 하드웨어가 중단되면 텍스처 메모리가 손실됩니다.


답변

Direct3D 에서 전체 화면 창에서 ALT-TAB을 누르면 장치가 손실 될 수 있습니다. 이 경우 리소스를 해제 및 복원하고 장치를 재설정해야합니다. 게임의 복잡성이나 개발자의 게으름 (hi Valve!)에 따라 올바르게 수행하기가 어려울 수 있습니다. 드라이버가 OpenGL 컨텍스트를 유지할 책임이 있기 때문에 OpenGL이 동일한 문제로 고통받지 않는다고 생각하지만 확실하지 않습니다.

MSDN 및 기타 소스의 유용한 링크를 포함 하는 DirectX 앱의 ALT-TAB 지원 모범 사례에 대한 StackOverflow에 대한 질문이 있습니다.


답변

사용 가능한 프리 램 양이 될 수 있습니다. 너무 낮 으면 게임이 실행될 때 Windows는 게임을 위해 대부분의 서비스를 스왑 영역에 숨 깁니다 (즉, RAM에로드 된 대부분의 데이터를 대신 하드 드라이브의 특수 영역에 넣습니다). 가용 한 RAM 공간을 최대한 확보해야합니다.

그런 다음 게임에서 Windows로 Alt + Tab을 사용하려면 작동하기 위해 이러한 서비스를 RAM에로드해야하므로 RAM에서 게임 데이터를 가져와 스왑에 저장하고 Windows 데이터를 가져옵니다. RAM으로의 스왑.

아시다시피 하드 드라이브에 쓰려면 RAM에 비해 AGES가 필요할 수 있습니다. 무거운 게임을 그만두었을 때도 마찬가지입니다. 그렇기 때문에 게임과 창 모두에 충분한 RAM 공간을 확보하는 것이 더 편할 수 있습니다.