텍스처 공유(Texture Share) 는 GPU 메모리에 저장된 데이터를 보관하여 CPU와 CPU의 값비싼 메모리 복사 연산을 바이패스함으로써 프로세스 간에 GPU 데이터를 효율적으로 전송합니다.
공유 가능한 데이터에는 GPU 텍스처, 투영 및 카메라 매트릭스, 뎁스 버퍼가 포함됩니다. 텍스처 공유는 애플리케이션 간의 일관성을 확보하기 위해 동기화 메커니즘과 스레드 배리어를 지원합니다.
텍스처 공유는 다음 방법을 통해 프로젝트에 통합할 수 있습니다.
-
DirectX11 및 DirectX12와 통합된 C++ SDK
-
블루프린트
-
nDisplay 지원

외부 애플리케이션과 뷰포트를 공유하는 언리얼 엔진의 예시입니다. 애플리케이션은 뷰포트를 회전하는 큐브의 텍스처로 사용하고 있습니다.
샘플 프로젝트
샘플 C++ 프로젝트는 Engine/Source/Programs/TextureShare/Samples/ThirdParty 폴더에 언리얼 엔진 소스 코드와 함께 저장되어 있습니다. 텍스처 공유를 통해 DirectX11과 DirectX12를 모두 사용하는 방법에 대한 예시가 나와 있습니다. 텍스처 공유를 사용하는 방법에 대한 자세한 내용은 퀵스타트를 참고하세요.
동기화 정책
GPU 데이터를 공유하기 위해서는 텍스처 공유에서 이루어지는 모든 인터랙션에 전송자와 수신자가 있어야 합니다. 애플리케이션이 데이터를 주고 받을 때 전송자와 수신자는 전송 및 수신 작업에 미러링된 우선순위를 사용해야 합니다.
예를 들어 언리얼 엔진이 전송자이고 서드 파티 DirectX 애플리케이션이 수신자인 경우는 다음과 같습니다.
-
언리얼 엔진은 전송을 실행한 다음 수신을 실행합니다.
-
서드 파티 애플리케이션은 수신을 실행한 다음 전송을 실행합니다.
텍스처 공유는 차단 행동을 제어하기 위해 데이터 교환의 여러 단계에서 동기화를 위한 다양한 옵션을 제공합니다. 다음 섹션에서는 세 가지 단계를 설명합니다.
연결 동기화 모드
연결 동기화 모드(Connection Sync Mode) 는 클라이언트와 서버가 연결될 때 동기화 정책을 정의합니다. 다음 표에는 이러한 정책이 설명되어 있습니다.
옵션 | 설명 |
---|---|
디폴트(Default) | 이 모드는 모듈의 글로벌 세팅을 사용합니다. 디폴트 연결 동기화 정책은 다음과 같습니다.
|
없음(None) | 이 모드는 원격 프로세스가 텍스처 공유 메커니즘에 연결될 때 차단하지 않습니다. |
SyncSession | 이 모드는 원격 프로세스가 성공적으로 연결되고 데이터를 교환할 준비가 될 때까지 차단합니다. |
프레임 동기화 모드
프레임 동기화 모드(Frame Sync Mode) 는 생성된 프레임을 위한 동기화 정책을 정의합니다. 다음 표에는 이러한 정책이 설명되어 있습니다.
옵션 | 설명 |
---|---|
디폴트 | 이 모드는 모듈의 글로벌 세팅을 사용합니다. 디폴트 프레임 동기화 정책은 다음과 같습니다.
|
없음 | 이 모드는 원격 프로세스로 프레임을 동기화하지 않으며 프레임을 건너뛸 수 있습니다. |
FrameSync | 이 모드는 두 애플리케이션이 프레임을 건너뛰지 않고 교환하도록 합니다. 이 모드는 프레임 인덱스를 프로세스마다 일관되게 유지합니다. |
텍스처 동기화 모드
텍스처 동기화 모드(Texture Sync Mode) 는 텍스처 공유 연결 메커니즘이 설정되었을 때 데이터를 읽고 쓰는 작업의 순서를 정의합니다. 다음 표에는 이러한 정책이 설명되어 있습니다.
옵션 | 설명 |
---|---|
디폴트 | 이 모드는 모듈의 글로벌 세팅을 사용합니다. 디폴트 텍스처 동기화 정책은 다음과 같습니다.
|
없음 | 이 모드는 페어링 텍스처를 건너뛰며 원격 프로세스에서 읽기 작업 전의 쓰기 작업을 차단하지 않습니다. |
SyncRead | 이 모드는 페어링 텍스처를 건너뛰지만 읽기 전에 원격 프로세스에서 쓰기 작업이 끝날 때까지 대기하는 것을 차단합니다. |
SyncPairingRead | 이 모드는 텍스처 페어링 동안 차단하며 읽기 전에 원격 프로세스에서 쓰기 작업이 끝날 때까지 대기하는 것을 차단합니다. |
nDisplay와 함께 텍스처 공유 사용하기
nDisplay는 뷰포트를 공유하고 수신한 텍스처를 표시하기 위해 텍스처 공유를 지원합니다. 뷰포트의 ID 에서 공유된 뷰포트 텍스처에 액세스할 수 있습니다.
다른 애플리케이션에서 수신한 텍스처를 nDisplay 뷰포트에 표시하려면 nDisplay의 포스트 프로세싱을 사용하여 텍스처 공유 항목을 정의하고 이를 nDisplay 창에 할당해야 합니다.
nDisplay에서 텍스처를 공유하고 수신하는 방법에 대한 자세한 설명은 nDisplay 환경설정 파일 레퍼런스를 참고하세요.
알려진 제한 사항
텍스처 공유는 현재 베타 버전입니다. 텍스처 공유 기능에는 다음과 같은 제한 사항이 있습니다.
-
현재 텍스처 공유 SDK는 DirectX11과 DirectX12만 지원합니다.
-
텍스처 공유 항목 이름의 최대 길이는 128자입니다.
-
프로세스당 허용되는 최대 텍스처 공유 항목의 수는 100개입니다.
-
텍스처 공유 항목당 허용되는 최대 텍스처의 수는 10개입니다.
텍스처 공유 항목은 DirectX 텍스처 및 투영, 카메라, 회전 매트릭스 등의 보조 버퍼에 대한 포인터를 가지고 있는 컨테이너입니다.