0

我正在开发一个简单的 2D 游戏,通过 Java2D API 进行渲染。我注意到,当我尝试在集成显卡上绘图时,性能会崩溃。

我已经在我的主设备上用较新的 ATI Radeon 和我 5 年的笔记本电脑测试了这个游戏,笔记本电脑也有一个(非常过时的)Radeon。在这两种情况下,我的 FPS 都不错,但是当我尝试使用 Intel i5 的板载 HD 4000 显卡时,它会以 20 FPS 左右的速度爬行。

我正在使用全屏独占模式。

在任何给定时刻,我一次渲染大约 1000 张图像。

烦人的是,当我尝试 getAvailableAcceleratedMemory() 时,它只会为这张卡返回 -1,而且它似乎拒绝加速任何图像。

有谁知道如何解决这个问题?

渲染代码:

    Graphics g = bufferStrategy.getDrawGraphics();
    g.drawImage(img, x, y, img.getWidth(), img.getHeight(), null)
    g.dispose();
    bufferStrategy.show();

图片加载代码:

    BufferedImage I = null;
    I = ImageIO.read(new File(currentFolder+imgPath));
    imgMap.put(imgIdentifier, I);

图像存储在由字符串标识的 BufferedImages 的哈希图中,因此当实体需要绘制和图像时,它只需将其从哈希图中取出并绘制即可。在当前情况下,实体主要是地板和墙砖,因此它们永远不会改变(因此除了第一次之外,不必从哈希图中获取图像)。

编辑 - 我采用了 MadProgrammer 的方法,但它并没有改变我的 FPS。

4

1 回答 1

2

这是将图像转换为兼容图像的示例......本身不是答案

这是我使用的一些库代码...

public static BufferedImage createCompatibleImage(BufferedImage image) {
    BufferedImage target = createCompatibleImage(image, image.getWidth(), image.getHeight());
    Graphics2D g2d = target.createGraphics();
    g2d.drawImage(image, 0, 0, null);
    g2d.dispose();
    return target;
}

public static BufferedImage createCompatibleImage(BufferedImage image,
        int width, int height) {
    return getGraphicsConfiguration().createCompatibleImage(width, height, image.getTransparency());
}

public static GraphicsConfiguration getGraphicsConfiguration() {
    return GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration();
}

我会做类似...

I = createCompatibleImage(ImageIO.read(new File(currentFolder+imgPath)));
imgMap.put(imgIdentifier, I);
于 2013-10-21T04:57:19.953 回答