Ho un gioco OpenGL consistente in texture che mi piacerebbe ottimizzare in base alla quantità di RAM del dispositivo. Le trame ad alta risoluzione che ho lavorato bene su un iPhone 4 o iPad2, ma i dispositivi precedenti si bloccano nel mezzo del caricamento delle trame. Ho versioni a bassa risoluzione di queste trame, ma ho bisogno di sapere quando usarle.Risposta alla disponibilità della RAM in iOS
mia tattica attuale è quella di rilevare i dispositivi specifici anziani (3GS ha una bassa risoluzione dello schermo; iPad non ha fotocamera), quindi caricare solo le texture ad alta risoluzione per iPad2 e superiori e iPhone 4 e superiori - e suppongo Dovrò fare qualcosa per l'iPod touch. Ma preferirei utilizzare il rilevamento di funzionalità piuttosto che i modelli di dispositivi hard-coding, dal momento che il rilevamento dei modelli è fragile rispetto alle future modifiche alle API e all'hardware.
Un'altra possibilità che sto considerando è caricare prima le trame ad alta risoluzione, quindi rilasciarle e sostituirle con lo-res nel momento in cui viene visualizzato un avviso di memoria insufficiente. Tuttavia, non sono sicuro che avrò la possibilità di risposta; Ho notato che l'app spesso muore prima che venga visualizzata una notifica sulla console di debug.
Come posso rilevare se il dispositivo su cui sto lavorando ha RAM insufficiente per caricare versioni ad alta risoluzione delle mie trame?
Facendo un passo indietro, c'è qualche altra tecnica adattiva che posso usare specifica per la memoria texture OpenGL?
Note:
Ho cercato on e off SO di risposte relative alla rilevazione di RAM disponibile, ma tutti fondamentalmente consigliamo profiling utilizzo della memoria e l'eliminazione degli sprechi (ridurre al minimo la durata di provvisori, e tutto ciò che guff). Ho fatto tutto ciò che posso, e non ho intenzione di spremere le texture ad alta risoluzione nei vecchi dispositivi.
PVRTC non è un'opzione. Le trame contengono dati che devono essere utilizzati da frammenti shader e devono essere archiviati in un formato senza perdita di dati.
Nota che puoi ottenere sia la RAM totale che le statistiche di RAM gratuite come descritto in questo thread [memoria libera su iOS] (http://stackoverflow.com/questions/5012886). Inoltre, ho testato il codice sul mio iPhone 4 e funziona bene! –