我有少量代码,我编译时遇到了很多麻烦。我希望有人能指出这里出了什么问题。
设置我的纹理缓冲区以进行渲染:
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
,所以这不是问题。
答案 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 );