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);
    }

0 ответов

Другие вопросы по тегам