Можно ли использовать прямую объявленную структуру в определении структуры в GLSL?

#opengl #glsl

#opengl #glsl

Вопрос:

Может ли структура, которая была объявлена вперед, использоваться в определении другой структуры? Например:

 struct  A;
struct B
{
     float x;
     float y;
     A     z;
};
  

Я пытаюсь анализировать файлы GLSL во время ссылки / компиляции, чтобы упростить их использование в C. Кажется, я нигде не могу найти подобные детали.

Комментарии:

1. Вы не можете объявлять объекты неполного типа. И этот код не компилируется.

2. Хорошо, в этом отношении это то же самое, что и C. Итак, нет?

3. Ах, извините, не видел C -tag. В C это невозможно (помимо того факта, что вам пришлось писать struct A z; , но он все равно не компилировался), для C , я думаю, это то же самое, но я не уверен. Это действительно C-вопрос (в противном случае удалите тег)?

4. Это GLSL, как сказано в названии. Ни C, ни C .

5. @Ben Я удалил теги ‘c’ и ‘C ‘, поскольку они, очевидно, вызвали путаницу.

Ответ №1:

Насколько мне известно, структуры, объявленные вперед, официально не поддерживаются в GLSL. В спецификации, раздел 4.1.8 о структурах, не упоминается такая функция, и, читая приложение grammar, я также не смог найти никаких упоминаний.

Если вы подумаете об этом, прямые объявления на самом деле не так полезны в GLSL, как в C. Поскольку в GLSL нет указателей, попытка использовать структуру, объявленную вперед, будет означать попытку доступа к неполному типу. В C прямые объявления служат для разрешения объявления непрозрачных указателей.

Если вы пишете пользовательский синтаксический анализатор для GLSL, обязательно прочитайте раздел 9 спецификации GLSL: грамматика языка затенения. GLSL основан на C, но это лишь очень небольшое подмножество C.