मैं जावा की हार्डवेयर त्वरण विशेषताओं को देखने में कुछ समय व्यतीत कर रहा हूं, और मैं अभी भी थोड़ा उलझन में हूं क्योंकि मुझे ऑनलाइन मिली कोई भी साइट सीधे और स्पष्ट रूप से मेरे कुछ प्रश्नों का उत्तर नहीं देती है। तो यहां जावा में हार्डवेयर त्वरण के लिए मेरे प्रश्न हैं:जावा हार्डवेयर त्वरण
1) मैक ओएस एक्स (1.6u10 मुझे लगता है) के लिए हालिया जावा अपडेट के साथ ग्रहण संस्करण 3.6.0 में, डिफ़ॉल्ट रूप से हार्डवेयर त्वरण सक्षम है? मैंने कहीं पढ़ा है कि
someCanvas.getGraphicsConfiguration().getBufferCapabilities().isPageFlipping()
या नहीं, हार्डवेयर त्वरण का एक संकेत देने के लिए सक्षम किया गया है माना जाता है, और मेरे कार्यक्रम रिपोर्ट वापस सच है जब कि करने के लिए बैठक के लिए अपने मुख्य कैनवास उदाहरण पर चलाया जाता है। अगर अब मेरा हार्डवेयर त्वरण सक्षम नहीं है, या डिफ़ॉल्ट रूप से, इसे सक्षम करने के लिए मुझे क्या करना होगा?
2) मैंने बुफर्ड इमेज और वोल्टाइल इमेज के बीच के अंतर के बारे में यहां और वहां कुछ लेख देखे हैं, मुख्य रूप से यह कहते हुए कि वोल्टाइल इमेज हार्डवेयर त्वरित छवि है और तेजी से प्रति-संचालन के लिए वीआरएएम में संग्रहीत है। हालांकि, मुझे कुछ उदाहरण भी मिले हैं जहां बुफर्ड इमेज हार्डवेयर भी तेज हो गया है। क्या BufferedImage हार्डवेयर भी मेरे पर्यावरण में तेजी से बढ़ रहा है? वोल्टाइल इमेज का उपयोग करने का क्या फायदा होगा यदि दोनों प्रकार हार्डवेयर त्वरित हैं? त्वरण दोनों के मामले में वोल्टाइल इमेज रखने के लाभ के लिए मेरी मुख्य धारणा यह है कि वोल्टाइल इमेज का पता लगाने में सक्षम है जब उसके वीआरएएम को डंप किया गया है। लेकिन अगर BufferedImage अब त्वरण का समर्थन करता है, तो क्या इसमें उपयोगकर्ता के छिपे हुए मामले में, उपयोगकर्ता से छिपी हुई एक ही तरह की पहचान नहीं होगी?
3) वहाँ
someGraphicsConfiguration.getCompatibleImage/getCompatibleVolatileImage()
का उपयोग कर के रूप में
ImageIO.read()
करने का विरोध एक ट्यूटोरियल मैं सही प्रकार से प्रस्तुत खिड़की की स्थापना के बारे में कुछ सामान्य अवधारणाओं के लिए पढ़ने की है में (tutorial के लिए किसी भी लाभ है) यह getCompatibleImage विधि का उपयोग करता है, जो मुझे लगता है कि एक बुफर्ड इमेज लौटाता है, ताकि तेजी से ड्राइंग के लिए "हार्डवेयर त्वरित" छवियां प्राप्त हो सकें, जो हार्डवेयर के त्वरित होने पर प्रश्न 2 में संबंध रखती है।
4) यह कम हार्डवेयर त्वरण है, लेकिन यह कुछ है जो मैं उत्सुक हूं: क्या मुझे ऑर्डर करने की आवश्यकता है कि कौन से ग्राफिक्स खींचे जाए? मुझे पता है कि सी/सी ++ के माध्यम से ओपनजीएल का उपयोग करते समय यह सुनिश्चित करना सबसे अच्छा होता है कि उसी ग्राफ़िक को उन सभी स्थानों पर खींचा जाता है जिन्हें इसे एक बार में खींचा जाना चाहिए ताकि वर्तमान बनावट को स्विच करने की आवश्यकता को कम किया जा सके। जो मैंने पढ़ा है, ऐसा लगता है जैसे जावा मेरे लिए इसका ख्याल रखेगा और सुनिश्चित करेगा कि चीजें सबसे इष्टतम फैशन में खींची जाएंगी, लेकिन फिर से, इस तरह कुछ भी स्पष्ट रूप से कुछ भी नहीं कहा है।
5) क्या एडब्ल्यूटी/स्विंग कक्षाएं हार्डवेयर त्वरण का समर्थन करती हैं, और किसका उपयोग किया जाना चाहिए? मैं वर्तमान में एक कक्षा का उपयोग कर रहा हूं जो एक खिड़की बनाने के लिए जेएफआरएएम बढ़ाता है, और इसमें कैनवास जोड़ता है जिससे मैं एक बफरस्ट्रेटी बना देता हूं। क्या यह अच्छा अभ्यास है, या क्या कोई अन्य तरीका है जिस पर मुझे इसे लागू करना चाहिए?
आपके समय के लिए बहुत बहुत धन्यवाद, और मुझे उम्मीद है कि मैंने आपके कई प्रश्नों के उत्तर देने के लिए स्पष्ट प्रश्न और पर्याप्त जानकारी प्रदान की है।
क्या कोई विशेष कारण है कि अधिकांश/सभी उदाहरण कैनवास को स्टोर करने के लिए जेएफआरएएम का उपयोग करते हैं? जो मैंने समझा, उससे स्विंग बहुत भयानक है। आप फ़्रेम का उपयोग क्यों नहीं करेंगे? मेरे पास कोड है जो सिर्फ यही करता है, और ऐसा लगता है कि जेएफआरएएम से बनाना मुश्किल नहीं है। यह भी हार्डवेयर त्वरण सक्षम है अगर यह डिफ़ॉल्ट रूप से नहीं है? – Freezerburn
@ फ्रीज़रबर्न मुझे नहीं पता कि अधिकांश उदाहरण जेफ्रेम बनाम फ़्रेम का उपयोग क्यों करते हैं। मुझे कल्पना है कि यह एक जेएफआरएएम के साथ किया जाता है क्योंकि यह सबसे अधिक ज्ञात है। यह केवल अटकलें है, लेकिन मुझे लगता है कि जावा में मैन्युअल रूप से केवल एक शीर्ष स्तर कंटेनर (जेएफआरएएम, फ़्रेम, इत्यादि) और कैनवास के साथ प्रतिपादन करना आपके द्वारा चुने गए बीच में थोड़ा अंतर है। प्रतिपादन त्वरण को सक्रिय करने के लिए इस तर्क (-Dsun.java2d.opengl = true) को प्रोग्राम लॉन्चर पर जावा लॉन्चर में पास करें, या किसी भी प्रतिपादन पुस्तकालयों का उपयोग करने से पहले इसे सेट करें। (System.setProperty ("sun.java2d.opengl", "true");) यह एक वैकल्पिक पैरामीटर है। – Zixradoom
जेएफआरएएम स्विंग है जहां फ़्रेम/कैनवास एडब्ल्यूटी है। स्विंग नई घटक लाइब्रेरी है और एडब्ल्यूटी पुरानी बहिष्कृत लाइब्रेरी है। स्विंग हल्के वजन वाले घटकों का उपयोग करती है जहां एडब्ल्यूटी मूल घटक होता है। जेएफआरएएम पुराने एडब्ल्यूटी घटकों को पसंद करता है। – chubbsondubs