8

我已经使用 GL_ARB_shader_image_load_store 写入了纹理的第一个 mipmap 级别。文档指出,在我在其他操作中使用此图像的内容之前,我需要调用 glMemoryBarrier,以便适当地刷新缓存。

例如,在我执行 glTexSubImage2D 操作之前,我需要发出 GL_TEXTURE_UPDATE_BARRIER_BIT​,在我使用对纹理进行采样的着色器发出绘制调用之前,我需要发出 GL_TEXTURE_FETCH_BARRIER_BIT​。

但是,在确保 glGenerateMipmap 将使用最近写入的数据之前,我需要发出哪个障碍?

4

1 回答 1

4

OpenGL 4.6 规范阐明了这一点:

在执行此缩减之前所需的任何同步都将在Generate*Mipmap命令本身内完成。

所以你不需要任何同步。如果您以任何方式导致数据写入基本 mipmap 级别,glGenerateMipmap将执行足够的同步以使读取工作。

鉴于此,在渲染帧的过程中不要调用它可能是一个非常好的主意。

先前的规范没有答案,尽管此错误报告中的信息表明先前的实现完全符合上述要求

于 2015-12-03T17:24:28.463 回答