2010-06-10 19 views
5

मुझे पता है कि आईफोन पर ओपनजीएल बनावट 2 की शक्ति होने की आवश्यकता है, क्या यह ओपनजीएल 2.0 के साथ भी सच है? अगर मेरे पास एक छवि है जो 320 x 480 आकार में है और इसे पूर्ण स्क्रीन खींचना है तो ओपनजीएल के साथ ऐसा करने का कोई भी संभावित तरीका है।फुलस्क्रीन बनावट आईफोन ओपनजीएल ईएस

धन्यवाद

उत्तर

10

एनपीओटी बनावट पावरवीआर एसजीएक्स हार्डवेयर पर समर्थित है, लेकिन प्रतिबंध हैं। एनपीओटी बनावट मिपमैप्स का उपयोग नहीं कर सकते हैं, 2 डी (कोई क्यूब-मैप्स या 3 डी बनावट) होना चाहिए और दोनों आयामों में बनावट रैपिंग के लिए GL_CLAMP_TO_EDGE का उपयोग करना चाहिए; इस विस्तार से ओपन ES 2.0 में और ES 1.1 के तहत डिफ़ॉल्ट रूप से समर्थित है GL_APPLE_texture_2D_limited_npot

ES 1.1 के लिए, आप रनटाइम पर जांच कर सकते हैं देखने के लिए अगर इस विस्तार के इस कोड के साथ मौजूद है:

const char* extensions = (char*) glGetString(GL_EXTENSIONS); 
bool npot = strstr(extensions, "GL_APPLE_texture_2D_limited_npot") != 0; 

इस के बाद से केवल एसजीएक्स पर मौजूद है और एमबीएक्स नहीं, जागरूक रहें कि एनपीओटी बनावट समर्थन पर निर्भर आपको नए एसजीएक्स उपकरणों तक सीमित कर देगा। बेशक, ईएस 2.0 पर भरोसा करना वही होगा, इसलिए यदि यह आपका इच्छित लक्ष्य है, तो एनपीओटी समर्थन एक महत्वपूर्ण बिंदु है और आप एनपीओटी बनावट के साथ आगे बढ़ सकते हैं।

यहां एक वैकल्पिक समाधान है जो आपको ES 1.1 का उपयोग जारी रखने और पूर्ण डिवाइस समर्थन को बनाए रखने देता है। 320x480 बनावट को 512x512 के अंदर रखें, अन्य पृष्ठभूमि टाइल्स, ग्लाइफ, या अन्य बनावट के साथ व्हाइटस्पेस को भरें जो एक ही समय में खींचे जाएंगे (एकाधिक glBindTexture कॉल से बचने के लिए) और फिर मेरे पसंदीदा ES 1.1 एक्सटेंशन, GL_OES_draw_texture में से एक का उपयोग करें जल्दी से व्यूपोर्ट पर 320x480 अनुभाग कॉपी:

int rect[4] = {0, 0, 480, 320}; 
glBindTexture(GL_TEXTURE_2D, texBackground); 
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, rect); 
glDrawTexiOES(0, 0, z, 480, 320); 

साइडबार: ओपन ES 2.0 कल्पना ही NPOT बनावट पर कोई प्रतिबंध निर्दिष्ट नहीं करता है; जब तक कि मैं गलत नहीं हूं, ऐप्पल सीमाओं को लागू कर रहा है - बेशक, ईएस 1.1 दुनिया में, एनपीओटी समर्थन बिल्कुल मौजूद नहीं है, इसलिए यह वहां एक जोड़ा है।

+0

धन्यवाद क्रिस, बहुत अच्छी जानकारी। मुझे नोब होने के लिए क्षमा करें, लेकिन glDrawTexiOES() में z पैरामीटर क्या है? गहराई? मुझे कोई दस्तावेज नहीं मिल रहा है। धन्यवाद –

+0

@ बेन: ओह, इसके बारे में खेद है। जेड आयताकार की गहराई है - 0 निकटतम विमान है, 1 दूरदराज का विमान है, और दशमलव मान आपको उनके बीच की दूरी का प्रतिशत देते हैं। उपर्युक्त उदाहरण में, यह सख्ती से 2 डी दृश्य "चित्रकार के एल्गोरिदम" के साथ अपनी गहराई का प्रबंधन करने के लिए था इसलिए z = 0; पृष्ठभूमि के अधिकांश उपयोगों के लिए आप z = 1 चाहते हैं जब तक कि आपने अपनी गहराई सीमा को उलटा नहीं किया हो। ओपनजीएल स्पेक पेज इसे थोड़ा बेहतर बताता है: (http://www.khronos.org/registry/gles/extensions/OES/OES_draw_texture.txt - पृष्ठ के आधे रास्ते के बारे में) मिट्टी के रूप में साफ़ करें? :) –

1

मान लिया जाये कि आप भी कई पूर्ण स्क्रीन बनावट की जरूरत नहीं है, तो आप सिर्फ एक 512x512 बनावट इस्तेमाल कर सकते हैं और केवल इसके बारे में 320x480 का उपयोग करें। यह निश्चित रूप से काम करेगा।

1

मुझे लगता है कि हार्डवेयर पर निर्भर करता है। मैं 2 बनावट की सबसे नज़दीकी शक्ति बनाने के लिए उपयोग करता था, अगर मेरा बनावट 320x480 है तो मैं 512x512 का बनावट बनाउंगा जिसमें मूल बनावट डेटा होगा। यह पोर्टेबिलिटी सुनिश्चित करता है लेकिन थोड़ा अधिक स्मृति का उपभोग करता है;)

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