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

    GL_CHECK_PRESENT(glDeleteBuffers);
    GL_CHECK_PRESENT(glDeleteProgram);

    if(_iboQuad3D)
    {
        glDeleteBuffers(1, &_iboQuad3D);
        GL_CHECK_RESULT;
        _iboQuad3D.reset();
    }
    if(_vboQuad3D)
    {
        glDeleteBuffers(1, &_vboQuad3D);
        GL_CHECK_RESULT;
        _vboQuad3D.reset();
    }
    if(_vaoQuad3D)
    {
        gpuAPI->glDeleteVertexArrays_wrapper(1, &_vaoQuad3D);
        GL_CHECK_RESULT;
        _vaoQuad3D.reset();
    }
    if(_programQuad3D.id)
    {
        glDeleteProgram(_programQuad3D.id);
        GL_CHECK_RESULT;
        _programQuad3D = ProgramQuad3D();
    }
}
bool OsmAnd::AtlasMapRendererDebugStage_OpenGL::releaseQuads3D()
{
    const auto gpuAPI = getGPUAPI();

    GL_CHECK_PRESENT(glDeleteBuffers);
    GL_CHECK_PRESENT(glDeleteProgram);

    if (_vaoQuad3D.isValid())
    {
        gpuAPI->releaseVAO(_vaoQuad3D);
        _vaoQuad3D.reset();
    }
    
    if (_iboQuad3D.isValid())
    {
        glDeleteBuffers(1, &_iboQuad3D);
        GL_CHECK_RESULT;
        _iboQuad3D.reset();
    }
    if (_vboQuad3D.isValid())
    {
        glDeleteBuffers(1, &_vboQuad3D);
        GL_CHECK_RESULT;
        _vboQuad3D.reset();
    }
    
    if (_programQuad3D.id.isValid())
    {
        glDeleteProgram(_programQuad3D.id);
        GL_CHECK_RESULT;
        _programQuad3D = ProgramQuad3D();
    }

    return true;
}