1

我正在尝试通过使用宏定义顶点基础知识并让宏最终生成与 OpenGL ( , 等) 一起使用所需的样板代码,从而在 OpenGL 中创建glGetAttribLocation顶点glEnableVertexAttribArray结构glVertexAttribPointer

我的宏定义如下:

#define DEFINE_GPU_VERTEX_ATTRIBUTE(R, DATA, ELEM) BOOST_PP_CAT(ELEM, DATA);

#define DEFINE_GPU_VERTEX(NAME, ...) struct NAME##_gpu_vertex_t \
{ \
    BOOST_PP_SEQ_FOR_EACH(DEFINE_GPU_VERTEX_ATTRIBUTE, _, __VA_ARGS__) \
}

这是我打算如何使用宏的示例:

DEFINE_GPU_VERTEX(bsp,
((vec3_t), position),
((vec3_t), normal),
((vec2_t), texcoord));

其中第一个参数 ( bsp) 是名称前缀,所有可变参数都是类型和属性名称对。

我希望它生成一个像这样的结构定义:

struct bsp_gpu_vertex_t
{
    vec3_t position;
    vec3_t normal;
    vec2_t texcoord;
}

但是,它似乎生成了一个空结构。我在这里做错了什么?

我不熟悉 C 宏,更不用说 Boost 宏了,因为直到现在我才真正有理由使用它们或了解是什么让它们运行起来。

任何帮助表示赞赏!

4

1 回答 1

1

警告:这可能无法回答您最初的问题。它甚至不是一个答案,而是一个问题:

您是否考虑struct过使用高级语言而不是 C 宏来生成这些 -s?

正如您已经发现的那样,C 宏很笨拙且难以调试。我宁愿编写一个脚本(例如,在 Python 中,但任何具有良好字符串处理能力的脚本语言都可以)输出一个opengl_boilerplate.h包含您的struct声明的文件。然后,您将在构建软件时调用此脚本。我不知道如何用 VS2013 做到这一点,但也许运行一次就足够了(取决于你的项目)。

于 2014-07-26T07:41:48.507 回答