我已使用 GL_ARB_shader_image_load_store 写入纹理的第一个 mipmap 级别。文档指出,在其他操作中使用该图像的内容之前,我需要调用 glMemoryBarrier,以便适当地刷新缓存。
例如,在执行 glTexSubImage2D 操作之前,我需要发出 GL_TEXTURE_UPDATE_BARRIER_BIT,而在使用对纹理进行采样的着色器发出绘制调用之前,我需要发出 GL_TEXTURE_FETCH_BARRIER_BIT。
但是,在确保 glGenerateMipmap 将使用最近写入的数据之前,我需要发出哪个屏障?
OpenGL 4.6 规范澄清了这一点:
执行此缩减之前所需的任何同步都将完成
内Generate*Mipmap
命令自己。
所以你不需要任何类型的同步。如果您以任何方式将数据写入基本 mipmap 级别,glGenerateMipmap
将执行足够的同步以使读取工作。
鉴于此,这可能是一个really好主意是不要在渲染帧的过程中调用它。
之前的规范没有给出答案,尽管此错误报告中的信息表明先前的实现正是执行上述操作 https://www.khronos.org/bugzilla/show_bug.cgi?id=1429.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)