2011-12-13 4 views
4

나는 Android 용 간단한 라이브 벽지를 만들고 있습니다. 아래 코드를 사용하여 필요한 텍스처를 OpenGL ES 2.0에 업로드하고 있습니다. 모든 이미지를 2048x2048 크기의 단일 파일로로드했습니다. 아래 코드는 텍스처를로드하는 데 약 900에서 1200ms가 걸립니다. 이것은 정상적인 시간입니까, 아니면 천천히하기 위해 뭔가 잘못하고 있습니까?텍스처를 OpenGL 2.0에 빠르게 삽입하십시오.

또한 렌더러에서 onSurfaceCreated가 호출 될 때마다 OpenGL의 텍스처 목록을 지우려고합니다. 이 작업을 수행 할 수 있습니까? 아니면 이전에로드 된 텍스처가 이미 메모리에 있는지 확인하고 지우고 다시로드하는 것을 피하십시오. 이에 대한 귀하의 의견을 알려주십시오. 고맙습니다.

또한 화면 방향 변경시 OnSurfaceCreated가 호출됩니다. 따라서 텍스처 업로드가 다시 발생합니다. 이것은 좋은 생각이 아닙니다. 주위의 해결 방법은 무엇입니까?

public int addTexture(Bitmap texture) { 

    int bitmapFormat = texture.getConfig() == Config.ARGB_8888 ? GLES20.GL_RGBA : GLES20.GL_RGB; 

    int[] textures = new int[1]; 
    GLES20.glGenTextures(1, textures, 0); 
    int textureId = textures[0]; 
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureId); 

    GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmapFormat, texture, 0); 
    GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR_MIPMAP_LINEAR); 
    GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); 
    GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_REPEAT); 
    GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_REPEAT); 
    GLES20.glGenerateMipmap(GLES20.GL_TEXTURE_2D); 
    return textureId; 
} 

답변

3

몇 가지 방법으로 성능을 향상시킬 수 있습니다.

  1. onSurfaceChanged이 호출 될 때마다 텍스처를로드하지 마십시오. textureId을 -1 (렌더러의 생성자/surfaceCreated)로 -1로 초기화하고 다른 ID가있는 경우 onSurfaceChanged의 시작 부분을 확인합니다. glGenTextures으로 전화하면 양수가됩니다.
  2. 밉맵이 필요합니까? 여기가 귀하의 방법의 요점 일 수 있습니다. 선없이 시도하십시오 GLES20.glGenerateMipMap(GLES20.GL_TEXTURE_2D);
  3. 2048x2048은 거대합니다. 특히 텍스처 용. 그 많은 세부 사항이 정말로 필요합니까? 어쩌면 1024x1024이면 충분합니다.
  4. 대신 RGB_888을 사용하지 말고 RGB_565를 사용하십시오. 절반 크기에 대해 거의 동일한 화질을 얻습니다.
+0

크기가 2048x2048 인 이유는 응용 프로그램의 많은 항목이 하나의 파일에만 병합 되었기 때문입니다. 4 가지 1024x1024 파일로 텍스처를 쉽게 분할 할 수 있습니다. 하지만 4 개의 다른 파일을로드해야합니다. 이 방법으로 분할하면 실적이 향상되거나 4 개의 이미지를 업로드 할 때 업로드 시간이 늘어날 것입니까? – Vinodtiru

+1

다른 함수 호출과 관련된 일부 오버 헤드로 인해 파일을 분할하는 경우 업로드 시간이 늘어날 것이라고 말하고 싶지만 시도해야 할 수도 있습니다. –

+0

고맙습니다. 크기 2048x2048의 텍스처를로드하는 데 문제가 있는지 여부도 알고 싶습니다. 2.2 버전을 실행하는 오래된 안드로이드 폰에서 이미지 크기에 제한이 있다는 뜻입니까? – Vinodtiru

관련 문제