Сортировка упакованных вершин с помощью тяги

Итак, у меня есть массив устройств структур PackedVertex:

struct PackedVertex {
  glm::vec3 Vertex;
  glm::vec2 UV;
  glm::vec3 Normal;
}

Я пытаюсь отсортировать их так, чтобы дубликаты группировались в массиве; Меня не волнует общий порядок вообще.

Я пытался отсортировать их, сравнивая длины векторов, которые выполнялись, но не сортировал их правильно, поэтому теперь я пытаюсь по переменной, используя 3 stable_sorts с binary_operators:

__thrust_hd_warning_disable__
struct sort_packed_verts_by_vertex : public thrust::binary_function < PackedVertex, PackedVertex, bool >
{
    __host__ __device__ bool operator()(const PackedVertex &lhs, const PackedVertex &rhs)
    {
        return lhs.Vertex.x < rhs.Vertex.x || lhs.Vertex.y < rhs.Vertex.y || lhs.Vertex.z < rhs.Vertex.z;
    }
};

__thrust_hd_warning_disable__
struct sort_packed_verts_by_uv : public thrust::binary_function < PackedVertex, PackedVertex, bool >
{
    __host__ __device__ bool operator()(const PackedVertex &lhs, const PackedVertex &rhs)
    {
        return lhs.UV.x < rhs.UV.x || lhs.UV.y < rhs.UV.y;
    }
};

__thrust_hd_warning_disable__
struct sort_packed_verts_by_normal : public thrust::binary_function < PackedVertex, PackedVertex, bool >
{
    __host__ __device__ bool operator()(const PackedVertex &lhs, const PackedVertex &rhs)
    {
        return lhs.Normal.x < rhs.Normal.x || lhs.Normal.y < rhs.Normal.y || lhs.Normal.z < rhs.Normal.z;
    }
};

Беда в том, что я сейчас получаю ошибку: «launch_closure_by_value», из-за которой возникает угадывание, что мой вид не сходится из-за моих операторов.

При этом я также почти уверен, что для меня это не лучший способ сделать такого рода, поэтому любая обратная связь будет принята с благодарностью.

Ответы на вопрос(1)

Ваш ответ на вопрос