意外的断言失败错误

时间:2015-11-18 17:28:54

标签: c++ sorting opengl

我无法为这个问题找到更好的标题,因为,说实话,我不知道为什么我会收到这个错误。 代码是:

std::sort(VisibleMeshes.begin(), VisibleMeshes.end(), [](const MeshBase* m1, const MeshBase* m2) -> bool
{
    float d1 = CamerasManager::ActiveCamera->Position.Distance(m1->MeshPosition);
    float d2 = CamerasManager::ActiveCamera->Position.Distance(m2->MeshPosition);

    return d1 > d2;
});

VisibleMeshes是MeshBase对象(指针)的向量。 目的是按照距离摄像机的距离,从最远到最近的距离对这些对象进行排序。 代码几乎总是有效,但是,我不时会遇到断言失败。 错误是

"invalid operator <"

有什么想法吗?

这是我得到的完整错误: enter image description here

1 个答案:

答案 0 :(得分:0)

我会回答自己,因为我发现问题并且解决方案可以帮助其他人。 我正在构建一个渲染引擎,我使用两个线程绘制场景并更新它。绘制循环以60 fps运行,而更新循环以500 fps运行。 更新循环中更新摄像机位置(更快),并在绘制循环中进行此排序。更新循环更快,有时(很少)发生相机位置在vectort排序中间变化。此代码修复了问题

Vector3 CameraPosition(CamerasManager::ActiveCamera->Position); // Copy current camera position

std::sort(VisibleMeshes.begin(), VisibleMeshes.end(), [&](const MeshBase* m1, const MeshBase* m2) -> bool
    {
        float d1 = CameraPosition.Distance(m1->MeshPosition);
        float d2 = CameraPosition.Distance(m2->MeshPosition);

        return d1 > d2;
    }
);

基本上我是将相机位置的副本捕捉到lambda中,以确保它在排序过程中不会改变

相关问题