2012-02-04 6 views
0

몇 주 동안이 문제를 해결하기 위해 노력했지만 지금해야할 일을 알고 있습니다.Android OpenGL : 메모리가 부족할 가능성이 있습니까?

일부 안드로이드 장치는 텍스처의 양을로드 할만큼의 메모리를 가지고 있지 않다고 생각합니다. 문제를 일으키는 다른 것이 될 수 있지만, 실제로 이것을 어떻게 해야할지 모르기 때문에 말입니다.

전체 PNG가 1024x1024로로드되어 총 4.8MB가됩니다. 다음은로드 텍스처

GL10 gl = glGraphics.getGL(); 
    int[] textureIds = new int[1]; 
    gl.glGenTextures(1, textureIds, 0); 
    textureId = textureIds[0]; 

    InputStream in = null; 
    try { 
     in = fileIO.readAsset(fileName); 
     Bitmap bitmap = BitmapFactory.decodeStream(in); 
     gl.glBindTexture(GL10.GL_TEXTURE_2D, textureId); 
     GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0); 
     setFilters(GL10.GL_LINEAR , GL10.GL_LINEAR); 
     gl.glBindTexture(GL10.GL_TEXTURE_2D, 0); 
     width = bitmap.getWidth(); 
     height = bitmap.getHeight(); 
     bitmap.recycle(); 
    } catch(IOException e) { 
     throw new RuntimeException("Couldn't load texture '" + fileName +"'", e); 
    } finally { 
     if(in != null) 
      try { in.close(); } catch (IOException e) { } 
    } 

내 디자 이어 HD에 아무런 문제는 없습니다

의 OpenGL을 방법이지만, HTC 차 차에 텍스처를 많이 모두에 표시 해달라고과 갤럭시 S에 두 개의 텍스처는 그냥 흰색 나타납니다. 46 : 28.907 : E/Adreno200-ES20 (1501) override1 = 0xfffffffe, override2 = OXFFFF가 *

이상한 경우 텍스처

02-04 (15)를로드하면서 차차이 오류 발생 Cha Cha가 잠겨져 (OpenGL 텍스처가 파괴되었습니다.) 잠금 해제 된 (다시로드 된 텍스처) 초기에는 존재하지 않는 특정 텍스처가 이제는 보이지만 다른 텍스처는 이제 볼 수 없습니다.

메모리 문제입니까? 그렇다면이 문제를 해결할 방법이 있습니까?

감사

+0

텍스처가 4.8MB 이상의 메모리 소비를 유발하는 렌더링을 위해 비트 맵으로 디코딩된다는 점에 유의하십시오. – harism

+1

당신의 비트 맵이 RGBA 비트 맵인 경우, 1024x1024 * 4x28 = 117,440,512 바이트 또는 약 117 메가 헤르츠라고 할 수 있습니다. 그래서 예, 그것은 많은 휴대폰에 너무 많은 것 같습니다. – user1118321

+0

게임에 고해상도 이미지가 여러 개 포함될 경우 어떻게 가능합니까? – Chris

답변

1

올바른 솔루션은 압축을 PNG하지, 질감 압축입니다. PVR-TC은 필요한 것을 최대한 활용할 수 있습니다. 4-bpp에서는 117MB 대신 12MB로 줄였습니다. 심지어 RGB-565 형식과 같은 낮은 비트 심도 이미지 (픽셀 당 16 비트)를 사용하는 것만으로도 사용자의 요구를 절반으로 줄일 수 있습니다.

또한 휴대 전화에는 1024x1024 텍스처를 사용할 필요가 없습니다. 그건 잔인한 짓이야. 512x512 이미지로 벗어날 수 있습니다. PVR-TC와 함께 사용하면 모든 텍스처 데이터에 대해 약 3MB 만 필요합니다.

+0

안녕하세요, 조언 주셔서 감사합니다. 이 압축 형식은 .png를 PVR-TC 형식으로 변환 한 다음 PNG 대신 사용합니다. – Chris

관련 문제