void OsmAnd::AtlasMapRendererDebugStage_OpenGL::releaseRects2D()
{
    const auto gpuAPI = getGPUAPI();

    GL_CHECK_PRESENT(glDeleteBuffers);
    GL_CHECK_PRESENT(glDeleteProgram);

    if(_iboRect2D)
    {
        glDeleteBuffers(1, &_iboRect2D);
        GL_CHECK_RESULT;
        _iboRect2D.reset();
    }
    if(_vboRect2D)
    {
        glDeleteBuffers(1, &_vboRect2D);
        GL_CHECK_RESULT;
        _vboRect2D.reset();
    }
    if(_vaoRect2D)
    {
        gpuAPI->glDeleteVertexArrays_wrapper(1, &_vaoRect2D);
        GL_CHECK_RESULT;
        _vaoRect2D.reset();
    }
    if(_programRect2D.id)
    {
        glDeleteProgram(_programRect2D.id);
        GL_CHECK_RESULT;
        _programRect2D = ProgramRect2D();
    }
}
bool OsmAnd::AtlasMapRendererDebugStage_OpenGL::releaseRects2D()
{
    const auto gpuAPI = getGPUAPI();

    GL_CHECK_PRESENT(glDeleteBuffers);
    GL_CHECK_PRESENT(glDeleteProgram);

    if (_vaoRect2D.isValid())
    {
        gpuAPI->releaseVAO(_vaoRect2D);
        _vaoRect2D.reset();
    }

    if (_iboRect2D.isValid())
    {
        glDeleteBuffers(1, &_iboRect2D);
        GL_CHECK_RESULT;
        _iboRect2D.reset();
    }
    if (_vboRect2D.isValid())
    {
        glDeleteBuffers(1, &_vboRect2D);
        GL_CHECK_RESULT;
        _vboRect2D.reset();
    }

    if (_programRect2D.id.isValid())
    {
        glDeleteProgram(_programRect2D.id);
        GL_CHECK_RESULT;
        _programRect2D = ProgramRect2D();
    }

    return true;
}