gpt4 book ai didi

java - 视网膜显示屏上缓慢滞后的 Javafx 性能

转载 作者:行者123 更新时间:2023-12-01 10:07:20 25 4
gpt4 key购买 nike

我有一个简单的方法,可以将像素写入 Canvas 的 GrapicConte2D。 int[]-pixelarray 每帧都会被随机化,并使用 PixelWriters setPixels()-Method 进行更新。

我有一个双显示器设置、一个“常规”屏幕和一个 MacBook Pro Retina。当将我的应用程序框架拖到我的“常规”屏幕中时,一切对我来说都工作得很好。但将其放在我的 MacBook Retina 显示屏上时,它会变得非常缓慢。

我真的不知道出了什么问题。我检查了几次我的代码,但似乎我无法控制自己。

我将非常感谢每一个可以帮助我的建议。

谢谢

代码:

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);
}
}

最佳答案

我最好的猜测是,您的视网膜显示屏具有更多的总像素和更高的像素密度,因此每帧必须进行更多的计算。如果您不打算使用 GraphicsContext2D,我会研究 OpenGL。

如果您仍然想使用GraphicsContext2D,我会采取更少的随机性样本以减少延迟。您可以为每个其他像素找到一个随机值,然后将附近的像素也设置为该颜色,而不是为每个像素找到一个随机值。看起来会稍微差一些,但会减少延迟。同样,OpenGL 使用 GPU 渲染,速度会快得多。

试试这个:

for (int y = 0; y < height; y+=2) {
for (int x = 0; x < width; x+=2) {
int i = x + y * width;
screen[i] = (255 << 24) | (random.nextInt(256) << 16) | (random.nextInt(256) << 8) | random.nextInt(256);
screen[i+1] = screen[i]; // The pixel just to the right of the current one
screen[i+width] = screen[i]; // The pixel just below the current one
screen[i+width+1] = screen[i]; // The pixel one to the right and one below this one
}
}

注意:只有当宽度和高度可以被 2 整除时,这才有效。这就是为什么在这种情况下,有很多像素,使用 GPU 会更容易。

关于java - 视网膜显示屏上缓慢滞后的 Javafx 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36362075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com