我一直在尝试使用该LabelMaker
示例在切换时在屏幕上显示我的游戏 FPS。当我启用切换时,我的日志会填满此消息:(每次调用绘制一个)
<qglDrvAPI_glTexImage2D:1913>: GL_INVALID_ENUM
调试LabelMaker
源我可以看到当生成Bitmap
的被绘制到OpenGL纹理时添加了日志消息,但我不知道为什么:
public void endAdding(GL10 gl) {
checkState(STATE_ADDING, STATE_INITIALIZED);
gl.glBindTexture(GL10.GL_TEXTURE_2D, mTextureID);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, mBitmap, 0); // Problem Line
// Reclaim storage used by bitmap and canvas.
mBitmap.recycle();
mBitmap = null;
mCanvas = null;
}
我的调用代码在onDrawFrame
:
if(renderFPS){
Paint textPaint = new Paint();
textPaint.setTextSize(32);
textPaint.setAntiAlias(true);
textPaint.setARGB(0xff, 0x00, 0x00, 0x00);
this.labelMaker.beginAdding(gl);
int fpsLabel = this.labelMaker.add(gl, Double.toString(currentFPS), textPaint);
this.labelMaker.endAdding(gl);
this.labelMaker.beginDrawing(gl, this.mViewWidth, this.mViewHeight);
this.labelMaker.draw(gl, 10, 10, fpsLabel);
this.labelMaker.endDrawing(gl);
}
编辑:
我添加了一个调用来将位图写入 SD 卡,以验证位图是否有效并且可以正常工作。我还注意到它似乎在第一次调用时不会导致问题,而是在绘制纹理时继续并报告错误:
public void draw(GL10 gl, float x, float y, int labelID) {
checkState(STATE_DRAWING, STATE_DRAWING);
Label label = mLabels.get(labelID);
gl.glEnable(GL10.GL_TEXTURE_2D);
((GL11)gl).glTexParameteriv(GL10.GL_TEXTURE_2D,
GL11Ext.GL_TEXTURE_CROP_RECT_OES, label.mCrop, 0);
((GL11Ext)gl).glDrawTexiOES((int) x, (int) y, 0, // Where the problem starts.
(int) label.width, (int) label.height);
}
当它开始在texImage2D
调用时出错。
编辑 2: 我意识到我犯了一个愚蠢的错误,并在此调用后调用清除颜色和深度缓冲区。这导致在渲染纹理后清除屏幕。所以代码实际上是在运行,但它也抛出了这个日志消息。仍然不知道为什么?