원격 세션에서 로컬 전환 후 Fullscreen 설정 시 LogD3D11RHI: Error: IDXGISwapChain::SetFullscreenState returned 887a0004, unknown error status. 에러 로그 출력 FullScreen 실패 및 히칭

원격에서 프로세스 실행 후 로컬로 접속 전환한 뒤 스크린 모드 및 해상도 변경시 GetDisplayModeList 함수가 가능한 해상도를 반환하지 못하여

IDXGIAdapter1를 임시로 생성하여 가능한 모니터 해상도를 반환받는 방식으로 우회하였는데요

이렇게 동작시키니 전체화면모드로 전환시에

SwapChain->SetFullscreenState가 에러를 반환하며 제목과 같은 현상이 발생하여 해결 가능한 방법이 있는지 문의 드립니다

[Attachment Removed]

안녕하세요.

답변을 위해 몇 가지 질문을 드리고자 합니다.

  1. 질문에서 원격 세션은 Remote Control API이나 Remote Session 등을 이용하여 다른 장치에서 원격으로 컨트롤하는 것인가요?
  2. 원격 세션에서 로컬로 전환한다는 것은 원격으로 컨트롤하고 있던 장치에서 연결을 해제하고 자체 프로세스를 실행한다는 것인가요?

관련 작업 흐름이나 재현 방법 등을 알려주신다면 해당 이슈에 대해 답변을 드릴 수 있을 것으로 생각합니다.

감사합니다.

[Attachment Removed]

안녕하세요.

현재 언리얼 엔진 DirectX 11에서 원격 데스크탑 연결로 인한 장치 변경에 대한 예외 처리는 없는 것으로 확인되며, DirectX 12에서도 전체 화면 전환 실패 시 다시 창 모드로 전환되는 처리만 추가되어 있는 것으로 확인됩니다.

해당 프로그램 사용 시 원격에서 로컬로 전환할 때 출력 장치가 제거되면서 어댑터에 해당하는 출력 장치가 유효하지 않아 GetDisplayModeList 함수 및 전체 화면 전환 등에서 문제가 생기는 것으로 확인되며, 이슈 해결이 필요한 경우 장치 변경 시 윈도우 디바이스 변경 메시지를 받는 방법 등을 통해 로컬로 전환된 컴퓨터가 사용하고 있는 어댑터와 출력 장치에 맞게 RHI를 초기화하도록 엔진 코드를 수정할 필요가 있어 보입니다.

원격 데스크탑 연결 프로그램의 경우 Microsoft Remote Display Adapter 출력 장치가 생성되어 질문과 같은 상황에서 예기치 않은 문제가 발생할 수 있으므로 다른 원격 제어 프로그램을 사용해보시는 것을 권유드립니다.

감사합니다.

[Attachment Removed]

안녕하세요.

우선 !::GetSystemMetrics(SM_REMOTESESSION)을 통해 현재 리모트 세션인지 확인할 수 있으며, 리모트 세션이 종료된 경우 렌더링 스레드를 종료하고 사용 중인 자원(RenderResource, RHICommandList 등)을 정리 및 RHI 해제 후 다시 RHI를 초기화하는 과정이 필요합니다.

RHI.h 파일 및 FEngineLoop::Exit 함수와 FEngineLoop::PreInit 함수 등을 참고하시면 수정에 도움이 될 것으로 생각하며, -d3ddebug 옵션을 설정하여 실행하면 DXGI_ERROR_INVALID_CALL 오류에 대한 더 자세한 정보를 얻을 수 있습니다.

현재 언리얼 엔진에서는 리모트 세션 변경에 따라 별도 작업을 수행하지 않기 때문에 해당 작업을 추가하는데 많은 과정이 필요할 수 있으며, VNC 등 다른 원격 제어 프로그램을 사용하여 문제를 우회할 수 있을 것으로 기대합니다.

감사합니다.

[Attachment Removed]

  1. 윈도우의 원격 데스크톱 연결 프로그램을 이용하여 원격접속한 후 프로세스를 실행하였습니다
  2. 프로세스를 종료하지 않은 상태에서 원격 연결을 해제하고 직접 데스크톱에서 로그인하여 이어서 해상도 및 창모드를 변경한것입니다
  3. 질문에는 길게 작성햐였지만 원격 접속으로 프로세스 실행 후 로컬로 접속 변경하였을 때 전체화면모드가 실패하는데 해결 가능한 방법이 있는지 문의입니다
    [Attachment Removed]

‘컴퓨터가 사용하고 있는 어댑터와 출력 장치에 맞게 RHI를 초기화하도록 엔진 코드를 수정할 필요가 있어 보입니다.’

이거에 맞는 수정 가이드를 받을 수 있을까요?

질문의 목적이 이슈를 해결하기 위함이라 재 문의 드립니다

[Attachment Removed]