Android绘图文本与几分钟后的opengl es崩溃

Android绘图文本与几分钟后的opengl es崩溃,第1张

概述我已经创建了一个opengl表面,一切正常,但是当我尝试使用以下方法在其上绘制文本时:publicvoidloadFPSTexture(GL10gl){Bitmapbitmap=Bitmap.createBitmap(256,256,Bitmap.Config.RGB_565);bitmap.eraseColor(Color.BLACK);Canvascanvas=newCanvas(bit

我已经创建了一个opengl表面,一切正常,但是当我尝试使用以下方法在其上绘制文本时:

public voID loadFPSTexture(GL10 gl){    Bitmap bitmap = Bitmap.createBitmap(256, 256, Bitmap.Config.RGB_565);    bitmap.erasecolor(color.BLACK);    Canvas canvas = new Canvas(bitmap);    Paint textPaint = new Paint();    textPaint.setTextSize(35);    textPaint.setFakeBoldText(true);    textPaint.setAntiAlias(true);    textPaint.setARGB(255, 255, 255, 255);    canvas.drawText("FPS "+reportedFramerate, 10,35, textPaint);    gl.glGenTextures(1, texturesFPS, 0);    gl.glBindTexture(GL10.GL_TEXTURE_2D, texturesFPS[0]);    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_liNEAR);    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_liNEAR);    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE);    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_REPEAT);    glutils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);    bitmap.recycle();}

然后在我的onDraw函数中使用:

gl.glPushmatrix();gl.glEnable(GL10.GL_TEXTURE_2D);gl.glBindTexture(GL10.GL_TEXTURE_2D, texturesFPS[0]);gl.glTranslatef(-surfaceSize.x/1.5f, surfaceSize.y/1.5f, 0.0f);gl.glScalef(10, 10, 1.0f);gl.glcolor4f(1.0f, 1.0f, 1.0f, saturation_head); gl.glEnableClIEntState(GL10.GL_VERTEX_ARRAY);gl.glEnableClIEntState(GL10.GL_TEXTURE_COORD_ARRAY);gl.glVertexPointer(3, GL10.GL_float, 0,vertexBuffer);gl.glTexCoordPointer(2, GL10.GL_float, 0, textureFPSBuffer);gl.glDrawElements(GL10.GL_TRIANGLES, indices.length,GL10.GL_UNSIGNED_SHORT, indexBuffer);gl.gldisableClIEntState(GL10.GL_TEXTURE_COORD_ARRAY);gl.gldisableClIEntState(GL10.GL_VERTEX_ARRAY);gl.gldisable(GL10.GL_TEXTURE_2D);gl.glPopMatrix();

我得到一个奇怪的崩溃,在此之后无法绘制表面. Logcat显示以下常量流:

E/Adreno200-EGL( 2578): eglLockwindowsurface: Failed to map the memory for fd=32 offs=1536000E/SurfaceFlinger( 2578): GL error 0x0505E/Adreno200-EGL( 2578): eglLockwindowsurface: Failed to map the memory for fd=32 offs=1536000E/Adreno200-EGL( 2578): egliSwapwindowsurface: oglSwapBuffer FailedE/SurfaceFlinger( 2578): eglSwapBuffers: EGL error 0x3003 (EGL_BAD_ALLOC)

我不确定为什么会这样?任何帮助将非常感激!

解决方法:

麻烦的是我反复生成纹理而没有删除它们.只需在生成之前添加一行就足以防止内存泄漏(似乎无需检查是否已生成纹理):

 gl.glDeleteTextures(1, texturesFPS, 1); gl.glGenTextures(1, texturesFPS, 1);

就那么简单 :)

总结

以上是内存溢出为你收集整理的Android绘图文本与几分钟后的opengl es崩溃全部内容,希望文章能够帮你解决Android绘图文本与几分钟后的opengl es崩溃所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1114018.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存