java烧不烧显卡,Java硬件加速不适用于英特尔集成显卡

Hi everyone I hope someone can help me solve this problem. I'm having trouble getting hardware acceleration to work on a laptop with Intel Integrated Graphics.

The Problem:

Hardware Acceleration using Java 7 update 11 doesn't appear to be working with Intel Integrated Graphics on a Windows 7 and 8 machine using a BufferStrategy with a JFrame.

Details

Graphics Card: Intel(R) HD Graphics 4000

JRE: Java 7 Update 11

OS: Windows 7, Windows 8

Expected Results

PmCoZ.png

Actual Results

P3gkb.png

Resources

If you want to verify the problem you can download the app I created for testing at: http://ndcubed.com/downloads/GraphicsTest.zip

If you don't feel comfortable downloading a compiled JAR file you can compile the app yourself using the following source code:

package graphicstest;

import javax.swing.*;

import java.awt.*;

import java.awt.image.BufferStrategy;

public class GraphicsTest extends JFrame {

public static void main(String[] args) {

SwingUtilities.invokeLater(new Runnable() {

public void run() {

new GraphicsTest();

}

});

}

GraphicsConfiguration gc = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration();

BufferCapabilities bufferCapabilities;

BufferStrategy bufferStrategy;

int y = 0;

int delta = 1;

public GraphicsTest() {

setTitle("Hardware Acceleration Test");

setSize(500, 300);

setLocationRelativeTo(null);

setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

setVisible(true);

createBufferStrategy(2);

bufferStrategy = getBufferStrategy();

bufferCapabilities = gc.getBufferCapabilities();

new AnimationThread().start();

}

class AnimationThread extends Thread {

@Override

public void run() {

while(true) {

Graphics2D g2 = null;

try {

g2 = (Graphics2D) bufferStrategy.getDrawGraphics();

draw(g2);

} finally {

if(g2 != null) g2.dispose();

}

bufferStrategy.show();

try {

Thread.sleep(16);

} catch(Exception err) {

err.printStackTrace();

}

}

}

}

public void draw(Graphics2D g2) {

if(!bufferCapabilities.isPageFlipping() || bufferCapabilities.isFullScreenRequired()) {

g2.setColor(Color.black);

g2.fillRect(0, 0, getWidth(), getHeight());

g2.setColor(Color.red);

g2.drawString("Hardware Acceleration is not supported...", 100, 100);

g2.setColor(Color.white);

g2.drawString("Page Flipping: " + (bufferCapabilities.isPageFlipping() ? "Available" : "Not Supported"), 100, 130);

g2.drawString("Full Screen Required: " + (bufferCapabilities.isFullScreenRequired() ? "Required" : "Not Required"), 100, 160);

g2.drawString("Multiple Buffer Capable: " + (bufferCapabilities.isMultiBufferAvailable() ? "Yes" : "No"), 100, 190);

} else {

g2.setColor(Color.black);

g2.fillRect(0, 0, getWidth(), getHeight());

g2.setColor(Color.white);

g2.drawString("Hardware Acceleration is Working...", 100, 100);

g2.drawString("Page Flipping: " + (bufferCapabilities.isPageFlipping() ? "Available" : "Not Supported"), 100, 130);

g2.drawString("Full Screen Required: " + (bufferCapabilities.isFullScreenRequired() ? "Required" : "Not Required"), 100, 160);

g2.drawString("Multiple Buffer Capable: " + (bufferCapabilities.isMultiBufferAvailable() ? "Yes" : "No"), 100, 190);

}

y += delta;

if((y + 50) > getHeight() || y < 0) {

delta *= -1;

}

g2.setColor(Color.blue);

g2.fillRect(getWidth()-50, y, 50, 50);

}

}

Conclusions

Without hardware acceleration a lot of apps that I've created that require it run slowly on the machine with Integrated Graphics. Its really baffling to me why its not working specifically with this type of graphics card. Anyway thank you for reading all this hopefully we can get to the bottom of this :)!

解决方案

I just figured it out for anyone who is having this same issue. It was the type of JRE installed. I had the 32bit JRE environment installed on a 64bit machine and for some reason it wasn't utilizing the integrated Intel graphics chip. However after installing the appropriate 64bit JRE, page flipping and hardware acceleration work with the Intel integrated chip.

Really strange can't believe I stumbled upon the answer. Hope this helps someone in the future :)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值