|
|
@ -5,50 +5,43 @@ import javax.microedition.khronos.egl.EGLConfig
|
|
|
|
import javax.microedition.khronos.egl.EGLContext
|
|
|
|
import javax.microedition.khronos.egl.EGLContext
|
|
|
|
import kotlin.math.max
|
|
|
|
import kotlin.math.max
|
|
|
|
|
|
|
|
|
|
|
|
class GLUtil private constructor() {
|
|
|
|
object GLUtil {
|
|
|
|
companion object {
|
|
|
|
val maxTextureSize: Int by lazy {
|
|
|
|
// Safe minimum default size
|
|
|
|
// Get EGL Display
|
|
|
|
private const val IMAGE_MAX_BITMAP_DIMENSION = 2048
|
|
|
|
val egl = EGLContext.getEGL() as EGL10
|
|
|
|
|
|
|
|
val display = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY)
|
|
|
|
val maxTextureSize: Int
|
|
|
|
|
|
|
|
get() {
|
|
|
|
// Initialise
|
|
|
|
// Get EGL Display
|
|
|
|
val version = IntArray(2)
|
|
|
|
val egl = EGLContext.getEGL() as EGL10
|
|
|
|
egl.eglInitialize(display, version)
|
|
|
|
val display = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY)
|
|
|
|
|
|
|
|
|
|
|
|
// Query total number of configurations
|
|
|
|
// Initialise
|
|
|
|
val totalConfigurations = IntArray(1)
|
|
|
|
val version = IntArray(2)
|
|
|
|
egl.eglGetConfigs(display, null, 0, totalConfigurations)
|
|
|
|
egl.eglInitialize(display, version)
|
|
|
|
|
|
|
|
|
|
|
|
// Query actual list configurations
|
|
|
|
// Query total number of configurations
|
|
|
|
val configurationsList = arrayOfNulls<EGLConfig>(totalConfigurations[0])
|
|
|
|
val totalConfigurations = IntArray(1)
|
|
|
|
egl.eglGetConfigs(display, configurationsList, totalConfigurations[0], totalConfigurations)
|
|
|
|
egl.eglGetConfigs(display, null, 0, totalConfigurations)
|
|
|
|
|
|
|
|
|
|
|
|
val textureSize = IntArray(1)
|
|
|
|
// Query actual list configurations
|
|
|
|
var maximumTextureSize = 0
|
|
|
|
val configurationsList = arrayOfNulls<EGLConfig>(totalConfigurations[0])
|
|
|
|
|
|
|
|
egl.eglGetConfigs(display, configurationsList, totalConfigurations[0], totalConfigurations)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
val textureSize = IntArray(1)
|
|
|
|
|
|
|
|
var maximumTextureSize = 0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Iterate through all the configurations to located the maximum texture size
|
|
|
|
|
|
|
|
for (i in 0 until totalConfigurations[0]) {
|
|
|
|
|
|
|
|
// Only need to check for width since opengl textures are always squared
|
|
|
|
|
|
|
|
egl.eglGetConfigAttrib(display, configurationsList[i], EGL10.EGL_MAX_PBUFFER_WIDTH, textureSize)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Keep track of the maximum texture size
|
|
|
|
|
|
|
|
if (maximumTextureSize < textureSize[0]) maximumTextureSize = textureSize[0]
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Release
|
|
|
|
|
|
|
|
egl.eglTerminate(display)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Return largest texture size found, or default
|
|
|
|
|
|
|
|
return max(maximumTextureSize, IMAGE_MAX_BITMAP_DIMENSION)
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
init {
|
|
|
|
// Iterate through all the configurations to located the maximum texture size
|
|
|
|
throw InstantiationException("This class is not for instantiation")
|
|
|
|
for (i in 0 until totalConfigurations[0]) {
|
|
|
|
|
|
|
|
// Only need to check for width since opengl textures are always squared
|
|
|
|
|
|
|
|
egl.eglGetConfigAttrib(display, configurationsList[i], EGL10.EGL_MAX_PBUFFER_WIDTH, textureSize)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Keep track of the maximum texture size
|
|
|
|
|
|
|
|
if (maximumTextureSize < textureSize[0]) maximumTextureSize = textureSize[0]
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Release
|
|
|
|
|
|
|
|
egl.eglTerminate(display)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Return largest texture size found, or default
|
|
|
|
|
|
|
|
max(maximumTextureSize, IMAGE_MAX_BITMAP_DIMENSION)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Safe minimum default size
|
|
|
|
|
|
|
|
private const val IMAGE_MAX_BITMAP_DIMENSION = 2048
|
|
|
|