2013-01-31 44 views
9

के साथ काम नहीं कर रहा है हाय सबको मुझे उम्मीद है कि कोई इस समस्या को हल करने में मेरी सहायता कर सकता है। मुझे इंटेल इंटीग्रेटेड ग्राफिक्स के साथ लैपटॉप पर काम करने के लिए हार्डवेयर त्वरण प्राप्त करने में परेशानी हो रही है।जावा हार्डवेयर त्वरण इंटेल इंटीग्रेटेड ग्राफिक्स

समस्या:

हार्डवेयर त्वरण जावा 7 अद्यतन 11 का उपयोग कर एक विंडोज 7 और 8 मशीन एक JFrame के साथ एक BufferStrategy के प्रयोग पर इंटेल एकीकृत ग्राफिक्स के साथ काम करने प्रकट नहीं होता है।


विवरण

ग्राफिक्स कार्ड: इंटेल (आर) HD ग्राफ़िक्स 4000
JRE: जावा 7 अद्यतन 11
ओएस: विंडोज 7, विंडोज 8


अपेक्षित परिणाम

Image of expected results (http://i.stack.imgur.com/PmCoZ.png).


वास्तविक परिणाम

Image of actual results (http://i.stack.imgur.com/P3gkb.png).


संसाधन

आप आप मैं कम से परीक्षण के लिए बनाई गई एप्लिकेशन डाउनलोड कर सकते समस्या सत्यापित करने के लिए करना चाहते हैं: http://ndcubed.com/downloads/GraphicsTest.zip

यदि आपके पास एक संकलित जेएआर फ़ाइल को डाउनलोड करने में सहज महसूस नहीं होता है, आप निम्न स्रोत कोड का उपयोग कर स्वयं को संकलित कर सकते हैं:

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

निष्कर्ष

हार्डवेयर त्वरण के बिना क्षुधा है कि मैं बना लिया है यह एकीकृत ग्राफिक्स के साथ मशीन पर धीरे चल अपेक्षा करते हैं कि का एक बहुत। यह वास्तव में मेरे लिए परेशान है कि यह विशेष रूप से इस प्रकार के ग्राफिक्स कार्ड के साथ क्यों काम नहीं कर रहा है। वैसे भी यह सब उम्मीदवारों को पढ़ने के लिए धन्यवाद, हम इस के नीचे पहुंच सकते हैं :)!

+0

ऐसी पोस्ट के लिए धन्यवाद! – UDPLover

उत्तर

5

मैंने अभी इसे किसी भी मुद्दे के लिए समझ लिया है। यह जेआरई स्थापित प्रकार था। मेरे पास 64 बिट मशीन पर 32 बिट जेआरई पर्यावरण स्थापित था और किसी कारण से यह एकीकृत इंटेल ग्राफिक्स चिप का उपयोग नहीं कर रहा था। हालांकि, उपयुक्त 64 बिट जेआरई स्थापित करने के बाद, इंटेल एकीकृत चिप के साथ पृष्ठ फ़्लिपिंग और हार्डवेयर त्वरण कार्य। http://www.oracle.com/technetwork/java/javase/downloads/jre7-downloads-1880261.html

सच अजीब विश्वास नहीं कर सकता मैं इस सवाल का जवाब पर ठोकर खाई:

आपको कम से JRE के अन्य संस्करणों डाउनलोड कर सकते हैं। उम्मीद है कि यह भविष्य में किसी की मदद करेगा :)

+0

यदि उपर्युक्त काम नहीं करता है तो पर्यावरण परिवर्तक J2D_D3D_NO_HWCHECK को "सत्य" पर सेट करने का प्रयास करें। किसी कारण से ऐसा लगता है कि इंटेल इंटीग्रेटेड ग्राफिक्स पर डायरेक्ट 3 डी पाइपलाइन शुरू करने से हार्डवेयर जांच से पहले नहीं मिलता है, हालांकि इस चेक को छोड़कर यह कोई समस्या नहीं के साथ डायरेक्ट 3 डी का उपयोग करता है और हार्डवेयर त्वरण को सक्षम करके प्रदर्शन बढ़ाता है। अपने ऐप को चलाने से पहले कमांड प्रॉम्प्ट में J2D_D3D_NO_HWCHECK = true' सेट करें। हालांकि पर्यावरणीय चर सेट करते समय सावधानी बरतें। – neptune692

2

पर्यावरणीय चर J2D_D3D_NO_HWCHECK को "सत्य" पर सेट करने का प्रयास करें।


सबसे पहले विधि

नियंत्रण कक्ष -> सिस्टम -> उन्नत सिस्टम सेटिंग्स -> पर्यावरण चर -> सिस्टम चर -> नई ->

  Variable name: J2D_D3D_NO_HWCHECK 
     Variable value: true 

दूसरा विधि

बैच फ़ाइल में:

  set J2D_D3D_NO_HWCHECK=true 

     java -jar myapp.jar 

+0

मैंने अपने इंटेल इंजेग्रेटेड ग्राफिक्स ड्राइवर को अपडेट करने के बाद अपनी इंटेलिज व्हाइट स्क्रीन समस्या का समाधान ढूंढते समय इस जवाब पर ठोकर खाई। मेरे ड्राइवर को अपग्रेड करने के बाद, इंटेलिज (कोई अन्य स्विंग जावा ऐप में यह समस्या नहीं थी) जब मैं इसे शुरू करता हूं तो फ्रेम के अंदर एक विंडो फ्रेम और सादा सफेद प्रदर्शित करता है। J2D_D3D_NO_HWCHECK = सत्य सेट करने के बाद इंटेलिज को पुनरारंभ करें और फिर यह ठीक काम करता है। – IceMan