2009-12-06 3 views
6

게임을 작성하고 중간에 일부 cutscenes 싶습니다. 윈도우 모드에서는 DirectShow 클래스가 완벽하게 작동하며 사용하기 쉽습니다. 그러나 게임이 전체 화면 일 때 DirectShow에 전체 화면 컷씬을 표시 할 수 없습니다.DirectShow IVideoWindow 및 Fullscreen - D3D Primary Surface에 쓸 수 있습니까?

기본적으로 D3D 장치를 초기화 할 때 IVideoWindow.put_Fullscreen (true)을 사용하는 경우에도 비디오를 표시 할 수 없습니다. DirectShow가 D3D Device로 전체 화면을 볼 수 없다고 생각합니다.

그래서 D3D 장치를 재생하는 동안 cutscene이 재생되고 다시 초기화됩니다. 이것은 꽤 잘 작동하는 것처럼 보이지만 DirectShow가 전체 화면을 재생할 때 내 애플리케이션의 메인 윈도우에서 포커스를 훔쳐 끝날 때 되돌릴 수없는 것처럼 보입니다. 그런 다음 DirectInput이 나중에 장치를 다시 가져 오지 못하게됩니다 ("Access Denied"오류 코드 제공). 취득하기 전에 SetForegroundWindow()를 시도했지만, 문제가 해결되지 않을 수도 있습니다.

어쨌든 긴 이야기는 짧습니다. 원하는 모든 것은 D3D 앱 중간에 전체 화면 컷씬입니다. 이를 위해 선호되는 방법이 있습니까? 내 D3D 기본 표면에 DirectShow 출력을 만들어서 할 수 있습니까? 나는 내가 가지고있는 문제를 해결할 것이라고 생각한다.

답변

2

비디오 믹싱 렌더러 9에 대한 사용자 정의 할당자를 만들고 싶습니다. 자신의 렌더러 필터를 만드는 것보다 훨씬 쉽습니다. 특히 D3D interop 용으로 제작되었습니다.

Windows SDK에 예제가 있습니다. 광산은 여기에 설치됩니다

C : \ 프로그램 파일 \은 Microsoft SDKs \ 윈도우 \ 7.0의 \ 샘플을 \ 멀티미디어 \ DirectShow를 \ VMR9 \ vmr9allocator 난 아무데도 내 DirectShow를 API 파일에서 "DumpFilter"를 참조하지 않는

+0

시간이 좀 걸렸지 만 참조하는 예를 발견했습니다 (Windows SDK에 있지만 DirectX SDK에는 없습니다 - 얼마나 이상한 지). 나는 그것을 오늘 밤 살펴보고 내가 알아낼 수 있는지 알아 보겠다. 내가 찾는 것 같아. – TrespassersW

+0

DirectShow (이름에도 불구하고)는 5 년 전이나 6 년 전 Windows SDK로 옮겨졌습니다. 처음 발견했을 때 혼란 스러웠습니다. 어쨌든 VMR9 할당자를 사용하면 특정 형식의 hw 비디오 가속을 얻을 수 있으며 hw 가속화 된 색상 공간 변환 및 디인터레이스가 가능합니다 ... ddd 표면에 렌더링하는 데 도움이되는 것은 물론이지) –

+0

그냥 ' d 팝업으로 돌아와 내가 지적한 견본 덕분에이 작업이 가능하다고 언급합니다. 다시 한번 감사드립니다. – TrespassersW

2

"DumpFilter"를보십시오. 이것을 사용하면 D3D 텍스처에 직접 쓰는 필터를 쉽게 작성할 수 있습니다. 또한 외부 COM 인스턴스화를 지원할 필요가 없습니다. 당신은 간단하게 클래스를 인스턴스화하여 사용할 수 있습니다. 응용 프로그램 외부에 노출 될 필요가 없습니다.

편집 : DumpFilter는 DirectShow API 예제 중 하나입니다.

+0

. 나는 DX9를 사용하고있다. DX10 것인가? – TrespassersW

관련 문제