나는 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;
}
크기가 2048x2048 인 이유는 응용 프로그램의 많은 항목이 하나의 파일에만 병합 되었기 때문입니다. 4 가지 1024x1024 파일로 텍스처를 쉽게 분할 할 수 있습니다. 하지만 4 개의 다른 파일을로드해야합니다. 이 방법으로 분할하면 실적이 향상되거나 4 개의 이미지를 업로드 할 때 업로드 시간이 늘어날 것입니까? – Vinodtiru
다른 함수 호출과 관련된 일부 오버 헤드로 인해 파일을 분할하는 경우 업로드 시간이 늘어날 것이라고 말하고 싶지만 시도해야 할 수도 있습니다. –
고맙습니다. 크기 2048x2048의 텍스처를로드하는 데 문제가 있는지 여부도 알고 싶습니다. 2.2 버전을 실행하는 오래된 안드로이드 폰에서 이미지 크기에 제한이 있다는 뜻입니까? – Vinodtiru