/*
 * Created on 12 juil. 2005
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package bordel;

import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.image.BufferStrategy;

/**
 * @author lefevre
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class DoubleBufferingHardware extends Frame {
	   // boucle d'affichage
	   RenderingThread renderingThread = new RenderingThread(); 
	   // variable permettant d'utiliser la mémoire VRAM
	   BufferStrategy strategy; 
	   // buffer mémoire où les images et les textes sont appliqués
	   Graphics buffer; 
	   int x = 0; // coordonnée x de l'affichage du texte

	   public DoubleBufferingHardware(){
	      setSize( 400, 400 );
	      setVisible( true );
	   
	      // inhibe la méthode courante d'affichage du composant 
	      setIgnoreRepaint( true );  
	   
	      // on créé 2 buffers dans la VRAM donc c'est du double-buffering
	      createBufferStrategy( 2 ); 
	   
	      // récupère les buffers graphiques dans la mémoire VRAM
	      strategy = getBufferStrategy(); 
	      buffer = strategy.getDrawGraphics();
	      renderingThread.start();  
	   }

	   public void graphicalRender(){
	      buffer.setColor( Color.black ); 
	      buffer.fillRect( 0, 0, 400, 400 ); 
	      buffer.setColor( Color.white ); 
	      buffer.drawString( "affichage d'une ligne de texte", x, 200 );
	      x++; 
	      if ( x > 400 ) x = 0; 
	      //on envoie toutes les données du buffer mémoire vers le buffer d'affichage
	      strategy.show(); 
	   }

	   class RenderingThread extends Thread{
	     /**
	      *  Ce thread appelle le rafraichissement de notre fenêtre 
	      *  toutes les 10 milli-secondes
	      */
	      public void run(){
	         while( true ){
	            try {
	                // on appelle notre propre méthode de rafraichissement
	               graphicalRender();
	               sleep( 5 );
	            } catch ( Exception e ) {} 
	         }
	      }
	   }   
	   public static void main(String[] args){new DoubleBufferingHardware();}
	}
