2014-03-05 3 views
0

다른 버전의 두 가지 다른 d3d 장치간에 표면을 공유하려고합니다. 하나는 d3d9이고 다른 하나는 d3d9Ex 이상입니다.D3D9 및 D3D9Ex 윈도우 7의 표면 점유율

link에서 확인할 수있는 MSDN 설명서를 기반으로합니다.

이제 장치 또는 프로세스간에 Direct3D 리소스를 공유 할 수 있습니다. 이것은 텍스처, 정점 버퍼, 인덱스 버퍼 또는 표면 (렌더 타겟, 심도 스텐실 버퍼 또는 화면이없는 평평한 표면)을 포함하는 모든 Direct3D 리소스에 적용됩니다.

은 또한 당신이 공유 표면을 지원하지 않는 another link

에서 너무 Direct3D를 10.0, 다이렉트 3D 9C, 세 Direct3D의 런타임을 할 수없는 상태 MSDN 설명서에 따라. 시스템 메모리 복사본은 GDI 또는 DXGI 기반 API와의 상호 운용성을 위해 계속 사용됩니다. 제공

HANDLE SharedHandle = NULL; 

IDirect3DTexture9 *d3d9Tex; 
pD3D9Dev->CreateTexture(Width, Height, 1, D3DUSAGE_RENDERTARGET, Format, D3DPOOL_DEFAULT, &d3d9Tex, &SharedHanlde); 
if(FAILED(hr)) 
{ 
    LOG("failed %s %s", GetD3DErrorString(hr), CNGetErrorString(GetLastError())); 
} 

IDirect3DTexture9 *d3d9ExTex; 
pD3D9DevEx->CreateTexture(Width, Height, 1, D3DUSAGE_RENDERTARGET, Format, D3DPOOL_DEFAULT, &d3d9ExTex, &SharedHanlde); 
if(FAILED(hr)) 
{ 
    LOG("failed %s %s", GetD3DErrorString(hr), CNGetErrorString(GetLastError())); 
} 

:

Direct3D9: (ERROR) :Device is not capable of sharing resource. CreateTexture fails. 

CreateRenderTarget이 같은 결과를 얻을 수 확인하려면

따라서 코드, 그것을 자신을 시도하는 것입니다.

많은 결과에 실망했다. 나의 질문은, 리소스 공유가 d3d9에서 전혀 작동하지 않는다는 것인가 아니면 내가해야만하는 것을 놓친 것인가?

답변

2
  1. Direct3D를은 Direct3D를 9를 포함, 일반적인 이름, Direct3D를 9EX, Direct3D를 (10)과 Direct3D를 11 ... 문서는 Direct3D의 자원이 지금 절대적으로 당신이 할 수있는, 즉 너무 나쁘지 않아, 공유 할 수 있습니다 말했다 Direct3D 10.1 및 Direct3D 11

  2. Direct3D 9에서 서페이스 공유를 할 수 없으므로 다음과 같이 매우 명확하게 설명되어 있습니다.

Direct3D를 10.0, 다이렉트 3D 9C, 세 Direct3D를 런타임은 공유 표면을 지원하지 않습니다. 시스템 메모리 복사본은 GDI 또는 DXGI 기반 API와 상호 운용성을 위해 계속 사용됩니다.

주의 깊게 this page를 읽는다면, 당신은 쉽게 결론을 얻을 수 있습니다 :

  • Direct3D를 11,
  • Direct3D를 9Ex 지원 동기화 표면 공유를 공유 Direct2D의 및 Direct3D를 10.1 지원 동기 표면.
  • Direct3D 10.0, Direct3D 9c 및 이전 버전의 Direct3D 런타임은 표면 공유를 지원하지 않습니다.
+0

감사합니다. 그 쪽이 맞는 거 같아요. 나는 초기 문서화가 d3d9ex에 대해 이야기하고 있었기 때문에 표면 공유가 d3d9와 d3d9ex 사이에 있다고 생각했다. – vgrimmer

관련 문제