LabelMaker
この例を使用して、切り替えたときにゲームの FPS を画面に表示しようとしています。トグルを有効にすると、ログが次のメッセージでいっぱいになります: (描画する呼び出しごとに 1 つ)
<qglDrvAPI_glTexImage2D:1913>: GL_INVALID_ENUM
ソースをデバッグすると、生成されたものが OpenGL テクスチャに描画LabelMaker
されるときにログ メッセージが追加されることがわかりますが、その理由はわかりません。Bitmap
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);
}
編集:
Bitmap が有効で動作することを確認するために、Bitmap を 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: 私はばかげた間違いを犯したことに気付き、この呼び出しの後に色と深度のバッファーをクリアするように呼び出しました。これにより、テクスチャがレンダリングされた後に画面がクリアされていました。したがって、コードは実際に機能していますが、このログ メッセージもスローしています。理由はまだわかりませんか?