Bonjour à tous,
Je viens afin d'avoir un avis extérieur sur un façon de générer des textures avec OpenGL sachant que le tout est sur 2 threads.
1 Thread -> main ( Logique, scene, input...)
2 Thread -> rendu (OpenGL)
Je ne vais pas vous balancer tout le code je vais juste vous orienter.
J'ai un classe pour chaque thread. Ici l'importante est la classe de Rendu. Elle dispose donc d'un thread et d'une methode static qui est grosso modo:
Donc la ou je m’interroge et ou je voudrais un avis extérieur c'est sur le fait que le charge des COLLADA ( dae ) dans le main thread. Je récupère donc un nom de texture, ici "marble.tga". Je lit le tga et recupère ces infos etc....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Void Render::RenderingThread(.....) { OpenGL->Init() While(thread->running) { PreRender(); Render(); PostRender(); } OpenGL->Release(); }
De la, il me faut faire un glGenTextures()!
Or, OpenGL étant dans son thread je dois faire appelle a glGenTextures dans le thread après l'init de OpenGL. Donc ça veux dire:
- Etre sur que OpenGL est initialisé au moment ou l'on load la texture. Ce qui veut dire que l'on ne peux pas charger le TGA puis glGenTextures après car le thread de rendu n'est pas sur d'être encore lancé ( tout dépendras du code client ).
Donc j'avais pensé avoir dans la classe de rendu OpenGL un vecteur texture à générer. Ce vecteur sera remplit à chaque demande du thread main , et lu à chaque PreRender() de la scène pour faire le glGenTextures et les supprimer de ce vecteur.
J'aimerais un avis sur ce choix, avez vous des conseils? avez vous déjà été confronté à ça et qu'elles ont été vos solutions?
Merci![]()
Partager