Создание членов из переменных аргументов макроса

Я пытаюсь создать структуры вершин в 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, поскольку у меня никогда не было причин использовать их или узнавать, что заставляет их работать до сих пор.

Любая помощь приветствуется!

1

Решение

Предупреждение: это может не отвечать на ваш первоначальный вопрос. Это даже не ответ, а скорее вопрос:

Рассматривали ли вы создание этих struct— используете ли язык высокого уровня вместо макросов C?

Как вы уже узнали, макросы C неуклюжи и их трудно отлаживать. Я бы предпочел написать скрипт (скажем, на Python, но любой язык сценариев с хорошо развитыми возможностями обработки строк), который бы вывел opengl_boilerplate.h файл, содержащий ваши struct деклараций. Затем вы вызываете этот скрипт при сборке вашего программного обеспечения. Я не знаю, как это сделать с VS2013, но, возможно, достаточно запустить его один раз (зависит от вашего проекта).

1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector