如何以高分辨率渲染更大的图像?使用GLsurfaceview

时间:2016-01-21 06:51:58

标签: android image opengl-es glsurfaceview

我使用此代码对图片生效 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)

请有人帮忙吗?

2 个答案:

答案 0 :(得分:0)

纹理加载后你应该刷新glError。在大量移动GPU上,最大纹理大小为2048x2048。有时你只需要使用边长为2(1024,2048,...)的纹理。因此在纹理加载和LogCat之后检查glError(在某些设备上很容易看到LogCat中的GL出错了)。并绘制如此大的图像使用几个小纹理。

答案 1 :(得分:0)

听起来你超过了设备的最大纹理尺寸。大多数移动设备的最大值为2048或4096。

您可以在设备上使用以下内容进行查询:

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

您的纹理不能大于最大值,因此您需要将其缩放以适合,或将其拆分为多个纹理。