2

我是 C++ 的新手,有时我不确定什么是更好的性能/内存方式。我的问题是我需要具有两个指向 vec3(3 个浮点数)和 vec3/vec2 的指针的结构。

现在我正在尝试决定是否使用: - 具有两个构造函数的联合,一个用于 vec3,一个用于 vec2 - 创建两个结构,一个将包含 vec2 和一个 vec3

struct vec3
{
    float x,y,z;
};
struct vec2
{
    float x,y;
};
struct Vertex
{
    template <typename F>
    Vertex(vec3 *Vertices,F Frag)
    : m_vertices(Vertices),m_fragment(Frag)
    {}

    union Fragment
    {
        Fragment(vec3 *Colors)
        :colors(Colors)
        {}
        Fragment(vec2 *Texcoords)
        :texcoords(Texcoords)
        {}

        vec3 *colors;
        vec2 *texcoords;

    } m_fragment;


    vec3 * m_vertices;
}

这段代码运行良好,但我很担心性能,因为我打算经常使用 Vertex 结构,我的程序可能有数千个 Vertex 结构实例。

4

1 回答 1

2

如果每个人都Vertex可以有一个 colorsor texcoords,但不能同时有两个,那么 a union(或者更好的是 a std::variant<vec3, vec2>)是有意义的。

如果 aVertex可以同时 colors具有and texcoords,那么 aunion将不起作用,因为一次只能union激活 a 的一个成员。

至于性能,配置文件,配置文件,配置文件。以这样一种方式构建您的界面,union即调用者看不到成员的选择或单独的成员。然后以两种方式实现它并测试哪个性能更好(或者是否有明显的差异)。

于 2019-06-12T05:17:30.683 回答