2010-03-18 6 views
0

Ceci est une sorte de question COM à faire avec DirectX. Donc, à la fois ID3DXSprite et ID3DXFont et un tas d'autres objets ID3DX * nécessitent que vous appeliez OnLostDevice() lorsque le périphérique d3d est perdu ET OnResetDevice() lorsque le périphérique est réinitialisé. Qu'est-ce que je veux faire est de maintenir un tableau de tous les objets ID3DX * et simplement appeler OnResetDevice() et OnLostDevice() sur chaque fois que le périphérique est perdu ou réinitialisé.Appels génériques à OnResetDevice() et OnLostDevice()

Cependant, je n'arrive pas à trouver une BASE CLASS pour les classes ID3DX * ... elles semblent toutes hériter COMUally de IUnknown.

Existe-t-il un moyen de le faire ou dois-je maintenir des tableaux séparés de pointeurs ID3DXFont *, de pointeurs ID3DXSprite *, etc.?

Répondre

1

Il n'y a pas de classe de base commune, désolé.

peut utiliser plusieurs héritages et modèles pour trier ce que vous voulez. Quelque chose comme ça (non testé, mais nous espérons que vous aurez l'idée) ...

#include <d3dx9.h> 
#include <vector> 

using namespace std; 

class DeviceLostInterface 
{ 
public: 
    virtual void onLost() = 0; 
    virtual void onReset() = 0; 
}; 

template <typename Base> 
class D3DXWrapper : public Base, public DeviceLostInterface 
{ 
public: 
    virtual void onLost() { Base::OnLostDevice(); } 
    virtual void onReset() { Base::OnResetDevice(); } 
}; 


int main() 
{ 
    // Wouldn't be set to null in real program 
    D3DXWrapper<ID3DXSprite>* sprite = 0; 
    D3DXWrapper<ID3DXFont>* font = 0; 

    vector<DeviceLostInterface*> things; 
    things.push_back(sprite); 
    things.push_back(font); 

    // This would be a loop... 
    things[0]->onLost(); 
    things[1]->onLost(); 

} 

Ce genre de rencontre à vos besoins, mais pour être honnête, je ne pense pas vraiment qu'il est très utile. Vous auriez besoin d'un moyen de savoir à quoi renvoyer chaque élément, ou de garder les pointeurs dans une liste spécifique de type quand même, et vous pourriez tout aussi bien écrire du code séparé pour réinitialiser chaque type de toute façon.