2009-12-06 15 views
6

Bir oyun yazmak, ve ortadaki bazı cutscenes istiyorum. Pencereli modda, DirectShow sınıfları mükemmel çalışır ve kullanımı kolaydır. Ancak oyun tam ekran olduğunda, DirectShow'un tam ekran bir cutscene göstermesini sağlayamıyorum. Bir D3D Cihaz kurulmamıştır olduğundaDirectShow IVideoWindow ve Tam Ekran - D3D Birincil Yüzeyime yazabilir miyim?

Temelde, ben bile (doğru) IVideoWindow.put_Fullscreen ile görüntülemek için video almak mümkün değil. DirectShow'un D3D Cihazı ile tam ekran yapamayacağını tahmin ediyorum.

Yani, animasyonundan çaldığında benim D3D Aygıtı bırakmadan ve sonra tekrar reinitializing çalıştı. Bu oldukça iyi çalışıyor gibi görünüyor, ancak DirectShow tam ekran çalarken, o zaman uygulamanın ana penceresinden odak çalmak ve bittiğinde geri vermemek gibi görünüyor. Bu daha sonra DirectInput'ın daha sonra cihazı tekrar elde edememesine neden olur (bana bir "Erişim Reddedildi" hata kodu verir). Almadan önce SetForegroundWindow() denedim, ancak bu düzeltmez, bu yüzden sorun olmayabilir.

Neyse, uzun lafın kısası, tek istediğim benim D3D app ortasında tam ekran animasyonundan olduğunu. Bunu başarmanın tercih edilen bir yolu var mı? DirectShow çıkışını D3D ana yüzeyime takarak yapabilir miyim? Bu benim yaşadığım sorunları düzeltir diye düşünüyorum.

cevap

2

Sen Kendi işleyici filtre yapmak çok daha kolaydır Renderer 9. Karıştırma Video için özel bir ayırıcısı oluşturmak istiyorum ve bu özellikle D3D birlikte çalışma için yapılmış.

Windows SDK'de bir örnek var. Mine burada yüklenir:

C: \ Program Files \ Microsoft SDK'leri \ Windows \ v7.0 \ Örnekleri \ multimedya \ directshow \ VMR9 \ vmr9allocator yerde benim DirectShow API dosyasında "DumpFilter" görmüyorum

+0

Beni biraz aldı, ama atıfta bulunduğunuz örneği buldum (Windows SDK'daydı, fakat DirectX SDK'sında değil - ne kadar tuhaf). Bu gece bir bakacağım ve anlayabileceğimi göreceğim. Aradığım şey gibi geliyor. – TrespassersW

+0

DirectShow (ismine rağmen) Windows SDK 5 veya 6 yıl önce taşındı. İlk keşfettiğimde beni de karıştırdı. Neyse, VMR9 ayırıcıyı kullanmanın yararları, belirli formatlarda hw video hızlandırması elde edebiliyorsunuz, hw hızlandırılmış renk alanı dönüşümleri ve deinterlacing ... d3d yüzeyini oluşturmanıza yardımcı olduğunu söylemeyin;) –

+0

Sadece düşündüm ' d geri döndüm ve bu çalışmayı aldığımı, bana işaret ettiğin örnek sayesinde. Tekrar teşekkürler. – TrespassersW

2

"DumpFilter" a bakın. Bunu kullanarak, doğrudan D3D dokusuna yazacak bir filtre yazabilirsiniz. Ayrıca, unutmayın ki, harici com örneğini desteklemeniz gerekmez. Basit örnek sınıf ve bunu kullanabilirsiniz. Bu ... senin uygulamanın dışına maruz

Edit ihtiyacı yoktur: DumpFilter DirectShow API örneklerinden biridir.

+0

. DX9 kullanıyorum. Bu bir şans eseri DX10 meselesi mi? – TrespassersW