Java 基于OpenGL ES 2.0的图形绘制

Java 基于OpenGL ES 2.0的图形绘制,java,android,animation,opengl-es,opengl-es-2.0,Java,Android,Animation,Opengl Es,Opengl Es 2.0,我正在做一个游戏,我正在用我的图片画爆炸。随着爆炸年龄的增长,其尺寸会增大,并变得更加透明,直到爆炸消失 我的问题是,这似乎是我的代码的瓶颈。我很容易达到60帧/秒,但当爆炸开始发生时,这很容易下降到30帧/秒。如果我只禁用爆炸,我会得到恒定的60帧每秒 我可以用OpenGL做些什么来更有效地渲染这些吗 我按顺序绘制它们,只绑定纹理和顶点一次 对于优化OpenGL调用,我应该知道哪些常规的东西 我的代码是用Java编写的,用本机代码重新编写这一部分会有帮助吗 我有一个主要的绘图功能,可以绘制所有

我正在做一个游戏,我正在用我的图片画爆炸。随着爆炸年龄的增长,其尺寸会增大,并变得更加透明,直到爆炸消失

我的问题是,这似乎是我的代码的瓶颈。我很容易达到60帧/秒,但当爆炸开始发生时,这很容易下降到30帧/秒。如果我只禁用爆炸,我会得到恒定的60帧每秒

我可以用OpenGL做些什么来更有效地渲染这些吗

我按顺序绘制它们,只绑定纹理和顶点一次

对于优化OpenGL调用,我应该知道哪些常规的东西

我的代码是用Java编写的,用本机代码重新编写这一部分会有帮助吗

我有一个主要的绘图功能,可以绘制所有的爆炸

public void draw() {
    GLES20.glUniform1i(GraphicsEngine.uEnableVortex, 0);
    for (Boom boom : mBooms) {
        boom.drawCloud();
    }
    mHugeBoom.drawCloud();
    GLES20.glUniform1i(GraphicsEngine.uEnableVortex, 1);

    // Prepare the data
    GLES20.glVertexAttribPointer(GraphicsEngine.aPositionHandle, 3,
            GLES20.GL_FLOAT, false, 12, mVerticesBuffer);
    GraphicsEngine.clearShape();

    // Disable textures
    GLES20.glUniform1i(GraphicsEngine.uEnableTextureHandle, 0);

    GLES20.glLineWidth(2.0f);

    for (Boom boom : mBooms) {
        boom.drawSparks();
    }
    mHugeBoom.drawSparks();
}
然后是繁荣

public void drawCloud(){
        if (mActive) {
            float pDone = mTotalTime / 600.0f / mSize;
            if (pDone <= 1.0f) {
                mBurst.setColor(mRGBA);
                mBurst.draw(mMMatrix);
            }
        }
    }

    public void drawSparks(){
        if (mActive) {
            for (Particle particle : mParticles) {
                particle.draw();
            }
        }
    }
防止重新加载加载的纹理的代码

public static void setShape(int i) {
    if (mState.shape != i) {
        GLES20.glVertexAttribPointer(aPositionHandle, 3, GLES20.GL_FLOAT,
                false, 12, mShapes[i].vertices);
        mState.shape = i;
    }
}

public static void setTexture(int i) {
    if (mState.texture != i) {
        GLES20.glVertexAttribPointer(GraphicsEngine.aTexCoordHandle, 2,
                GLES20.GL_FLOAT, false, 8, mShapes[i].texture);
        mState.texture = i;
    }
}

Java是Android的发展方向。我不会想象一个设备会因为层叠一些透明图像而减速,所以我会确保处理爆炸行为的代码不是问题所在。你能发布一些爆炸的代码吗?我添加了相关的代码。如果你还需要什么,请告诉我。
public static void setShape(int i) {
    if (mState.shape != i) {
        GLES20.glVertexAttribPointer(aPositionHandle, 3, GLES20.GL_FLOAT,
                false, 12, mShapes[i].vertices);
        mState.shape = i;
    }
}

public static void setTexture(int i) {
    if (mState.texture != i) {
        GLES20.glVertexAttribPointer(GraphicsEngine.aTexCoordHandle, 2,
                GLES20.GL_FLOAT, false, 8, mShapes[i].texture);
        mState.texture = i;
    }
}