2014-11-17 2 views
2

비트 맵을 광범위하게 사용할 수있는 Android 앱을 개발 중이며 다른 기기에서 OpenGL의 최대 텍스처 크기를 얻을 수있는 확실한 방법을 찾고 있습니다.
최소 크기 = 2048x2048을 알고 있지만 더 높은 해상도 (예 : 2560x1600)가있는 이미 정제가 있기 때문에 충분하지 않습니다.
이 정보를 얻을 수있는 확실한 방법이 있습니까?

은 지금까지 나는 시도했다 :
OpenGL 최대 텍스처 크기 가져 오기

  • Canvas.getMaximumBitmapWidth() (32766을 반환하는 대신 2048)
  • GLES10.glGetIntegerv (GL10.GL_MAX_TEXTURE_SIZE ...) (반환 0)

나는 최소 SDK = 15 (ICS)와 함께 일하고 있어요 나는 그것을 얻기 위해 아수스 트랜스포머 TF700t 무한

사람이 알고 있나요 다른 방법에서 테스트거야? 또는 최대 캔버스 크기의 알려진 GPU 목록을 컴파일해야합니까?

+1

'glGetIntegerv()'를 호출 할 때 유효한 gl 컨텍스트가 있습니까? – derhass

답변

2

시도 사용 복호 화상 등 4096x4096, 8192x8192이 코드

int[] maxTextureSize = new int[1]; 
GLES10.glGetIntegerv(GL10.GL_MAX_TEXTURE_SIZE, maxTextureSize, 0); 

maxTextureSize 저장 크기 제한. MainThread에서이 코드를 실행해야합니다. 그렇지 않으면 0이됩니다.

+0

항상 0 ... –

+0

MainThread에 있더라도'E/libEGL : 현재 컨텍스트가없는 OpenGL ES API 호출 (스레드 당 한 번 기록) '을 수행하고 결과는 0이됩니다. – Weekend

1

허용되는 최대 높이를 부여합니다.

Canvas canvas = new Canvas(); 
canvas.getMaximumBitmapHeight()/8 
+0

하지만 그려진 뷰에 있다면 그렇지 않으면 일정한 가치를 얻게됩니다. –

+0

왜 8로 나누어야합니까? (작동하지만, 나는 호기심이있다) – AndroidRuntimeException

+0

그건 사실이 아니야. 소프트웨어 렌더링 캔버스의 getMaximumBitmap (Height | Width)()는 [상수 값]을 반환합니다 (https://android.googlesource.com/platform/frameworks/base/+/android-7.0.0_r21/graphics/java/). android/graphics/Canvas.java # 293), 하드웨어 가속화 캔버스는 [실제] (https://groups.google.com/d/msg/android-developers/UFjDiBUfY78/v0XWoBlkvR8J)'GL_MAX_TEXTURE_SIZE'를 반환합니다. 나는 여러 장치에서 그것을 테스트했다. 8로 나누는 것은 단순한 우연의 일치입니다. – Weekend