0

実際の Android デバイスでglDrawTexiOESを使用すると、エラー コード 1281 が表示されます。このエラーは発生せず、ブルースタック (エミュレーターなど) ですべて正常に動作します。これらは私のオプションです...:

if ( gl == null ){
            Log.e("OpenGL ERROR! ID:0", "gl objects is NULL");return -1;
        }

        int TexIDStorage[] = new int[1];
        lastBitmapsWidth   = bitmap.getWidth();
        lastBitmapsHeight  = bitmap.getHeight();
        // Generate ID for texture that will be initialized.
        gl.glGenTextures(1, TexIDStorage, 0);
        // Next 2 lines are binding generated ID in cache to set and initialize texture.
        gl.glBindTexture(GL10.GL_TEXTURE_2D, TexIDStorage[0]);
        // Next 7 lines. Decides what to do when image getting smaller or bigger.
        if(SmoothVision == true){   //GL_LINEAR  - slow but smooth vision
            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);   
        }else{                      //GL_NEAREST - fast and sharp vision
            gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
            gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_NEAREST);
        }
        // Next 2 lines. Decides what to do if images are smaller then height or width of drawing area: Repeat them.
        gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_S, GL10.GL_CLAMP_TO_EDGE);//GL_CLAMP_TO_EDGE//GL10.GL_CLAMP_TO_EDGE
        gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_WRAP_T, GL10.GL_CLAMP_TO_EDGE);//GL_REPEAT
        // Next line for transparency
        gl.glEnable(GL10.GL_BLEND);
        // Initialize image to the binded cache ID.(Push bitmap into GPU)
        GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);
        // Crop part of image so the device will draw only given pixels and not the whole image.
        ((GL11) gl).glTexParameteriv(GL10.GL_TEXTURE_2D, GL11Ext.GL_TEXTURE_CROP_RECT_OES,
                                     new int[] { 0, bitmap.getHeight(), bitmap.getWidth(), -bitmap.getHeight() }, 0);
        bitmap.recycle();
        gl.glFlush();

        if (gl.glGetError() == GL10.GL_NO_ERROR){
            varLoadedImageCount++;
            arrLastLoadedIDs[varLastLoadedIDc] = TexIDStorage[0];
            varLastLoadedIDc++;
        }
        else
            Log.e("OpenGL caching ERROR! ID:1!", "GL Texture Loading Failed   ("+ Num +"):" + gl.glGetError());

        // Return ID of image in cache so I can call it from cache when I needed.
        return TexIDStorage[0];

そして、これは描画機能です...:

    gl.glBindTexture(GL10.GL_TEXTURE_2D, testIDs[5]);
    gl.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
    gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA);           //GL10.GL_ONE ... No border near resized images.
    ((GL11) gl).glTexParameteriv(GL10.GL_TEXTURE_2D, GL11Ext.GL_TEXTURE_CROP_RECT_OES, cropArr, 0);
    System.out.println("x:"+infArr[0]+"y:"+infArr[1]+"w:"+infArr[2]+"h:"+infArr[3]);
    ((GL11Ext) gl).glDrawTexiOES(infArr[0], infArr[1] + infArr[3], 0, infArr[2], -infArr[3]);
    System.out.println("GLDraw...:"+gl.glGetError());

問題: ((GL11Ext) gl).glDrawTexiOES(infArr[0], infArr[1] + infArr[3], 0, infArr[2], -infArr[3] );


私の画像は 2 のべき乗です... 一部のデバイスでは不足しているオプションを埋めることができず、一部のデバイスでは可能であることがわかりました。私のデバイスにも同じ問題があると思います。何がこれを引き起こす可能性がありますか?返信ありがとうございます...

4

1 に答える 1

0

問題は、glRendering 関数にマイナス値を送信していたことです...

于 2012-11-06T14:10:47.807 に答える