我已经编写了以下函数来获取Android上的最大纹理大小。该函数应该在UI线程上运行,并且不能假设已经设置了EGLContext。
它似乎适用于我的测试设备,但我对OpenGl和Android都相当新,而且我对代码并不完全有信心。我依靠试错法和一些复制粘贴而没有完全理解事物。
您是否发现代码存在任何问题?具体做法是:
这是代码(在Kotlin中):
private fun getGLMaxTextureSize():Int {
// Get display.
val display = EGL14.eglGetDisplay(0)
// Choose config.
val configSpec = intArrayOf(EGL14.EGL_NONE)
val configs = arrayOfNulls<EGLConfig>(1)
var num_config = IntArray(1)
EGL14.eglChooseConfig(display, configSpec, 0, configs, 0,1, num_config, 0)
// Create context.
val attribs = intArrayOf(EGL14.EGL_CONTEXT_CLIENT_VERSION, 2, EGL10.EGL_NONE)
val context = EGL14.eglCreateContext(display, configs[0], EGL14.EGL_NO_CONTEXT, attribs, 0)
EGL14.eglMakeCurrent(display, EGL14.EGL_NO_SURFACE, EGL14.EGL_NO_SURFACE, context)
// Read texture size.
val intBuffer = IntArray(1)
GLES20.glGetIntegerv(GLES20.GL_MAX_TEXTURE_SIZE, intBuffer, 0)
// Cleanup.
EGL14.eglMakeCurrent(display, EGL14.EGL_NO_SURFACE, EGL14.EGL_NO_SURFACE, EGL14.EGL_NO_CONTEXT)
EGL14.eglDestroyContext(display, context)
return intBuffer[0]
}