【问题标题】:GLSL 4.2 - Syntax error: "layout" parse errorGLSL 4.2 - 语法错误:“布局”解析错误
【发布时间】:2013-09-29 16:28:25
【问题描述】:

所以,我最近发现了一个有趣的着色器并尝试编译它。

但是,GLSL 编译器抛出以下错误:

ERROR: 0:50: error(#132) Syntax error: "layout" parse error

@(片段着色器)

#version 420

...

uint ImageAtomic_Average_RGBA8(layout (r32ui) volatile uimage3D Img, ivec3 Coords, vec4 NewVal)
{ ... }

详情:

  • 显卡:AMD Radeon HD 7870(支持 OpenGL 4.20)
  • 我尝试了 4.2 驱动程序和 4.3 测试版驱动程序。

【问题讨论】:

  • 您能发布您的整个顶点和片段着色器代码吗?
  • @bwroga 原码可以在here找到。我稍微修改了样式(它不应该影响任何东西)

标签: opengl glsl opengl-4


【解决方案1】:

布局限定符不能是函数签名的一部分。 GLSL 4.40 规范第 6.1.1 节为函数原型定义了以下语法:

function-prototype :
precision-qualifier type function-name(*parameter-qualifiers*precision-qualifier类型名称数组说明符,...)

现在,参数限定符可以是以下之一

const
输入
输出
输入输出
精确
内存限定符 (volatile, ...)
精确限定符(lowp强>,...)


一贯地,第 4.10 节明确指出:

布局限定符不能用于形式函数参数 [..]

如果你放弃布局限定符,你应该没问题。如果不是,则为驱动程序错误。

【讨论】:

  • 哇哦,修复了错误。但是,当我尝试将图像变量传递给该函数时(例如ImageAtomic_Average_RGBA8(VoxelFragTex_Normal, ivec3(BaseVoxel), Normal); - 声明:layout (r32ui) uniform volatile uimage3D VoxelFragTex_Normal;),编译器会抛出此错误:error(#373) Invalid usage of image qualifier。这有关系吗?
  • 它是否在调用函数的行产生错误?还是在图像声明处?还是别的地方?
  • @structinf:另外,GitHub 版本是您当前的版本吗?
  • 除了一些样式修改之外,是的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-03
  • 2021-08-01
  • 2012-06-17
  • 2013-10-11
  • 2015-05-11
相关资源
最近更新 更多