Инкапсуляция putpixel ужасно медленная в JavaFX


Я пытаюсь написать простой движок в JavaFX и я управляю инкапсуляции putpixel так, что я пас Х,Y-координаты и цвет и рисует пиксель этого цвета на экране. Я тоже писал drawLine() что рисует линию между Х1,Y1 и Х2,У2.

Сегодня я написал функцию drawRectangle() который использует drawLine()но проблема в том, что рисование прямоугольников очень медленно ( 300х300 РХ прямоугольника занимает около 3 секунд для рисования ). Я думаю, это потому, что как я доступа к backbuffer и рисования пикселей.

Я в том числе фрагменты кода для putpixel, drawLine и drawRect неплохо сложность времени и они точно не вызывает ограничений:

public class Graphics
{
   private int SCREEN_WIDTH = 600;
   private int SCREEN_HEIGHT = 600;


   private Canvas          canvas; //pixel buffer
   private GraphicsContext gc;    
   private WritableImage   img; //layer
   private PixelWriter     pw;


   public Graphics()
   {
      this.canvas = new Canvas( SCREEN_WIDTH,SCREEN_HEIGHT );
      this.gc = canvas.getGraphicsContext2D();
      this.img = new WritableImage( SCREEN_WIDTH,SCREEN_HEIGHT ); //layer
      this.pw  = img.getPixelWriter();
   }

   public void createWindow( Stage primaryStage )
   {
      Stage window = primaryStage;

      window.setOnCloseRequest( new EventHandler< WindowEvent>()
      {
      public void handle( WindowEvent e )
         {
            Platform.exit();
            System.exit( 0 );
            Platform.setImplicitExit( true );
         }
      });

      window.setTitle( "Fasa3D" );

      GridPane grid = new GridPane();
      grid.getChildren().addAll( this.canvas ); //put pixel buffer into layout


      Scene scene = new Scene( grid,SCREEN_WIDTH,SCREEN_HEIGHT );
      window.setScene( scene );
      window.show(); //present pixel buffer
   }


   public void putPixel( int x,int y,Color c )
   {
      this.pw.setColor( x,y,c );     //accessing pixel by coord;
      this.gc.drawImage( img,0,0 ); //draw layer onto pixel buffer
   }
}

Я был бы бесконечно благодарен, если бы вы могли пожалуйста, помогите мне с оптимизацией. Весь РЕПО здесь.



175
2
задан 15 марта 2018 в 11:03 Источник Поделиться
Комментарии