Получить максимальный размер текстуры OpenGL ES 2.0 в Android

Я пытаюсь установить максимальный размер текстуры в Android для OpenGL 2.0. Но я обнаружил, что следующая инструкция работает только в том случае, если я в настоящее время нахожусь в контексте OpenGL, другими словами, у меня должны быть GL Surface и GL Renderer и т. д., чего я не хочу.

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

Итак, я пришел со следующим алгоритмом, который дает мне максимальный размер текстуры без необходимости создания какой-либо поверхности или средства визуализации. Это работает правильно, поэтому мой вопрос в том, будет ли это работать со всеми устройствами Android, и если кто-нибудь может обнаружить какую-либо ошибку, на всякий случай.

public int getMaximumTextureSize()
{
    EGL10 egl = (EGL10)EGLContext.getEGL();
    EGLDisplay display = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY);

    // Initialise
    int[] version = new int[2];
    egl.eglInitialize(display, version);

    // Query total number of configurations
    int[] totalConfigurations = new int[1];
    egl.eglGetConfigs(display, null, 0, totalConfigurations);

    // Query actual list configurations
    EGLConfig[] configurationsList = new EGLConfig[totalConfigurations[0]];
    egl.eglGetConfigs(display, configurationsList, totalConfigurations[0], totalConfigurations);

    int[] textureSize = new int[1];
    int maximumTextureSize = 0;

    // Iterate through all the configurations to located the maximum texture size
    for (int i = 0; i < totalConfigurations[0]; i++)
    {
        // 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];
        }

        Log.i("GLHelper", Integer.toString(textureSize[0]));
    }

    // Release
    egl.eglTerminate(display);
    Log.i("GLHelper", "Maximum GL texture size: " + Integer.toString(maximumTextureSize));

    return maximumTextureSize;

}
8
задан Tim 13 June 2012 в 19:44
поделиться