GLSL texelFetch编译错误

时间:2013-12-11 21:37:54

标签: c++ opengl glsl

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

设置我的纹理缓冲区以进行渲染:

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,所以这不是问题。

2 个答案:

答案 0 :(得分:2)

请改为尝试:

vec4 v = texelFetch( transforms, 0 );

GLSL规范禁止您尝试做的“标准”C ++风格的内联声明/构造,请参阅page 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

答案 1 :(得分:1)

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

vec4 v( texelFetch( transforms, 0 ) );

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

vec4 v = texelFetch( transforms, 0 );