Il y a principalement quatre textures types de compression pris en charge sur Android:
-
ETC1 (Ericcson compression de texture). Ce format est pris en charge par tous les téléphones Android. Mais, Il ne prend pas en charge un canal alpha, ne peut donc être utilisé pour opaque textures.
-
PVRTC (PowerVR compression de texture). Pris en charge par les dispositifs de Gpu PowerVR (Nexus S, Kindle fire...).
-
ATITC (ATI compression de texture).Utilisés dans les appareils avec GPU Adreno de Qualcomm (Nexus One...).
-
S3TC (S3 compression de texture). Cette texture de compression est utilisé dans la NVIDIA chipset integrated devices (périphériques intégrés (Motorola Xoom...)
Des informations plus détaillées ici et ici.
En bref, si vos textures n'ont pas l'alpha, vous pouvez utiliser ETC1. Si fait, et vous voulez soutenir tous les appareils, vous devez avoir votre textures compressées dans les trois autres types et de les charger en fonction de l'appareil.
Comment l'utiliser:
Compresser vos fichiers png (Vous pouvez utiliser un outil comme ETC-Pack, PVRTexTool, ATI Compressonator, Nvidia Texure Outils en fonction du type de texture) et les ajouter à l'actif du projet.
-
Déterminer les extensions sont disponibles dans l'appareil, si vous ne l'utilisez pas ETC1:
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
String s = gl.glGetString(GL10.GL_EXTENSIONS);
if (s.contains("GL_IMG_texture_compression_pvrtc")){
//Use PVR compressed textures
}else if (s.contains("GL_AMD_compressed_ATC_texture") ||
s.contains("GL_ATI_texture_compression_atitc")){
//Load ATI Textures
}else if (s.contains("GL_OES_texture_compression_S3TC") ||
s.contains("GL_EXT_texture_compression_s3tc")){
//Use DTX Textures
}else{
//Handle no texture compression founded.
}
}
Chargement de texture compressée en tant que données brutes.
-
Utilisation glCompressedTexImage2D au lieu de glTexImage2D:
public void onDrawFrame(GL10 gl) {
....
gl.glCompressedTexImage2D(GL10.GL_TEXTURE_2D, level, internalformat, width,
height, border, imageSize, data);
}