2011-06-09 12 views
5

पर त्वरित नहीं हुआ है हम वर्तमान में जावा 2 डी एपीआई का उपयोग कर जावा में एक गेम विकसित कर रहे हैं और उबंटू पर्यावरण में इसे चलाने के दौरान कुछ अजीब प्रदर्शन मुद्दों का सामना कर रहे हैं।जावा 2 डी: बुफर्ड इमेज उबंटू

हमारी फ्रेम दर विंडोज और मैक सिस्टम पर 62fps के औसत से उबंटू पर लगभग 10fps तक गिर जाती है। डिबगिंग और विभिन्न JVM झंडे परीक्षण के कुछ ही घंटों के बाद यह है कि बिटमास्क का उपयोग कर BufferedImages उबंटू के तहत त्वरित किया जा रहा नहीं कर रहे हैं क्योंकि झूठे

System.out.println(img.getCapabilities(config).isAccelerated()); 

प्रिंट बाहर लगता है।

वर्तमान में हम के माध्यम से

img = ImageIO.read(url); 

हमारे छवियों को लोड कर रहे हैं और उसके बाद निम्न विधि का उपयोग कर एक युक्ति संगत BufferedImage पैदा कर रहे:

private static BufferedImage createCompatibleImage(BufferedImage img) { 

    // Get default graphics device 
    GraphicsDeviceService graphicsDevice = ServiceProvider 
      .getService(GraphicsDeviceService.class); 
    GraphicsConfiguration config = graphicsDevice 
      .getGraphicsConfiguration(); 

    // Get desired transparency mode 
    int transparency = img.getColorModel().hasAlpha() ? Transparency.BITMASK 
      : Transparency.OPAQUE; 

    // Create device compatible buffered image 
    BufferedImage ret = config.createCompatibleImage(img.getWidth(), 
      img.getHeight(), transparency); 

    // Draw old image onto new compatible image 
    Graphics2D graphics = ret.createGraphics(); 
    graphics.drawImage(img, 0, 0, null); 
    graphics.dispose(); 

    // Return compatible image 
    return ret; 
} 

जब Transparency.OPAQUE का उपयोग कर संगत BufferedImages बनाने, झंडा उपरोक्त कोड की पहली पंक्ति सत्य प्रिंट करती है, जो इंगित करती है कि छवि अब तेज हो गई है और फ्रेम दर सामान्य पर वापस आती है।

हालांकि यह निश्चित रूप से हमारे वांछित समाधान नहीं है क्योंकि छवियों को बिना पारदर्शिता के खींचा जाता है और इसके बदले बदसूरत काले पृष्ठभूमि होती है।

तो, क्या किसी को इस समस्या का समाधान पता है?

+0

आप उबंटू में एक वीडियो ड्राइवर कि हार्डवेयर-त्वरित ग्राफिक्स का समर्थन करता है का उपयोग कर रहे हैं? – Jesper

+0

हां, मैं एक वीडियो ड्राइवर का उपयोग कर रहा हूं जो हार्डवेयर त्वरण का समर्थन करता है और जैसा कि कोई पारदर्शिता शामिल नहीं है, खेल के ऊपर बताए गए ठीक है। – Scott

+0

मैं सुझाव दिया गया है कि एक्सेलेरेटेड() कोड में कदम उठाना और यह पता लगाना कि यह झूठी क्यों लौट रहा है। – Gili

उत्तर

1

मुझे विश्वास है कि समस्या इस तथ्य में है कि आप हार्डवेयर त्वरित वातावरण में बिटमैस्क का उपयोग करते हैं।

मैं सीमाओं के बारे में बिल्कुल स्पष्ट नहीं हूं।

  • केवल वोल्टाइल इमेज? या यह बिटमैस्क बुफर्ड इमेज इंस्टेंस पर भी लागू होता है?
  • क्या यह ओपनजीएल और डायरेक्ट 3 डी पाइपलाइन दोनों पर लागू होता है? (इस धागे के लिए समझदार नहीं है; ओपनजीएल लिनक्स पर उपलब्ध एकमात्र ऐसा है)

किसी भी मामले में "समाधान" केवल सॉफ्टवेयर प्रदान किए गए वातावरण में बिटमैस्क छवियों का उपयोग करना है; हार्डवेयर त्वरित वातावरण में आपको स्थिरता में ट्रान्सल्यूसेंट छवियों का उपयोग करने की आवश्यकता है। मेरे लिए पुराने javagaming.org थ्रेड के अलावा मेरे दावे के लिए एक वैध स्रोत ढूंढना मुश्किल है, इसलिए केवल एक चीज जो मैं कह सकता हूं वह इसे आजमा देना है।

http://www.java-gaming.org/index.php?topic=19561.5

संबंधित मुद्दे