Vulkan风格GLSL是否与OpenGL兼容?
Vulkan GLSL代码能否在OpenGL中编译?
Vulkan GLSL相较于OpenGL GLSL存在一些新增特性,例如:
- Vulkan GLSL独有的
push_constant布局限定符:
layout( push_constant ) uniform BlockName { vec4 data; } instanceName;
- 描述符集绑定的布局语法,同样不存在于OpenGL中:
layout(set = 0, binding = 0) uniform BlockName { vec4 data; } instanceName;
请问:即便这是Vulkan风格的GLSL代码,它能否在OpenGL中编译?是否只要#version版本足够新,OpenGL编译器就能忽略这些布局限定符?
回答
不能直接在OpenGL中编译,不管GLSL版本多新都不行,原因如下:
- OpenGL的GLSL编译器完全不认识
push_constant这个布局限定符,会直接判定为语法错误,不会忽略陌生的布局关键字。 - 对于带
set = 0的布局语法,OpenGL里没有set这个布局参数,哪怕binding是OpenGL支持的属性,编译器遇到陌生的set关键字也会报错,不会自动忽略它。
如果想让这类代码兼容OpenGL,得手动移除Vulkan特有的布局限定符,或者用预编译指令区分编译分支,针对OpenGL和Vulkan环境分别处理布局定义。
内容的提问来源于stack exchange,提问作者tuket
相关产品推荐
相关产品推荐

