【问题标题】:Android. W/OpenGLRenderer: Bitmap too large to be uploaded into a texture安卓。 W/OpenGLRenderer:位图太大而无法上传到纹理中
【发布时间】:2016-01-24 13:56:34
【问题描述】:

当我打电话给Canvas.drawBitmap() 以获取一侧超过 4096 像素的 Bitmap 时 - 我什么也得不到。没有错误,也没有绘制位图。 LogCat 中只出现这条消息:

W/OpenGLRenderer:位图太大,无法上传到纹理中(2880x4920,max=4096x4096)

这会导致以下问题:

  1. 4096x4096 的限制取决于什么?安卓版?内核驱动程序?还是硬件?
  2. 如何在运行时检查当前设备的此限制?
  3. 如何捕捉错误“W/OpenGLRenderer: Bitmap too large ...”

【问题讨论】:

    标签: android opengl-es bitmap


    【解决方案1】:

    这取决于硬件和软件。您可以在运行时使用有效的 OpenGL 上下文进行查询(请参阅:Get OpenGL max texture size

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

    请注意,支持的尺寸可能会更小,具体取决于纹理的格式。例如,除了以像素为单位的最大尺寸外,您的硬件还可以具有以字节为单位的最大纹理尺寸。要检查支持的纹理大小,请创建具有所需大小和格式的代理纹理(GL_PROXY_TEXTURE_2D 目标,而不是 GL_TEXTURE_2D),然后使用 glGetTexLevelParameteriv() 查询纹理大小(宽度或高度)。如果你的纹理太大,大小将设置为 0。

    【讨论】:

    • OpenGL ES 中没有代理纹理。
    • 谢谢。 glGetIntegerv 工作。但仅在onDraw 事件中。如果我在onSizeChangedonAttachedToWindow 中进行调用,它会返回0。它需要创建自定义GL 上下文..
    • @GennadyZavodovskiy:是的,你需要一个有效的 OpenGL 上下文。
    猜你喜欢
    • 1970-01-01
    • 2012-05-03
    • 2015-04-05
    • 2015-02-11
    • 2014-05-03
    • 1970-01-01
    • 2016-11-20
    • 1970-01-01
    相关资源
    最近更新 更多