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