GLSL texelFetch编译错误

GLSL texelFetch Compile Error

本文关键字:错误 编译 texelFetch GLSL      更新时间:2023-10-16

我有少量代码,编译时遇到了很多麻烦。我希望有人能指出这里出了什么问题。

设置渲染的纹理缓冲区:

glActiveTexture( GL_TEXTURE0 + 1 );
glBindTexture( GL_TEXTURE_BUFFER, transformsUniform );
glTexBuffer( GL_TEXTURE_BUFFER, GL_RGBA32F, transformBuffer );
glUniform1i( transformBufferTexture, 1 );

使用texelFetch:访问缓冲区

uniform samplerBuffer transforms;
...
vec4 v( texelFetch( transforms, 0 ) );

确切的编译器错误:

ERROR: 0:10: error(#132) Syntax error: "texelFetch" parse error
ERROR: error(#273) 1 compilation errors.  No code generated

我已经用glGetString( GL_SHADING_LANGUAGE_VERSION );检查了我的着色器语言版本,它说4.2,所以这不是问题所在。

试试这个:

vec4 v = texelFetch( transforms, 0 );

GLSL规范禁止您尝试执行的"标准"C++风格的内联声明/构造,请参阅第171页的declaration:语法定义:

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 LEFT_BRACKET RIGHT_BRACKET SEMICOLON
    type_qualifier IDENTIFIER LEFT_BRACE struct_declaration_list RIGHT_BRACE IDENTIFIER LEFT_BRACKET constant_expression RIGHT_BRACKET SEMICOLON
    type_qualifier SEMICOLON
    type_qualifier IDENTIFIER SEMICOLON
    type_qualifier IDENTIFIER identifier_list SEMICOLON

GLSL不支持使用您使用的语法进行C++风格的初始化:

vec4 v( texelFetch( transforms, 0 ) );

相反,只需使用赋值运算符:

vec4 v = texelFetch( transforms, 0 );