2013-02-21 3 views
2

У меня есть класс, который определяет, следует ли рисовать квадрат или нет через логическое значение. Проблема в том, что квадрат остается, даже если логическое значение false. Мой вопрос: как удалить рисованный квадрат, если логическое значение ложное?Очистка экрана OpenGL в Android.

public void onDrawFrame(GL10 unused) { 

    // Draw background color 
    GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT); 

    // Set the camera position (View matrix) 
    Matrix.setLookAtM(mVMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f); 

    // Calculate the projection and view transformation 
    Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mVMatrix, 0); 

    // Draw square 
    Matrix.setRotateM(mRotationMatrix, 0, mAngle, 0, 0, -1.0f); 

    // Combine the rotation matrix with the projection and camera view 
    Matrix.multiplyMM(mMVPMatrix, 0, mRotationMatrix, 0, mMVPMatrix, 0); 

    if (drawObject == true) { 
    mSquare.draw(mMVPMatrix); 
    } 

    // Draw Square 
} 
+0

Является ли код, который рисует квадрат в методе 'draw()', который вы вызываете, или где комментарий 'Draw Square' есть? Я предположил в методе 'draw()', но я никогда не знаю ... – Geobits

+0

Да, в методе рисования. Извините, этот комментарий был неуместным. –

+0

Вы используете 'RENDERMODE_CONTINUOUSLY' или' RENDERMODE_WHEN_DIRTY'? Если вы используете последнее - убедитесь, что 'onDrawFrame()' фактически был вызван, так как ваше логическое значение изменилось. Использование команды 'glClear()', поскольку вы должны очистить экран при вызове. – Jave

ответ

1

Хорошо, я нашел ответ.

Создать метод:

public void clearBuffers(boolean color, boolean depth, boolean stencil) { 
    int bits = 0; 
    if (color) { 
     bits = GLES20.GL_COLOR_BUFFER_BIT; 
    } 
    if (depth) { 
     bits |= GLES20.GL_DEPTH_BUFFER_BIT; 
    } 
    if (stencil) { 
     bits |= GLES20.GL_STENCIL_BUFFER_BIT; 
    } 
    if (bits != 0) { 
     GLES20.glClear(bits); 
    } 
} 

И затем вызвать его:

clearBuffers(true, true, true); 

, чтобы очистить все на экране.