如何解决GLSL声明
我正在阅读GLSL规范,并在语法部分的第9章中注意到声明只能由类型限定符组成。这使我相信规范允许这样的声明:
const;
const a;
const a,b;
但是当我使用glslangValidator检查它时,这显示为语法错误:
test.vert
ERROR: 0:1: 'a' : identifier not previously declared
ERROR: 1 compilation errors. No code generated.
这些声明是否有效?是不是应该是“ type_specifier”而不是“ type_qualifier”?
以下是规范中的相关内容:
invariant_qualifier :
INVARIANT
interpolation_qualifier :
SMOOTH
FLAT
NOPERSPECTIVE
layout_qualifier :
LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN
layout_qualifier_id_list :
layout_qualifier_id
layout_qualifier_id_list COMMA layout_qualifier_id
layout_qualifier_id :
IDENTIFIER
IDENTIFIER EQUAL constant_expression
SHARED
storage_qualifier :
CONST
IN
OUT
INOUT
CENTROID
PATCH
SAMPLE
UNIFORM
BUFFER
SHARED
COHERENT
VOLATILE
RESTRICT
READONLY
WRITEONLY
SUBROUTINE
SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN
precise_qualifier :
PRECISE
type_qualifier :
single_type_qualifier
type_qualifier single_type_qualifier
single_type_qualifier :
storage_qualifier
layout_qualifier
precision_qualifier
interpolation_qualifier
invariant_qualifier
precise_qualifier
declaration :
function_prototype SEMICOLON
init_declarator_list SEMICOLON
PRECISION precision_qualifier type_specifier SEMICOLON
type_qualifier IDENTIFIER LEFT_BRACE struct_declaration_list RIGHT_BRACE SEMICOLON
type_qualifier IDENTIFIER LEFT_BRACE struct_declaration_list RIGHT_BRACE IDENTIFIER SEMICOLON
type_qualifier IDENTIFIER LEFT_BRACE struct_declaration_list RIGHT_BRACE IDENTIFIER array_specifier SEMICOLON
type_qualifier SEMICOLON
type_qualifier IDENTIFIER SEMICOLON
type_qualifier IDENTIFIER identifier_list SEMICOLON
Here是完整规范的链接。
解决方法
一种语言不仅仅是其语法结构。您可以写一个符合英语语法规则的句子,但实际上并没有任何意义。
这里也一样。仅使用类型限定符在语法上是合法的。但这并不意味着使用 every 类型限定符这样做在语义上是有效的。甚至大多数。
所以声明:
const;
尽管在语法上是合法的,但在语义上却没有意义。
请注意,type-qualifier
允许使用一系列限定词。并且请注意,在限定符中有存储限定符in
,out
,uniform
和buffer
。
通过允许type-qualifier SEMICOLON
,该标准允许这种语法:
layout(std140) uniform;
这在语法和意义上都是有效的。它将此语句之后的所有统一块的默认布局设置为std140
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。