#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.