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

    GL_CHECK_PRESENT(glDeleteBuffers);
    GL_CHECK_PRESENT(glDeleteProgram);

    if(_iboLine3D)
    {
        glDeleteBuffers(1, &_iboLine3D);
        GL_CHECK_RESULT;
        _iboLine3D.reset();
    }
    if(_vboLine3D)
    {
        glDeleteBuffers(1, &_vboLine3D);
        GL_CHECK_RESULT;
        _vboLine3D.reset();
    }
    if(_vaoLine3D)
    {
        gpuAPI->glDeleteVertexArrays_wrapper(1, &_vaoLine3D);
        GL_CHECK_RESULT;
        _vaoLine3D.reset();
    }
    if(_programLine3D.id)
    {
        glDeleteProgram(_programLine3D.id);
        GL_CHECK_RESULT;
        _programLine3D = ProgramLine3D();
    }
}
bool OsmAnd::AtlasMapRendererDebugStage_OpenGL::releaseLines3D()
{
    const auto gpuAPI = getGPUAPI();

    GL_CHECK_PRESENT(glDeleteBuffers);
    GL_CHECK_PRESENT(glDeleteProgram);

    if (_vaoLine3D.isValid())
    {
        gpuAPI->releaseVAO(_vaoLine3D);
        _vaoLine3D.reset();
    }
    
    if (_iboLine3D.isValid())
    {
        glDeleteBuffers(1, &_iboLine3D);
        GL_CHECK_RESULT;
        _iboLine3D.reset();
    }
    if (_vboLine3D.isValid())
    {
        glDeleteBuffers(1, &_vboLine3D);
        GL_CHECK_RESULT;
        _vboLine3D.reset();
    }
    
    if (_programLine3D.id.isValid())
    {
        glDeleteProgram(_programLine3D.id);
        GL_CHECK_RESULT;
        _programLine3D = ProgramLine3D();
    }

    return true;
}