如何将 uint64_t 转换为 sampler2D?
How to convert uint64_t to sampler2D?
我想使用bindless贴图,但是spirv不支持。我在这里发现:https://www.khronos.org/opengl/wiki/Bindless_Texture uint64_t
可以转换为 sampler2D。
uint64_t values can be converted to any sampler or image type using constructors: sampler2DArray(some_uint64). They can also be converted back to 64-bit integers.
我认为我可以上传一个无绑定句柄作为 uint64_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'
着色器代码
#version 460 core
#extension GL_EXT_shader_explicit_arithmetic_types_int64 : require
#extension GL_EXT_scalar_block_layout : require
layout(location = 0) out vec4 f_color;
layout(location = 0) in vec2 v_uv;
layout(std430, binding = 5) uniform Textures
{
uint64_t albedo;
};
void main()
{
f_color = texture(sampler2D(albedo), v_uv);
}
是否可以将 uint64_t
转换为 sampler2D
?怎么做?
与所有 GLSL 扩展一样,您必须显式启用它们。但是,您有一个更有趣的问题:无绑定纹理不能与 SPIR-V 一起使用。只有在没有 SPIR-V 中介的情况下,将 GLSL 直接提供给 OpenGL,你想做的事情才有可能。
Vulkan 不支持无绑定纹理;您需要使用采样器数组来获得相同的效果。并且 OpenGL 不支持 GL_EXT_scalar_block_layout
。所以你写的代码不能被任何图形系统使用。
我想使用bindless贴图,但是spirv不支持。我在这里发现:https://www.khronos.org/opengl/wiki/Bindless_Texture uint64_t
可以转换为 sampler2D。
uint64_t values can be converted to any sampler or image type using constructors: sampler2DArray(some_uint64). They can also be converted back to 64-bit integers.
我认为我可以上传一个无绑定句柄作为 uint64_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'
着色器代码
#version 460 core
#extension GL_EXT_shader_explicit_arithmetic_types_int64 : require
#extension GL_EXT_scalar_block_layout : require
layout(location = 0) out vec4 f_color;
layout(location = 0) in vec2 v_uv;
layout(std430, binding = 5) uniform Textures
{
uint64_t albedo;
};
void main()
{
f_color = texture(sampler2D(albedo), v_uv);
}
是否可以将 uint64_t
转换为 sampler2D
?怎么做?
与所有 GLSL 扩展一样,您必须显式启用它们。但是,您有一个更有趣的问题:无绑定纹理不能与 SPIR-V 一起使用。只有在没有 SPIR-V 中介的情况下,将 GLSL 直接提供给 OpenGL,你想做的事情才有可能。
Vulkan 不支持无绑定纹理;您需要使用采样器数组来获得相同的效果。并且 OpenGL 不支持 GL_EXT_scalar_block_layout
。所以你写的代码不能被任何图形系统使用。