在未绘制OnSurfaceCreated后,OpenGL ES2.0对象添加到数组中

时间:2017-03-05 05:00:03

标签: java android opengl-es

我有一个对象数组,我正在循环并绘制OnDraw方法。当我在OnSurfaceCreated中将这些对象添加到数组时,对象看起来很好,它们循环并在屏幕上绘制。但是,如果我在UI事件调用的方法中向数组添加相同的对象,则不会。是什么给了什么?

 @Override
public void onDrawFrame(GL10 gl) {

    GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
    Matrix.multiplyMM(mtrxMultiplied, 0, mtrxProj, 0, mtrxView, 0);

    mBackground.draw(mtrxMultiplied, board.getmContext());

    for (int i = 0; i < stickemArray.size(); i++){
        stickemArray.get(i).draw(mtrxMultiplied, board.getmContext());
        Log.v("stickems being drawn", Float.toString(stickemArray.get(i).getPositionX()) + "/" + Float.toString(stickemArray.get(i).getPositionY()));
    }
}

@Override
public void onSurfaceCreated(GL10 gl, EGLConfig eglConfig) {

    mBackground = new Background(board.getmContext());

    stickemArray.add(new Stickem(500f, 200f, board.getmContext()));

    GLES20.glClearColor(0.0f, 0.0f, 0.0f, 1);

}

public void addStickem(Stickem stickem){
    Log.v("add stickem in renderer", "activated");
    stickemArray.add(stickem);
    stickemArray.add(new Stickem(400, 200, board.getmContext()));

}

对于此处的示例,我使用坐标500/200创建的对象工作正常,但不是400/200的对象。正在将对象正确添加到数组中,并且正在将绘制它的调用正确传递给对象,但它不会出现在屏幕上。

谢谢!

1 个答案:

答案 0 :(得分:0)

所以我想出了我的问题,如果我错了,请纠正我!所有对象(即对象顶点/索引/纹理缓冲区)都需要在OnSurfaceCreated中创建,否则它根本无法工作。

我没有在运行时向数组添加新对象,而是创建了一个&#34;空&#34;的数组。在OnSurfaceCreated中开始的对象,并创建一个方法,在数据初始化之后用数据填充它们。我在渲染器中设置的for循环然后在数组中查找非空对象并绘制它们。