Glsl 如何将uint64\u t转换为sampler2D?

Glsl 如何将uint64\u t转换为sampler2D?,glsl,spir-v,Glsl,Spir V,我想使用无绑定纹理,但spirv不支持它。我在这里发现:uint64\u t可以转换为采样2D uint64_t值可以使用构造函数转换为任何采样器或图像类型:Sampler2ArraySome_uint64。它们也可以转换回64位整数 我想我可以上传一个无绑定句柄作为uint64\u t,然后将其转换为sampler2D spir-v编译器给了我错误: error: 'sampler/image' : cannot construct this type error: 'sampler2D' :

我想使用无绑定纹理,但spirv不支持它。我在这里发现:uint64\u t可以转换为采样2D

uint64_t值可以使用构造函数转换为任何采样器或图像类型:Sampler2ArraySome_uint64。它们也可以转换回64位整数

我想我可以上传一个无绑定句柄作为uint64\u t,然后将其转换为sampler2D

spir-v编译器给了我错误:

error: 'sampler/image' : cannot construct this type
error: 'sampler2D' : sampler-constructor requires two arguments
error: 'constructor' : too many arguments
error: 'assign' :  cannot convert from ' const float' to 'layout( location=0) out highp 4-component vector of float'
着色器代码

版本460核心 扩展GL\U EXT\U着色器\U explicit\U算术\U类型\U int64:需要 扩展总图扩展标量块布局:需要 layoutlocation=0输出向量4 f_颜色; layoutlocation=0(在vec2 v_uv中); 布局std430,绑定=5个均匀纹理 { uint64_t反照率; }; 真空总管 { f_color=纹理样本2 dalbedo,v_uv; }
是否可以将uint64\u t转换为sampler2D?如何操作?

与所有GLSL扩展一样,必须显式启用它们。但是,您有一个更有趣的问题:无绑定纹理不能与SPIR-V一起使用。只有在没有SPIR-V中介的情况下,将GLSL直接提供给OpenGL时,您才可能希望这样做


Vulkan不支持无绑定纹理;您需要使用取样器阵列来获得等效效果。而且OpenGL不支持GL\U EXT\U标量\U块\U布局。因此,您正在编写的代码不能被任何图形系统使用。

与所有GLSL扩展一样,您必须显式启用它们。但是,您有一个更有趣的问题:无绑定纹理不能与SPIR-V一起使用。只有在没有SPIR-V中介的情况下,将GLSL直接提供给OpenGL时,您才可能希望这样做


Vulkan不支持无绑定纹理;您需要使用取样器阵列来获得等效效果。而且OpenGL不支持GL\U EXT\U标量\U块\U布局。因此,您正在编写的代码不能被任何图形系统使用。

好的,所以AZDO说使用无绑定纹理,但当我想为不同的图形API编写代码时,我不能使用无绑定纹理XDDD。我想我还得想些别的办法。我使用了GL\U EXT\U scalar\U block\U布局,因为spirv编译器给了我一个错误,当我试图在统一缓冲区块内使用uin64\t时。@BrodaJarek3:AZDO是OpenGL特有的一组技术。这些技术的存在是为了解决OpenGL API的局限性。它们不适用于其他API。好的,AZDO说使用无绑定纹理,但是当我想为不同的图形API编写代码时,我不能使用无绑定纹理XDDD。我想我还得想些别的办法。我使用了GL\U EXT\U scalar\U block\U布局,因为spirv编译器给了我一个错误,当我试图在统一缓冲区块内使用uin64\t时。@BrodaJarek3:AZDO是OpenGL特有的一组技术。这些技术的存在是为了解决OpenGL API的局限性。它们不适用于其他API。