У меня есть простой метод, который записывает пиксели на холст 'GrapicConte2D. Int [] - pixelarray получает рандомизированный каждый кадр и обновляется с помощью метода PixelWriters setPixels().Slow laggy Javafx-Performance на Retina Display
У меня есть монитор с двумя мониторами, «обычный» экран и сетчатая сетчатая сетчатка. При перетаскивании рамки приложения на мой «обычный» экран все работает очень хорошо для меня. Но поместив его на дисплеи Retina MacBooks, он становится очень лаги.
Я действительно не знаю, что пошло не так. Я проверял свой код несколько раз, но, похоже, я не могу с собой поделать.
Буду очень признателен за каждый совет, который может мне помочь.
Благодаря
Код:
public class CanvasTest extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
Random random = new Random();
BorderPane root = new BorderPane();
ScrollPane scrollPane = new ScrollPane();
Canvas canvas = new Canvas(1280, 800);
GraphicsContext gc = canvas.getGraphicsContext2D();
PixelWriter writer = gc.getPixelWriter();
PixelFormat format = PixelFormat.getIntArgbInstance();
int[] pixels = new int[(int) (canvas.getWidth() * canvas.getHeight())];
scrollPane.setContent(canvas);
AnimationTimer timer = new AnimationTimer() {
@Override
public void handle(long now) {
for (int i = 0; i < pixels.length; i++) {
pixels[i] = (255 << 24) | random.nextInt(0xffffff);
}
writer.setPixels(0, 0, (int) canvas.getWidth(), (int) canvas.getHeight(),
format, pixels, 0, (int) canvas.getWidth());
}
};
root.setCenter(scrollPane);
primaryStage.setScene(new Scene(root,1280,800));
primaryStage.show();
timer.start();
}
public static void main(String[] args) {
launch(args);
}
}
Можете ли вы разместить часть своего кода? Это поможет нам помочь вам. –
Спасибо за ваш ответ. Я опубликовал отрывок из моего кода, но я не уверен, помогает ли он, это очень просто. Это происходит в конструкторе Canvas. И мой холст оформлен в BorderPane .. – Adam
Ну, я предполагаю, что ваш сетчатый дисплей имеет очень высокое разрешение, поэтому этот код будет работать медленнее обычного дисплея. И в зависимости от того, как часто ваш метод handle() вызывается AnimationTimer, тогда это может начать очень сильно отставать. Особенно учитывая 3 вызова Random.nextInt(), которые происходят для каждого пикселя, каждый кадр. Это куча обработки, проходящая там. – ManoDestra