2012-02-13 16 views
5

आईपैड 2 जीपीयू का प्रदर्शन तरीका आईपैड 1 से बेहतर है। मैं अपने ऐप में स्विच करना चाहता हूं और कुछ अतिरिक्त अच्छा ग्राफिकल सूक्ष्मता जोड़ना चाहता हूं जब मुझे पता है कि जीपीयू इसे संभाल सकता है।आईपैड 1 बनाम आईपैड 2 जीपीयू निर्धारण के लिए सर्वश्रेष्ठ तकनीक?

तो मैं आईपैड 1 और 2 (और बाद में) के बीच अनिवार्य रूप से भेद का पता लगाने में सक्षम होना चाहता हूं, आदर्श रूप से एक क्षमता पहचान के करीब के रूप में उपयोग कर सकता हूं। बहुत सी असंबद्ध चीजें हैं जिन पर मैं स्विच कर सकता हूं (कैमरा की उपस्थिति, आदि), लेकिन आदर्श रूप में मैं कुछ खोजना चाहता हूं, शायद एक ओपनजीएल क्षमता, जो जीपीयू को अधिक सीधे अलग करता है।

यह Apple page कुछ भी आईपैड 1 के लिए उपयोगी सूची है नहीं बनाम 2, और बेंच मार्किंग और GPU मेहराब मतभेदों के बारे में बात करती है this article लेकिन कुछ भी है कि लग रहा है इंगित नहीं करता है जैसे मैं सीधे क्वेरी कर सकता है (बनावट इकाइयों या जो कुछ भी की जैसे संख्या)।

किसी के पास यह कैसे करना है, इस बारे में कोई विचार है, या क्या मुझे कुछ याद आ रही है? धन्यवाद।

+1

अरे, मुझे लगता है कि यह मदद करनी चाहिए: http://stackoverflow.com/questions/448162/determine-device-iphone-ipod-touch-with-iphone-sdk क्षमताओं को UIDevice से वापसी मूल्य द्वारा निर्धारित किया जाता है। आईपैड 2 को "आईपैड 2, एक्स" के रूप में वापस किया जाता है, जहां "एक्स" आईपैड का उप-संस्करण है। –

+2

क्या आप सुनिश्चित हैं कि क्षमता का पता लगाने का तरीका यहां जाना है? यह दृष्टिकोण वेब अनुप्रयोगों की जंगली दुनिया में समझ में आ सकता है, जहां प्रत्येक ब्राउज़र का हर संस्करण चीजों को अलग करता है, लेकिन मुझे यकीन नहीं है कि यह आईओएस ऐप्स पर लागू होता है। आईओएस ऐप हार्डवेयर, सॉफ्टवेयर के सीमित, विशिष्ट सेट पर चलने जा रहे हैं। आप शायद उन उपकरणों के मुट्ठी भर * ब्लैकलिस्ट * से सुरक्षित रहें जो आपको पता है कि अच्छी तरह से प्रदर्शन नहीं करते हैं, अन्यथा सुंदर प्रभावों को चालू करते हैं। – Charles

+1

@ चार्ल्स - इस मामले में, GPU की शक्ति निर्धारित करने के लिए यह समझ में आता है, क्योंकि आईपैड 1 और 2 के बीच प्रदर्शन में एक बड़ा अंतर है (मैंने कुछ मामलों में दोनों के बीच 7 एक्स अंतर देखा है)। 3-डी सामग्री पेश करने के लिए, यह डिवाइस में डिवाइस की शक्ति के आधार पर बनावट, ज्यामिति और शेडर्स को स्केल करने के लिए वास्तव में उपयोगी हो सकता है। एक धीमी डिवाइस ब्लैकलिस्ट शायद ठीक है, लेकिन मुझे अपना ओपनजीएल ईएस क्षमता-आधारित समाधान थोड़ा बेहतर पसंद है, क्योंकि इसे ऐप्पल के खिलाफ पुराने जीपीयू का उपयोग करने वाले कुछ नए मॉडल को रोल करने से बचा जाना चाहिए। –

उत्तर

10

एक भेद जो आप पूछ सकते हैं अधिकतम बनावट आकार है। आईपैड 2 और आईफोन 4 एस पर, अधिकतम बनावट आकार 4096 x 4096 है, जहां अन्य सभी आईओएस उपकरणों पर यह 2048 x 2048 है। ऐसा लगता है कि मुझे एक सुरक्षित धारणा है कि भविष्य में, अधिक शक्तिशाली आईओएस उपकरणों में अधिकतम बनावट भी होगी कम से कम इस बड़े आकार।

अधिकतम बनावट आकार के लिए क्वेरी के लिए, पहले अपने OpenGL ES संदर्भ बनाते हैं, तो वर्तमान संदर्भ के रूप में सेट और निम्न क्वेरी चलाएँ:

GLint maxTextureSize; 
glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxTextureSize); 

अपने iPhone 4 पर, यह 2048 रिटर्न maxTextureSize में, लेकिन मेरे iPad 2 और iPhone 4S पर इस तुम भी कुछ नए एक्सटेंशन है कि इस तरह के रूप में EXT_shadow_samplers आईपैड 2 का समर्थन करता है, (अधिक "What's New in iOS: iOS 5.0" में दर्ज कर रहे हैं) की उपस्थिति के लिए परीक्षण कर सकते हैं 4096.

का मूल्य वापस देता है, लेकिन वे परीक्षण केवल आईओएस 5.0 पर काम करेंगे। आईओएस 4.x पर अभी भी स्ट्रैग्लर्स उन क्षमताओं को पंजीकृत नहीं करेंगे।

+0

धन्यवाद ब्रैड। मैंने GPUs में अधिकतम बनावट आकार परिवर्तन को याद किया। यह एक अच्छा shibboleth है। –

1

आज अधिक जीपीयू उपलब्ध है, यहां मैं अपनी जरूरतों के साथ आया हूं।

enum GpuClass { 
    kGpuA5 = 0, 
    kGpuA6, 
    kGpuA7, 
    kGpuA8, 
    kGpuUnknown, 
} ; 

- (enum GpuClass)reportGpuClass { 

    NSString *glVersion = [NSString stringWithUTF8String:(char *)glGetString(GL_VERSION)]; 

    if ([glVersion containsString:@"Apple A5"] || [glVersion containsString:@"S5L8"]) { 
     NSLog(@"Running on a A5 GPU"); 
     return kGpuA5; 
    } 

    if ([glVersion containsString:@"Apple A6"] || [glVersion containsString:@"IMGSGX5"]) { 
     NSLog(@"Running on a A6 GPU"); 
     return kGpuA6; 
    } 

    if ([glVersion containsString:@"Apple A7"] || [glVersion containsString:@"G6430"]) { 
     NSLog(@"Running on a A7 GPU"); 
     return kGpuA7; 
    } 

    if ([glVersion containsString:@"Apple A8"] || [glVersion containsString:@"GXA6850"]) { 
     NSLog(@"Running on a A8 GPU"); 
     return kGpuA8; 
    } 

    return kGpuUnknown; 
} 

आप अधिक पूर्ण संस्करण संख्या निर्दिष्ट करके विशिष्ट चिप्स के बीच और अंतर कर सकते हैं। जैसे केवल IMGSGX5 के बजाय IMGSGX543 निर्दिष्ट करें।