2010-05-03 16 views
8

एंड्रॉइड एसडीके का जीएलएसयूफेस व्यू। रेन्डरर इंटरफ़ेस मुझे एक जीएल इंटरफेस देता है जिसमें पैरामीटर है जिसमें टाइप जीएल 10 है। यह इंटरफ़ेस कुछ निजी आंतरिक जेनी रैपर वर्ग द्वारा कार्यान्वित किया जाता है। लेकिन कक्षा GLES10 भी है जहां सभी जीएल विधियां स्थैतिक तरीकों के रूप में उपलब्ध हैं। क्या उनके बीच कोई महत्वपूर्ण अंतर है? तो क्या होगा यदि मैं ऑन ड्राफ्रेम के ग्लो पैरामीटर को अनदेखा करता हूं और इसके बजाय हर जगह GLES10 के स्थिर तरीकों का उपयोग करता हूं?एंड्रॉइड पर जीएल 10 और जीएलएस 10 के बीच अंतर

यहाँ एक उदाहरण है। इसके बजाय ऐसा करने का:

void onDrawFrame(GL10 gl) 
{ 
    drawSomething(gl); 
} 

void drawSomething(GL10 gl) 
{ 
    gl.glLoadIdentity(); 
    ... 
} 

मैं ऐसा कर सकता है:

void onDrawFrame(GL10 gl) 
{ 
    drawSomething(); 
} 

void drawSomething() 
{ 
    GLES10.glLoadIdentity(); 
    ... 
} 

लाभ यह है मैं सभी बुलाया तरीकों के जीएल संदर्भ पारित करने के लिए की जरूरत नहीं है कि। लेकिन यहां तक ​​कि यह काम करता है (और यह काम करता है, मैंने कोशिश की) मुझे आश्चर्य है कि क्या ऐसा कोई नुकसान नहीं है और ऐसा करने के कारण नहीं हैं।

उत्तर

6

मैं उस प्रश्न का उत्तर देने के लिए स्रोत कोड में चारों ओर घूम रहा हूं। जहां तक ​​मैं कह सकता हूं, ओपनजीएल कार्यान्वयन का आह्वान करने के दोनों तरीके एक ही मूल कार्य कॉल पर जाते हैं। हालांकि, मेरी समझ यह है कि वर्चुअल विधि प्रेषण के बजाय जावा-साइड एक्सेस स्थिर तरीकों के माध्यम से तेज़ है (http://developer.android.com/guide/practices/design/performance.html#prefer_static देखें)।

दुविधा यह है कि आप प्रकार-चेकिंग की एक निश्चित राशि जब कॉल कि ओपन के बाद के संस्करणों में ही उपलब्ध हैं तक पहुँचने का त्याग है। आप वस्तु के माध्यम से कॉल का उपयोग करते हैं, आपको पहले एक डाली क्या करना है, और कहा कि कलाकारों अगर जीएल के संस्करण आप इंटरफ़ेस का समर्थन नहीं करता उपयोग कर रहे हैं असफल हो जायेगी। स्थिर विधि के माध्यम से कॉल एक्सेस करते समय, मुझे लगता है कि क्या होगा ओपन त्रुटि राज्य, का गठन किया जाएगा जो कि कठिन हो सकता है पता लगाने के लिए जब तक आप GLSurfaceView पर डिबगिंग मोड निर्धारित किया है।

अभी के लिए मैं स्थिर तरीकों के माध्यम से सब कुछ एक्सेस कर रहा हूं, और जब तक कोड स्थिर नहीं हो जाता है, तब तक मैं जीएलएसयूफेस व्यू में डीबग-मोड छोड़ दूंगा, जिस बिंदु पर मैं इसे बंद कर दूंगा।

  • क्रिस
संबंधित मुद्दे