用于获取Android上OpenGL的最大纹理大小的函数(可以在UI线程上运行)

时间:2017-11-18 20:54:05

标签: android opengl-es

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

它似乎适用于我的测试设备,但我对OpenGl和Android都相当新,而且我对代码并不完全有信心。我依靠试错法和一些复制粘贴而没有完全理解事物。

您是否发现代码存在任何问题?具体做法是:

  1. 这很健壮吗?即我是否在不知不觉中做出了任何错误的假设?
  2. 我是否正确清理了资源?
  3. 可以变得更简单吗?
  4. 这是代码(在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]
        }
    

0 个答案:

没有答案