2010-05-06 7 views
1

Je suis aux prises avec ce problème pendant une semaine .. J'espère que je peux dire suffisamment clair problème :dispositif de mode VMR9 renderless réinitialisation problème

Alors, je configurer mon allocateur/présentateur et personnalisée dans InitializeDevice() I créer les textures pour VMR9

Ensuite, VMR9 appelle ma fonction PresentImage() chaque fois qu'il a un nouveau cadre .

Je montre rendre cette texture sur un quad et Present(). Si Present() renvoie D3DERR_DEVICELOST puis je PostMessage() à mon WndProc() pour signaler une réinitialisation de périphérique.

Ensuite, mon WndProc() appelle ResetDevice() sur mon objet personnalisé. ResetDevice() libère toutes les ressources DEFAULT_POOL et appelle Reset() sur l'appareil. Maintenant, nous allons faire une pause pour un moment


À ce stade Direct3d me donne une erreur me disant que je tiens encore références à certaines surfaces DEFAULT_POOL ... Ce que je suis sûr que je ne pas parce que je suis libérant la seule texture que j'ai allouée. Ce problème est un mystère pour autant que je sais ... Il y a de nombreux forum sans réponse messages à ce sujet datant de 2003, même ..


Laissez les voies de changement de. Dans ce message de forum

http://www.eggheadcafe.com/software/aspnet/29909616/i-did-some-more-e ...

il est dit que vous devez arrêter le graphique, débranchez toutes les broches de la VMR9, réinitialiser l'appareil puis reconnectez et exécuter le graphique à nouveau.

Quand je fais ce que je reçois une autre plainte Direct3d: Direct3D9: (erreur): Echec de créer une texture Direct3D9: (erreur): largeur de texture est plus grande que ce que le dispositif supports. CreateTexture a échoué.

J'ai retracé le problème à un moment donné où je vois que, dans une fonction profonde VMR9 calcule la puissance de 2 suivante de la largeur avant créer des textures (en dehors de ceux que je crée avec succès dans mon A/P). Et tout en traçant je l'ai compris:

Ma largeur vidéo est 640. La puissance de 2 suivante est de 640 1024. Et je vois que cette valeur devient en quelque sorte 10240. Bien que je ne mets même pas la largeur d'allocation à 1024. Je viens de passer 640 car ma carte vidéo ne nécessite pas de tailles de texture pow2.

C'est là que je coincé ..

Est-ce qu'il ya quelqu'un qui sait quelque chose sur la réinitialisation/rafraîchissement du dispositif avec VMR9 ?? S'il vous plaît aider.

Merci d'avance.

Fatih

Répondre

0

Puisque vous avez un Je suppose que vous êtes allocateur personnalisé/présentateur en utilisant IVMRSurfaceAllocatorNotify9 :: AllocateSurfaceHelper(); et cette méthode pourrait potentiellement attribuer plusieurs surfaces, êtes-vous sûr que tous sont libérés avant que l'appareil soit réinitialisé?

Questions connexes