我必须在ImageView中显示一些图片。
他们中有些人的分辨率可能太高

W/OpenGLRenderer﹕ Bitmap too large to be uploaded into a texture (3744x5616, max=4096x4096)


我使用这种方法来检测这种情况:

public boolean isResTooHigh() {
    int[] maxSize = new int[1];
    GLES10.glGetIntegerv(GL10.GL_MAX_TEXTURE_SIZE, maxSize, 0);

    return (maxSize[0] < width) || (maxSize[0] < height);
}


其中宽度和高度由图片来源提供。

但是现在在运行Lollipop的Nexus 4和模拟器上,maxSize [0]始终为0。
那么,如何检测到此问题?

最佳答案

该GL查询需要线程上的活动GL上下文。以前,您的应用程序偶然使用框架的私有GL上下文执行该查询。在Lollipop中,由于各种体系结构更改,此上下文不再泄漏到应用程序代码中,因此查询现在失败的原因。如果您查看logcat,则可能会看到类似以下内容:“在没有当前上下文的情况下调用opengl es api”。

您可以根据需要创建自己的GL上下文来执行该查询。或者,您可以假定屏幕分辨率最大,或使用可缩放的解决方案,例如平铺方法。

09-28 05:07