簡體   English   中英

Android:性能問題多個紋理Opengl ES

[英]Android: performance issue multiple textures Opengl ES

我在android中制作的游戲基於畫布,出於性能方面的考慮,我將其改為OpenGL ES。

問題仍然是性能-我的背景和精靈在屏幕上彈跳-效果很好,但似乎與使用Canvas一樣是性能問題。 精靈動畫有時並不完美。 我猜我的設計不好或真的不好。

每幀調用texImage2D是錯誤的嗎? 有哪些替代方案?

謝謝!!!

 @Override
public void onDrawFrame(GL10 unused) {

    GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);

    long speedFactor = 5000;
    long time = SystemClock.uptimeMillis() % speedFactor;
    float angleInDegrees = (360.0f / speedFactor) * ((int) time);

    GLES20.glUseProgram(mProgramHandle);

    mMVPMatrixHandle = GLES20.glGetUniformLocation(mProgramHandle, "u_MVPMatrix");
    mMVMatrixHandle = GLES20.glGetUniformLocation(mProgramHandle, "u_MVMatrix");
    mColorHandle = GLES20.glGetAttribLocation(mProgramHandle, "a_Color");
    mNormalHandle = GLES20.glGetAttribLocation(mProgramHandle, "a_Normal");
    mTextureCoordinateHandle = GLES20.glGetAttribLocation(mProgramHandle, "a_TexCoordinate");

    GLES20.glEnable(GLES20.GL_BLEND);
    GLES20.glBlendFunc(GLES20.GL_ONE, GLES20.GL_ONE_MINUS_SRC_ALPHA);


    //BACKGROUND
    GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, background, 0);
    //GLUtils.texSubImage2D(GLES20.GL_TEXTURE_2D, 0, 0, 0, background);
    Matrix.setIdentityM(mModelMatrix, 0);
    Matrix.translateM(mModelMatrix, 0, 0, 0.0f, -2.00001f);
    drawTriangle(mCubePositions);



    // THE MOVING SPRITE.
    int rest = 0;
    if (modulo > 0) {
        rest = frameCntr % modulo;
    }

    GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, alien[bitmapIndex], 0);
    //GLUtils.texSubImage2D(GLES20.GL_TEXTURE_2D, 0, 0, 0, alien[bitmapIndex]);
    if (rest == 0) {
        bitmapIndex++;
    }

    if (bitmapIndex == alien.length) {
        bitmapIndex = 0;
    }

    frameCntr++;

    float deltaX = (motion.get_velocityX() * motion.get_xDirection());
    float deltaY = (motion.get_velocityY() * motion.get_yDirection());
    anim_x += deltaX;
    anim_y += deltaY;

    Matrix.setIdentityM(mModelMatrix, 0);
    Matrix.translateM(mModelMatrix, 0, anim_x, anim_y, -7f);
    //Matrix.rotateM(mModelMatrix, 0, angleInDegrees, 0.0f, 1.0f, 0.0f);
    drawTriangle(mAlienPositions);
    calcPos();
    collision.collisionWalls(motion, xPos, yPos, game_width, game_height);
}

實際上, GLUtils.texImage2D()調用glTexImage2D()

另一方面, glTexImage2D()用於加載位圖。 您只需要調用一次即可加載紋理。 它將位圖加載到當前綁定的紋理中。

在繪制調用中,應通過調用GLES20.glBindTexture( target, texture )綁定到所需的紋理。 targetGL_TEXTURE_2DGL_TEXTURE_CUBE_MAP texture是在調用GLUtils.texImage2D()之前綁定的紋理名稱。

同樣,不要忘記在每次繪制調用之后和初始化之后使用GLES20.glBindTexture( target, 0 )解除當前紋理的綁定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM