【问题标题】:How to render bigger image with high resolution ? Using GLsurfaceview如何以高分辨率渲染更大的图像?使用 GLsurfaceview
【发布时间】:2016-01-21 06:51:58
【问题描述】:

我正在使用此代码使图像生效 http://grishma102.blogspot.com/2013/10/apply-effects-on-image-using-effects.html

但是如果我选择具有这些尺寸的图像,例如(宽度 4128)和(高度 2322),我的问题 它给了我这个错误信息

FATAL EXCEPTION: GLThread 21709 java.lang.RuntimeException: glUseProgram: glError 1281
    at com.mekdev.imageaffects.GLToolbox.checkGlError(GLToolbox.java:62)
    at com.mekdev.imageaffects.TextureRender.renderTexture(TextureRender.java:95)
    at com.mekdev.imageaffects.EffectsFilterActivity.renderResult(EffectsFilterActivity.java:566)
    at com.mekdev.imageaffects.EffectsFilterActivity.onDrawFrame(EffectsFilterActivity.java:584)
    at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1531)
    at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1248)

请问有人可以帮忙吗?

【问题讨论】:

    标签: android image opengl-es glsurfaceview


    【解决方案1】:

    你应该在纹理加载后检查 glError。在大量移动 GPU 上,最大纹理尺寸为 2048x2048。有时您只需要使用边数为 2(1024,2048,...)的纹理。所以在纹理加载和 LogCat 之后检查 glError(在某些设备上很容易看到 LogCat 中的 GL 出了什么问题)。并且要绘制这么大的图像,需要使用几个小纹理。

    【讨论】:

    【解决方案2】:

    听起来您超出了设备的最大纹理大小。大多数移动设备的最大值为 2048 或 4096。

    您可以在您的设备上通过以下方式查询它:

    int[] values = new int[1];
    GLES20.glGetIntegerv(GLES20.GL_MAX_TEXTURE_SIZE, values, 0);
    // max is in values[0]
    

    您的纹理不能大于最大值,因此您要么需要对其进行缩放以适应大小,要么将其拆分为多个纹理。

    【讨论】:

    • 首先感谢您的回复,非常感谢。但是因为我正在制作图像效果,所以我认为缩放图像不好,所以我认为最好使用更多的纹理,但你能告诉我怎么做吗?感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-23
    • 2021-08-08
    • 1970-01-01
    • 2014-05-26
    相关资源
    最近更新 更多