Alberic81
Messages postés13Date d'inscriptiondimanche 10 septembre 2006StatutMembreDernière intervention 3 octobre 2011
-
28 sept. 2011 à 10:00
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 2021
-
3 oct. 2011 à 16:11
Bonjour,
Je travaille actuellement avec GLScene et tout fonctionne correctement sauf pour le temps de chargement très long.
En effet, j'ai beaucoup d'objets en *.3ds que je charge sur des TGLFreeForm dans le OnCreate de la Form.
Vue que ce sont toujours les même fichiers *.3ds que je charge, je me demandé s'il était possible de les pré charger directement dans Delphi avant de compiler et éviter ainsi de les charger à l'exécution.
Un peu à la manière d'une image dans le Picture d'un TImage.
Alberic81
Messages postés13Date d'inscriptiondimanche 10 septembre 2006StatutMembreDernière intervention 3 octobre 2011 29 sept. 2011 à 11:40
Merci Cantador
J'ai essayé d'utiliser un fichier de ressources.
A première vue ca marche bien jusqu'au chargement du fichier dans Res (TResourceStream) mais c'est après que ca se gâte.
Quand je fais ??FreeForm.LoadFromStream('AVION',Res);?? j'ai le message d'erreur ??Failed to store GIF on clipboard??.
J'explique ma démarche :
-j'ai modifié le fichier ressource de DelhiCool avec ??Ressource Hacker?? :
-Add a new Ressource
-je charge mon fichier.3ds
-Ressource Type : GLSCENE
-Ressource Name : AVION
-Ressource Language : 1033 (Je sais pas trop ce qu'il faut et j'ai essayé 1036 et 0 mais pas de changement)
j'ai lu que 1033 c'est pour l'Anglais puis 1036 et 0 sont utilisés par DelphiCool.
-Je suis parti du source de DelphiCool et j'ai ajouté mon GLScene.
-Sur un bouton j'ai :
procedure TForm1.Button17Click(Sender: TObject);
var
FreeForm : TGLFreeForm;
begin
FreeForm := TGLFreeForm.Create(GLDummyCube1);
Res := TResourceStream.Create(hinstance, 'AVION', 'GLSCENE');
FreeForm.LoadFromStream('AVION',Res);
FreeForm.BuildOctree;
end;
Alberic81
Messages postés13Date d'inscriptiondimanche 10 septembre 2006StatutMembreDernière intervention 3 octobre 2011 30 sept. 2011 à 14:34
Après avoir réussi sans avoir d'erreur en partant du source de Delphicool, j'ai mis en application cette méthode dans mon Projet !
Tout fonctionne bien mais j'en reviens à mon problème 1er : le temps de chargement est long.
L'utilisation de fichier ressource a apporté de l'amélioration mais le gain de temps reste négligeable.
Connaissez-vous une autre méthode qui pourrait me faire gagner encore du temps ?
J'ai eu une autre idée :
Cette fiche n'étant créée que lorsque j'appui sur un bouton de ma fiche principale, J'ai essayé de faire le create de ma fiche3d en parallèle mais ma fiche principale bloque le temps du chargement !
Est-ce possible de faire le create de ma fiche3d en parallèle sans que ma fiche principale se bloque ?
Caribensila
Messages postés2527Date d'inscriptionjeudi 15 janvier 2004StatutMembreDernière intervention16 octobre 201918 30 sept. 2011 à 20:02
« Connaissez-vous une autre méthode qui pourrait me faire gagner encore du temps ? »
Bein non. Il faut bien que le chargement se fasse. C'est le problème de tous les jeux vidéo; il y a toujours un temps de latence au changement de niveau.
Par contre, dans ton cas, tu peux peut-être utiliser un artifice cosmétique. C'est-à-dire non pas réduire le temps de chargement, mais le faire de façon plus discrète dans l'événement Application.OnIdle. Ou dans un Thread.
Mais, perso, j'ai jamais essayé.