我已经创建了一个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崩溃所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)