OpenGL ES 2.0 медленный FPS
Поэтому я делаю простую трехмерную стереоскопическую (2 окна просмотра) игру-лабиринт, мир размером 10 х 10 кубов. Я запускаю это в Android JAVA, а не NDK. На Nexus 5 я получаю около 55-58 кадров в секунду, а затем он падает примерно до 40. У таких вещей, как Minecraft должно быть тысячи кубов, я ожидал постоянных 60 кадров в секунду.
Максимум я рендерил 80 кубов (+ 1 сфера, 2 билборда) (10 х 10 - фактический путь), они текстурированные, и у меня есть пиксельное освещение на моем фрагментном шейдере (это игра ужасов)
Любой совет? это могут быть текстуры?
private void drawScene(float[] VMatrix, float[] PMatrix) {
GLES20.glDisable(GLES20.GL_BLEND);
GLES20.glEnable(GLES20.GL_DEPTH_TEST);
GLES20.glEnable(GLES20.GL_CULL_FACE);
GLES20.glCullFace(GLES20.GL_BACK);
// Static map walls (repeated textures
leftWall.draw(VMatrix, PMatrix);
rightWall.draw(VMatrix, PMatrix);
backWall.draw(VMatrix, PMatrix);
frontWall.draw(VMatrix, PMatrix);
// Render Maze made out of Cubes (Maze is up to 10 x 10 cubes) textured
if (cubeList != null) {
for (Cube placeMarker : cubeList) {
if (placeMarker.loadedTexture == false) {
placeMarker.loadPlacemarkerTextures();
}
float cutOff = (Constants.SIZE_WORLD * Constants.SIZE_CUBE) / 2;
if (mCamera.mPosX + cutOff < placeMarker.position.x || mCamera.mPosZ - cutOff > placeMarker.position.z) {
placeMarker.draw(VMatrix, PMatrix);
} else {
placeMarker.draw(VMatrix, PMatrix);
}
}
}
GLES20.glEnable(GLES20.GL_BLEND);
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE);
// So you can see the text
GLES20.glDisable(GLES20.GL_CULL_FACE);
GLES20.glDisable(GLES20.GL_DEPTH_TEST);
//GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);
// Render GLTEXT
if (message.length() > 0)
{
drawTextInFront(VMatrix, PMatrix, 0.01f, message);
}
// Render monsters (BIllboards, only 2 in game)
for (GameTrigger trigger : triggers) {
//Matrix.multiplyMM(mMVPMatrix, 0, PMatrix, 0, VMatrix, 0);
if (trigger.triggered == true && trigger.sprite != null) {
trigger.sprite.rotation = new Vector3(0, -mCamera.mYaw, 0);
trigger.sprite.draw(VMatrix, PMatrix);
}
}
// render a Sphere as the game goal
sphere.draw(VMatrix, PMatrix);
}