Witam wszystkich Mam nadzieję, że ktoś pomoże mi rozwiązać ten problem. Mam problem z przyspieszeniem sprzętowym do pracy na laptopie z Intel Integrated Graphics.Akceleracja sprzętowa Java nie działa z kartą graficzną Intela
Problem:
Akceleracja sprzętowa przy użyciu Java 7 aktualizację 11 nie wydaje się działać z zintegrowana grafika Intela na Windows 7 i 8 maszyny z wykorzystaniem BufferStrategy z JFrame.
Szczegóły
Karta graficzna: Intel (R) HD Graphics 4000
JRE: Java 7 Aktualizacja 11
OS: Windows 7, Windows 8
oczekiwanych rezultatów
Rzeczywiste wyniki
Resources
Jeśli chcesz sprawdzić problemu można pobrać aplikację stworzyłem dla testów na: http://ndcubed.com/downloads/GraphicsTest.zip
Jeśli don Czuć się komfortowo, pobierając skompilowany plik JAR, możesz samodzielnie skompilować aplikację przy użyciu następującego kodu źródłowego:
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);
}
}
Wnioski
bez akceleracji sprzętowej wiele aplikacji, które stworzyłem, które wymagają go uruchomić powoli na maszynie ze zintegrowaną grafiką. To naprawdę zaskakujące dla mnie, dlaczego nie działa specjalnie z tego typu kartą graficzną. W każdym razie dziękuję za przeczytanie tego wszystkiego, mam nadzieję, że możemy dojść do sedna tego :)!
Dzięki za taki post! – UDPLover