2011-03-09 3 views
3

OpenGL ES의 내 장면에는 여러 개의 큰 해상도 텍스처가 필요하지만 마스크 만 사용하기 때문에 회색 음영입니다. 내 기억력을 줄여야 해.OpenGL ES 1.1에서 텍스처의 메모리 사용량 줄이기

이러한 텍스처를 Bitmap.Config.ALPHA_8 및 RGB_565로로드하려고했습니다. ALPHA_8은 실제로 메모리 사용량을 증가시키는 것 같습니다.

텍스처를 OpenGL에로드하고 픽셀 당 16 비트 미만을 사용하는 방법이 있습니까?

glCompressedTexImage2D는 유망한 것처럼 보이지만 내가 말할 수있는 것부터 다른 휴대폰이 다른 텍스처 압축 방법을 제공합니다. 또한 압축이 실제로 런타임시 메모리 사용량을 줄이는 지 여부는 알 수 없습니다. 내 텍스처를 ATITC 및 PVRTC 형식으로 저장하는 솔루션입니까? 그렇다면 어떻게 장치에서 지원되는 형식을 감지합니까?

감사합니다.

답변

10

PVRTC, ATITC, S3TC 등의 경우 GPU 기본 압축 텍스처는 메모리 사용을 줄이고 렌더링 성능을 향상시켜야합니다. 당신의 AndroidManifest.xml에 텍스처 형식을 사용하여 지원되는 장치를 지정할 수 있습니다 외에

예를 들어,

const char *extensions = glGetString(GL_EXTENSIONS); 
int isPVRTCsupported = strstr(extensions, "GL_IMG_texture_compression_pvrtc") != 0; 
int isATITCsupported = strstr(extensions, "GL_ATI_texture_compression_atitc") != 0; 
int isS3TCsupported = strstr(extensions, "GL_EXT_texture_compression_s3tc") != 0; 

if (isPVRTCsupportd) { 
    /* load PVRTC texture using glCompressedTexImage2D */ 
} else if (isATITCsupported) { 
... 

를 (C에서 죄송합니다, 당신은 자바 GL11.glGetString을 사용으로 구현할 수 있습니다).

편집 : 상상으로

+1

비트 맵을로드하고 런타임에 압축하여 다른 형식의 이미지를 여러 개 복사 할 필요가없는 방법이 있습니까? ATITC 형식의 설명서를 찾을 수 없습니다. – Tenfour04

+1

S3TC의 경우 [libsquish] (http://code.google.com/p/libsquish/)를 사용할 수 있습니다. 그러나 AFAIK, Imagination Technologies 및 AMD는 Windows 용 압축 라이브러리 바이너리 만 제공합니다. –

+0

이러한 형식 중 하나로 압축 된 파일에서 크기 및 형식을 추출하는 방법이 있습니까? 아니면 해당 메타 데이터에 어딘가에 저장해야합니까? – EboMike

2

(일명 파워 VR) 기술 기반의 시스템, 당신은 PVRTC의 4bpp를 사용할 수 있어야하고 (질감 및 품질 요구 사항에 따라 다름) 심지어 2bpp PVRTC 변형 일 수 있습니다.

PVRTextool은 I8 (즉 그레이 스케일 8bpp)을 대상 텍스처 형식으로 나열하여 무손실 옵션을 제공합니다.

1

ETC1 텍스처 압축은 Android 2.2 이상이 설치된 모든 Android 장치에서 지원됩니다.

관련 문제