LabelMaker抛出GL_INVALID_ENUM

时间:2012-08-08 17:32:55

标签: java android opengl-es

我一直在尝试使用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: 我意识到自己犯了一个愚蠢的错误,并在通话结束后拨打电话清除颜色和深度缓冲区。这是在渲染纹理后导致屏幕被清除的原因。所以代码实际上正在运行,但它也抛出了这条日志消息。仍然没有想法为什么?

0 个答案:

没有答案