如何通过image2D读写GL_RGB32F内部格式的纹理?layout格式如何选择?
如何用image2D读写GL_RGB32F格式的纹理?
针对你的问题,直接给出解决方案:
正确的GLSL格式指定
将GLSL代码中的*替换为rgb32f即可,修改后的代码:
layout(binding = 0, rgb32f) uniform image2D image;
补充说明
- 格式匹配原理:OpenGL纹理的内部格式
GL_RGB32F直接对应GLSL中的rgb32f图像格式,只要你的环境支持GLSL 4.2及以上版本,或启用了ARB_shader_image_load_store扩展,就可以直接使用这个格式进行读写操作。 - 兼容性 fallback 方案:如果遇到旧版本环境不支持
rgb32f作为图像格式的情况,可以改用rgba32f:
此时OpenGL会自动把layout(binding = 0, rgba32f) uniform image2D image;GL_RGB32F纹理的alpha通道默认填充为1.0,读写时只需关注RGB分量即可——比如用imageLoad(image, coord).rgb读取,用imageStore(image, coord, vec4(rgb_data, 1.0))写入。 - 绑定函数的参数补全:你的C++代码中
glBindImageTexture调用缺少必要参数,正确的调用应该指定读写权限和匹配的格式:glBindImageTexture(0, texture, 0, GL_FALSE, 0, GL_READ_WRITE, GL_RGB32F);
内容的提问来源于stack exchange,提问作者SZYoo
相关产品推荐
相关产品推荐

