为Android上的OpenGL获取最大纹理尺寸的function(可以在UI线程上运行)

我已经写了下面的函数来获取Android上的最大纹理大小。 该函数应该在UI线程上运行,并且不能假定已经设置了EGLContext。

它似乎在我的测试设备上工作,但我对OpenGl和Android都相当陌生,而且我对代码没有充分的信心。 我依靠反复试验和一些复制粘贴而没有完全理解的东西。

你看到有关代码的任何问题? 特别:

  1. 这是强大的? 我是否在不知不觉中做出了错误的假设?
  2. 我是否正确清理资源?
  3. 它可以变得更简单吗?

这里是代码(在Kotlin):

private fun getGLMaxTextureSize():Int { // Get display. val display = EGL14.eglGetDisplay(0) // Choose config. val configSpec = intArrayOf(EGL14.EGL_NONE) val configs = arrayOfNulls(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] }