threadom
Messages postés101Date d'inscriptionmardi 8 avril 2003StatutMembreDernière intervention 1 novembre 2007
-
30 sept. 2006 à 11:54
threadom
Messages postés101Date d'inscriptionmardi 8 avril 2003StatutMembreDernière intervention 1 novembre 2007
-
1 oct. 2006 à 12:53
Bonjour, (Vous avez vu j'y pense :p)
Je vais vous exposé mon problème. J'ai donc créer un simple applet utilisant JOGL, cependant en le lancant via "Eclipse" j'ai un violent "Freeze" qui dure 2 ou 3 seconde voir plus, toute les 4 ou 5 seconde. J'ai essayé de débuger un peu et apparament il semblerais que ce soit le lancement (start) d'animator qui créer ce freeze.
Plus exactement quand je lance l'applet avec eclipse, la fenetre s'affiche, et la surface opengl ce créer correctement, seulement... des que j'essaye de bouger la fenetre celle ci semble bloqué... mais peu après celle ci va bougé correctement pendant quelque seconde, et ensutie rebloqué, ect.
Lorsque je dessine un simple carré qui change aléatoirement de couleur, on s'appercois que ce n'est pas que la fenetre qui freeze mais aussi la suface ogl.
Quelqu'un a t'il une idée pour résoudre le problème, ou alors de ce que j'ai bien pu faire de MAL ? Car je n'en doute pas ca devrais marché, ca marchais quand mon code etais implémenté autrement, donc ma facon doit avoir quelque chose d'incorrect ... mais je ne vois pas quoi.
Ensuite pour le fichier cOutput c'est la que la différence est vraiment notable :
L'applet est devenu un extends GLJPanel et le canvas a été retirer, pour palier au problème de freeze du canvas.
Disparition de la methode paint (Celle ci court circuite la methode Display de JOGL)
Après le reste des changements sont seulement pour moi).
for (float y = -30; y < 30; y++) {
for (float x = -40; x < 40; x++) {
L_oGL.glColor3d(Math.random(), Math.random(), Math.random());
L_oGL.glBegin(GL.GL_QUADS);
L_oGL.glVertex3f(x, y, -5);
L_oGL.glVertex3f(x, y + 1, -5);
L_oGL.glVertex3f(x + 1, y + 1, -5);
L_oGL.glVertex3f(x + 1, y, -5);
L_oGL.glEnd();
}
}
} catch (Exception e) {
cDebug.print(cOutput.class, "ERR", "display(GLAutoDrawable P_oDrawable) - Exception >> " + e.toString());
} finally {
cDebug.print(cOutput.class, "END", "display(GLAutoDrawable P_oDrawable)");
}
}
// ****************************************************************************************
public void reshape(GLAutoDrawable P_oDrawable, int P_iX, int P_iY, int P_iW, int P_iH) {
try {
cDebug.print(cOutput.class, "BEG", "reshape(GLAutoDrawable P_oDrawable, int P_iX, int P_iY, int P_iW, int P_iH)");
cDebug.print(cOutput.class, "BEG", "P_oDrawable = " + P_oDrawable.toString());
} catch (Exception e) {
cDebug.print(cOutput.class, "ERR", "reshape(GLAutoDrawable P_oDrawable, int P_iX, int P_iY, int P_iW, int P_iH) - Exception >> " + e.toString());
} finally {
cDebug.print(cOutput.class, "END", "reshape(GLAutoDrawable P_oDrawable, int P_iX, int P_iY, int P_iW, int P_iH)");
}
}
Ensuite on tombe dans ma class cGame qui elle réutilise les fonctions pour repassé tout dans cGFXE, et dans cSFXE, qui refont la meme chose avec leur cOutput, cInput, cMixer, cStream, et peut être cAnimator si ma seule solution sera de personnalisé :'(
Je sais j'aurais du faire autrement pour ca mais je verais ca qu'en dernier recourt car ca impliquerais une modification trop conséquente du code. Heu en faite ptet pas mais bon ... on vera après.
threadom
Messages postés101Date d'inscriptionmardi 8 avril 2003StatutMembreDernière intervention 1 novembre 2007 30 sept. 2006 à 12:54
Il vient de la class cOutput plus exactement de Animator.start(), si je ne lance pas la thread de l'objet ca passe. C'est elle qui créer l'acces a public void display(GLAutoDrawable P_oDrawable);
Si je ne la lance pas alors pas de problème mais dans ce cas pas d'animation ...
J'ai esayé l'autre jour en créeant moi même une thread qui lance la fonction ... tant que je lancais display toute les 100ms sleep(100) ca allais mais quand j'ai mis un sleep(50) rebelote. et pourtant mon Display est vide.
La je suis en train de regardé si il n'y aura pas un mini conflit entre Paint() de l'applet (cEternia) et le Display JOGL de cOutput. Mais apparament ca ne semble pas être ca non plus ...
threadom
Messages postés101Date d'inscriptionmardi 8 avril 2003StatutMembreDernière intervention 1 novembre 2007 30 sept. 2006 à 13:03
Je vais essayé d'en savoir encore plus ... je viens de retester et la seule idée qui me vienne c'est que ca ce produit essentiellement lorsque je passe sur la surface avec le curseurs, que j'essaye de bougé la fenetre, bref lorsqu'il y'a un evenement que l'applet ou jogl doit détecté que le problème intervient....
Bref pour être sur je vais lancé l'applet et regardé pendant 5 minute, curseur en dehors de l'applet et du canvas jogl, sans rien touché voir si ca freeze .... super le test ....
threadom
Messages postés101Date d'inscriptionmardi 8 avril 2003StatutMembreDernière intervention 1 novembre 2007 30 sept. 2006 à 13:16
Bilan du test ... tant que je touche pas a l'applet, et au canvas, pas de problème ca tourne du feu de dieu, mème en me baladant sur les autres fenetre superposé ou pas.
J'ai essayé d'implémenté KeyListener,MouseListener,MouseMotionListener sur cOutput ajouté a mon canvas ... nada ca résoud rien ...
threadom
Messages postés101Date d'inscriptionmardi 8 avril 2003StatutMembreDernière intervention 1 novembre 2007 30 sept. 2006 à 13:37
Voila bon bein j'ai retapé un peu le Code histoire que tout sois clair et que d'autre personne puisse essayé ... peut etre que ca ne le fais que chez moi ...
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 30 sept. 2006 à 13:43
Salut,
oki j'ai rien dis pour Animator je pensai que c'etait une classe a toi
pour la souris et les mouvements de la fenetre c'est normale cu qu tu vas déclancher un repaint donc 2 choses :
1 pourquoi tu redef public void paint(Graphics P_oGraphics) ???? vu que tu utilise celui de jogl
2 peux tu mettres cette methode de ton applet à true : setIgnoreRepaint(true); pour voir si jogl gere vraiment le repaint tout seul et dans ce cas cela risque plus de poser des probs de l'aisser la jvm le gérer aussi.
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
threadom
Messages postés101Date d'inscriptionmardi 8 avril 2003StatutMembreDernière intervention 1 novembre 2007 30 sept. 2006 à 14:14
En faite le redef de paint c'est pour que mon package cGFXE detecte si JOGL est installé et sinon dans un premier temps affcihe un message comme quoi il faut installé JOGL et sinon pour passé par une methode plus basic de dessins le jour ou je m'y pencherais.
Repaint .... mince j'ai oublier .... c'est pas celui dont tu parle auquel je pense mais faut que j'essaye
Pour ce qui est du setIgnoreRepaint ca ne change rien.
alors pourquoi pas l'autre .... :'( y'a une si grosse différence que ca entre applet et frame ... mais m.... je l'ai fais marché dans un applet sans probleme l'autre fois ... grrrr
Twinuts
Messages postés5375Date d'inscriptiondimanche 4 mai 2003StatutModérateurDernière intervention14 juin 2023111 30 sept. 2006 à 15:09
Salut,
perso je n'utilise plus les applets depuis un moment donc........ mais ce que je peux te conseiller c'est d'aller sur le site de jogl et regarder dans la FAQ pour voir.... ou encore dans le forum de sun...
------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."
threadom
Messages postés101Date d'inscriptionmardi 8 avril 2003StatutMembreDernière intervention 1 novembre 2007 1 oct. 2006 à 11:41
Je me suis pris la tête toute la soirée ... et bilan ... dès que je met un Animator.start(); je suis sur de me chopper le freeze. Par contre en Java Application avec un GLJPanel pas de problème ....
threadom
Messages postés101Date d'inscriptionmardi 8 avril 2003StatutMembreDernière intervention 1 novembre 2007 1 oct. 2006 à 12:53
Ha dernière petite chose merci a Twinuts ^^ c'est un peu la piste du repaint qui ma poussé a me rapellé de cette saloperie de problème de repaint d'un composant swing dans un Applet au lieu d'un JApplet