2011-12-16 16 views
10

भिन्न हैं, मैं एंड्रॉइड और आईफोन के लिए ओपनजीएल ईएस 1.1 ऐप कोडिंग कर रहा हूं। ओपनजीएल ईएस इंजन एक साझा लाइब्रेरी में रहता है और एंड्रॉइड पर एनडीके के माध्यम से पहुंचा जा सकता है।एंड्रॉइड बनाम आईओएस पर ओपनजीएल: ऑप्टिमाइज़ेशन, और जहां वे

मैं अपने ओपनजीएल प्रदर्शन को अनुकूलित करने के लिए देख रहा हूं। वीडियो और संसाधनों के बहुत सारे बाहर, नहीं है उदा .:

http://www.vizworld.com/2010/02/ngmocos-tim-omernick-optimizing-opengl-iphone/

http://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/Performance/Performance.html#//apple_ref/doc/uid/TP40008793-CH105

http://developer.apple.com/library/ios/#documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/TechniquesforWorkingwithVertexData/TechniquesforWorkingwithVertexData.html

OpenGL ES 2.0 : Seeking VBO Performance/Optimisation Tips For Many Moving Vertices

When are VBOs faster than "simple" OpenGL primitives (glBegin())?

https://gamedev.stackexchange.com/questions/1068/opengl-optimization-tips

लेकिन आम तौर पर वहाँ अच्छी तरह से जाना जाता है तकनीक है कि सार्वभौमिक लागू होते हैं, जैसे:

  • उपयोग शिखर बफर वस्तुओं (VBOs)
  • ओपन राज्य को कम से कम में परिवर्तन
  • उपयोग बनावट atlassing जहां संभव चयन करने के लिए होने से बचाने के कई अलग अलग बनावट

कुछ तकनीकों रहे हैं, या हो सकता है, उनके विशेष में थोड़ा अधिक संवेदनशील है, और Android और iPhone के बीच भिन्न हो सकती है, और कहा कि क्या मैं में रुचि हूँ। examp के लिए ले:

  • प्रत्येक चरम के अंदर अपना कशेरुका डेटा इंटरलीव करें: उदा। वर्टेक्स समन्वय; बनावट समन्वय; सामान्य। क्या interleaving में वस्तुओं का एक पसंदीदा आदेश है?
  • प्रत्येक वर्टेक्स को बाइट्स के कुछ हिस्सों के अगले एकाधिक में पैड आउट करें। मुझे 32 नंबरों के बारे में बताया गया है, लेकिन कुछ स्थानों में 4 या 8 भी देखे गए हैं।
  • बल्कि एक नाव से, एक छोटी या प्रत्येक वर्टेक्स के लिए इसी तरह के समन्वय के उपयोग पर विचार

तो मेरे सवाल है: क्या कर रहे हैं इस तरह के पिछले सूची के ऊपर है कि Android और iPhone के बीच भिन्न रूप में जादू अनुकूलन पर अधिक स्पष्ट विवरण ? जहां वे भिन्न हैं, सबसे अच्छी रणनीति क्या है? बस एक मूल्य का उपयोग करें जो दोनों दुनिया के अनुरूप है? (मंच पर निर्भर करता है कि प्लेटफार्म के आधार पर रनटाइम पर इस तरह के विवरण शीर्ष पर थोड़ा सा हो सकता है?)

+3

मैं इस क्षेत्र में कोई विशेषज्ञ नहीं हूं, लेकिन अनुकूलन AFAIK मुख्य रूप से अंतर्निहित चिप पर निर्भर करता है। आईफ़ोन (थोड़ा) अधिक GPU चिप्स में संगत कर रहे हैं, लेकिन एंड्रॉयड में आप कई GPU चिप्स हो सकता है: Adreno 2xx, PowerVR SGXxxx, Malixxx, Tegra2। कार्यशीलताओं में अंतर भी हैं। इसके अलावा, जिज्ञासा से बाहर? आप 1.1 का उपयोग क्यों करते हैं और 2.0 नहीं? मैं प्रोग्राम shaders के साथ लगता है कि आप कोड बेहतर (और निश्चित रूप से अपने आवेदन कम उपकरणों suport होगा ... लेकिन AFAIK आजकल हर Android डिवाइस 2.0 supoorts) –

+0

ओपन ES1.1 का उपयोग कर के रूप में अनुकूलन कर सकते हैं: यह कुछ पुराने उपकरणों का समर्थन करने की बात है । चिपसेट के बारे में अच्छा बिंदु! – MeinHeinlein

उत्तर

1

उत्तर में प्रमुख (रूढ़िवादी) अनुकूलन का उल्लेख किया गया है। हालांकि, कुछ अन्य कम ज्ञात तकनीकों कि मोबाइल उपकरणों पर प्रतिपादन के लिए लागू कर रहे हैं:

  1. घड़ी दर और मोबाइल GPUs की स्मृति बैंडविड्थ काफी कम डेस्कटॉप राक्षसों की तुलना में कर रहे हैं। जितना संभव हो सके ओवरड्रा और बनावट को कम करना बुद्धिमान होगा। सीपीयू-स्तरीय छिपी सतह हटाने एल्गोरिदम और तकनीकों का उपयोग करने पर विचार करें।

  2. विशिष्ट चिप्स के लिए अपने कोड को ठीक ट्यून करने के लिए विक्रेता-विशिष्ट प्रोफाइलर का उपयोग करें। यदि प्रदर्शन विक्रेता से विक्रेता में महत्वपूर्ण रूप से भिन्न होता है तो विभिन्न कोड पथ का उपयोग करें।

  3. एक बार फिर, मोबाइल उपकरणों पर भरना सार का है। छोटे डेटा प्रकारों का प्रयोग करें, कम बनावट प्राप्त करें।यह विशेष रूप से नए आईपैड पर ऐप्पल के रेटिना डिस्प्ले के लिए सच है। उचित सूत्रों के लिए बनावट लुकअप पर गणनाओं को प्राथमिकता दें (आपको प्रोफ़ाइल चाहिए)।