我使用GL_ARB_shader_image_load_store写入纹理的第一个mipmap级别。文档说明我需要在其他操作中使用此图像的内容之前调用glMemoryBarrier,以便正确刷新缓存。
例如,在我执行glTexSubImage2D操作之前,我需要发出GL_TEXTURE_UPDATE_BARRIER_BIT,在使用对该纹理进行采样的着色器发出绘制调用之前,我需要发出GL_TEXTURE_FETCH_BARRIER_BIT。
但是,在确保glGenerateMipmap将使用最近编写的数据之前,我需要发出哪个障碍?
答案 0 :(得分:4)
OpenGL 4.6规范阐明了这一点:
执行此缩减之前所需的任何同步都将完成 在
Generate*Mipmap
命令本身内。
所以你不需要任何同步。如果您已经以任何方式将数据写入基本mipmap级别,glGenerateMipmap
将执行足够的同步以使读取工作。
鉴于此,它可能是真的好主意,不要在渲染帧的过程中调用它。
之前的规范没有答案,但此错误报告中的信息表明prior implementations did exactly the above。