E 'bene che siete alla ricerca di qualcosa di specifico per metallo - in generale, iOS versione verifiche e controlli dei nomi hardware sono fragili, perché si basano su vostra applicazione conoscere tutte le versioni del sistema operativo e dei dispositivi che potrebbe mai funzionare esso. Se Apple dovesse tornare indietro e rilasciare una versione di iOS 7.x che ha aggiunto il supporto di Metal (ok, sembra improbabile), o un dispositivo che supporti Metal ma non è uno dei nomi hardware che stai guardando (sembra molto più probabile), rimarrai bloccato nel dover rintracciare tutte queste cose e aggiornare la tua app per gestirle.
In ogni caso, il modo migliore per verificare se il dispositivo su cui stai lavorando è abbastanza metallo per il tuo fantastico codice grafico? Basta cercare di ottenere un oggetto MTLDevice
:
id<MTLDevice> device = MTLCreateSystemDefaultDevice();
if (device) {
// ready to rock
} else {
// back to OpenGL
}
Nota che proprio test per la presenza di una classe quadro di metallo non aiuta - le classi ci sono su qualsiasi dispositivo con iOS 8 (tutta la strada fino al iPhone 4s & iPad 2), indipendentemente dal fatto che quel dispositivo abbia una GPU compatibile con Metal.
Inoltre, non vi è alcuna struttura metallica in iOS Simulator, quindi è necessario inserire alcuni #if
s attorno a questo e qualsiasi altro codice di metallo se si eseguono test del simulatore (delle parti della propria app che don ' t utilizzare le API GPU, perché il simulatore è un imitatore scarso delle prestazioni della GPU del dispositivo, anche per GL).
1. "MTLDevice' non è una classe; è un protocollo, quindi questo test fallirà anche su dispositivi supportati da Metal. 2.Le classi nel framework Metal sono ancora lì su dispositivi non supportati da Metal (non puoi fare nulla con loro), quindi testare la loro presenza non ti dirà se puoi eseguire il rendering con Metal. Vedi [la mia risposta] (http://stackoverflow.com/a/29903799/957768). – rickster
Sì, grazie per aver indicato. In realtà non ho controllato se fosse una classe o un protocollo. Il mio punto era verificare una delle classi disponibili. La tua soluzione è corretta. – Krivoblotsky