[英]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 )
綁定到所需的紋理。 target
是GL_TEXTURE_2D
或GL_TEXTURE_CUBE_MAP
。 texture
是在調用GLUtils.texImage2D()
之前綁定的紋理名稱。
同樣,不要忘記在每次繪制調用之后和初始化之后使用GLES20.glBindTexture( target, 0 )
解除當前紋理的綁定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.