Bonjour,
J'ai commencé il y a peu à coder un moteur 3D, et j'ai quelques problèmes au niveau de mes loaders.
Je me suis en grande partie inspiré de l'exemple de début de moteur 3D de Laurent Gomila, a savoir Yes::Engine. Seules différences, je n'utilise que directX, et j'ai essayer de supprimer au maximum les singletons.
je me retrouve donc avec ceci pour les loaders :
que je dérive ensuite pour charger les différentes parties.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 template <class T> class ILoader { public: virtual T* LoadFromFile(const std::string &filename); virtual void SaveToFile(const std::string &filename, const T* obj); }; // class ILoader
Voici maintenant ma classe de modeles :
Si on oublie le fait que la fonction render() n'a rien a faire là, tout va bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 class Model : public IResource { Model(const TVertex* Vertices, unsigned long VerticesCount, const TIndex* Indices, unsigned long IndicesCount, const std::string& Texture, Renderer* render); void Render(Renderer* render) const; private : CDeclarationPtr m_Declaration; Buffer<TVertex> m_VertexBuffer; Buffer<TIndex> m_IndexBuffer; Texture m_Texture; }; // class Model
Seulement, j'ai besoin du renderer pendant la création du mesh, pour creer les vertexBuffers, indexBuffers, et le format de vertex. Pas génant pour le moment, mais ca se gate au moment d'écrire le loader pour un mesh, je ne peux pas, a cause de la classe de loaders passer le renderer en parametre à LoadFromFile(), mais pourtant il faudrait.
Je me pose donc 2 questions :
- D'où viens le problème ?
- Est-ce que je devrait eviter de faire les appels au renderer dans la creation du modele ?
J'ai le même genre de problemes au niveau des gestionnaires de ressources et du gestionnaire de Loaders, quoique pour les loaders, cela pose moins de problemes (je peux virer betement et simplement le singleton sans me poser de questions, et le gerer moi même derriere, ou bien mettre tout ca en fonctions statiques, cela reste a peu pres correct).
Merci d'avance pour vos eclaircissements.
Partager