Ajouter un commentaire

buzzkaido

Alors en fait, j'ai trouvé :

-------------------------------------------------------------------
Pour un timer stable, le plus simple et le plus efficace est :
-------------------------------------------------------------------

* utiliser un timer
* a chaque appel du timer, calculer le delai ecoulé depuis l'appel precedent grace à System.getTimeMillis() (on fait la soustraction avec l'appel precedent)
* comme ca on connait exactement le temps ecoulé depuis l'appel precedent, et on ajuste les calculs en consequence.

-----------------------------
Pour accelerer le rendu :
-----------------------------

Je ne cherchais pas a accelerer le rendu proprement dit (calcul du tableau de pixel) mais la copie de ce tableau de pixel sur l'ecran !

Le plus rapide (difference notoire sur mon PC) :

* declarer un tableau de int[largeur*hauteur] qui va stocker les pixels
* utiliser une BufferedImage monImageSource
* declarer un writableRaster avec monImageSource.getWritableRaster

Dans un thread :
* calculer chaque pixel de l'image
* ecrire dans le raster avec writableRaster.setDataElements(0,0,largeur,hauteur,tableauDePixels)

Dans le paintComponent du composant où l'on veut afficher l'image calculée :

* g.drawImage( (Image) monImageSource,x,y,null)

Bien sur, le mieux est d'utilise le modele ARGB pour la bufferedImage (1 int = Alpha + Rouge + Vert + Bleu), comme ca moins de memoire utilisé, moins de transfert de memoire aussi

Ainsi on profite des accelerations materielles de la carte video, et ca bombe !

Petite precaution : s'assurer que la bufferedImage est compatible avec la carte vidéo, histoire que Java ne perde pas du temps à convertir à chaque fois. Pour faire ca, rechercher "compatible bufferedImage"....

Filtered HTML

Plain text

CAPTCHA
Cette question permet de vérifier que vous n'êtes pas un robot spammeur :-)
 FFFF  EEEE  TTTTTT  Y   Y  RRRR  
F E TT Y Y R R
FFF EEE TT Y RRRR
F E TT Y R R
F EEEE TT Y R RR