6

携帯電話でアプリを実行できません。エラーを見つけましたが、プログラミングと英語での修復に関する知識が不足しています。アプリはエミュレーター上で完全に実行され、openglでもコードでエラーは発生しません。それでも、電話ではすべてがエラーなしで正常に実行されますが、描画したいopengl要素は表示されません。glGetError私は自分のコードにほとんどすべてを追加しましたが、その後glDrawElementsに生成されたエラー1282が見つかりましたGL_INVALID_OPERATION

GL_INVALID_OPERATIONゼロ以外のバッファオブジェクト名が有効な配列または要素配列にバインドされており、バッファオブジェクトのデータストアが現在マップされている場合に生成されます。

GL_INVALID_OPERATIONglBeginの実行と対応するglEndの間にglDrawElementsが実行された場合に生成されます。

コードにglBeginまたはglEndがないので、問題はインデックスバッファーにあると思います。以下に、インデックスバッファで持っているすべてのものを示します。

private ShortBuffer _indexBuffer;

    public void onDrawFrame(GL10 gl) {
    FramesPerSecond.StartCounter();
    gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, _vertexBuffer);
    gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);
    gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
    gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);

    for (int i = 1; i <= 10; i++) {
        gl.glLoadIdentity();
        gl.glTranslatef(0.0f, -1f, -1.0f + -1.5f * i);

        gl.glRotatef(-_xAngle, 1f, 0f, 0f);
        gl.glRotatef(-_yAngle, 0f, 1f, 0f);
        gl.glDrawElements(GL10.GL_TRIANGLES, _nrOfVertices, GL10.GL_UNSIGNED_SHORT, _indexBuffer);            
        Log.e("Warning", " error code " +gl.glGetError());
    }

オブジェクト初期化関数のバッファのコード:

    short[] indeksai = new short[] {
            0, 1, 3, 
            0, 2, 1, 
            0, 3, 2, 
            1, 2, 3, 
    };

    ByteBuffer ibb = ByteBuffer.allocateDirect(indeksai.length * 2);
    ibb.order(ByteOrder.nativeOrder());
    _indexBuffer = ibb.asShortBuffer();
    _indexBuffer.put(indeksai);

そして、それは基本的に私がこのバッファで行ったすべてです。

surfaceCreated関数で>>

public void onSurfaceCreated(GL10 gl, EGLConfig config) {

    Log.i(LOG_TAG, "onSurfaceCreated()");
    gl.glMatrixMode(GL10.GL_PROJECTION);
    float ratio = _width / _height;
    gl.glOrthof(-1, 1, -1 / ratio, 1 / ratio, 0.01f, 100.0f);
    gl.glViewport(0, 0, (int) _width, (int) _height);
    gl.glMatrixMode(GL10.GL_MODELVIEW);
    gl.glEnable(GL10.GL_DEPTH_TEST);

gl.glClearColor(0f, 0f, 0f, 1.0f);
gl.glEnable(GL10.GL_CULL_FACE);
gl.glFrontFace(GL10.GL_CCW);
gl.glCullFace(GL10.GL_BACK);
gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
initTriangle(gl, context);
try {
loadGLTexture(gl);
    } catch (IOException e) {
   Log.w(LOG_TAG, "Texture fail");
    }
   gl.glEnable(GL10.GL_TEXTURE_2D);            
   gl.glShadeModel(GL10.GL_SMOOTH);            
   gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);    
   gl.glClearDepthf(1.0f);                     
   gl.glEnable(GL10.GL_DEPTH_TEST);            
   gl.glDepthFunc(GL10.GL_LEQUAL);             
  gl.glHint(GL10.GL_PERSPECTIVE_CORRECTION_HINT, GL10.GL_NICEST);


}
4

1 に答える 1

6

GL_COLOR_ARRAYこれは、有効にしているが実際には設定していないことが原因である可能性がありますglColorPointer。行をコメントアウトしてみてくださいgl.glEnableClientState(GL10.GL_COLOR_ARRAY);

于 2012-05-22T21:52:34.943 に答える