gpt4 book ai didi

c++ - glUnmapBuffer 同时保持 glMapBuffer 内存有效为只读

转载 作者:太空狗 更新时间:2023-10-29 20:29:38 27 4
gpt4 key购买 nike

是否有可能 glUnmapBuffer 一个 GL_STREAM_DRAW 像素缓冲区对象,并且仍然保留先前由 glMapBuffer 返回的指针指向的数据对使用 SSE 4.1 流加载的只读操作有效

如果不是,是否有任何技术原因?还是这个“功能”被遗漏了?

最佳答案

map 和 unmap 的目的是说“我需要一个指向它的指针”。和“我用完了指向这个的指针。”这就是函数的作用。

当您取消映射缓冲区时,驱动程序现在可以自由地:

  1. 如果映射指针不是指向该缓冲区的直接指针,则将您写入的数据(如果您写入任何内容)复制到缓冲区对象。
  2. 如果映射指针指向该对象的指针,则在 GPU 内存中四处移动缓冲区对象。

请记住:映射一个指针并不返回指向该缓冲区的实际指针。它只是返回一个指针,读取时会将数据存储在该缓冲区中,写入时,写入的字节将在取消映射时传输到缓冲区中。

此外,按照您的建议进行操作的唯一原因是您想要读取缓冲区中的数据。好吧,因为您刚刚映射了缓冲区(大概是为了写入,否则您不会取消映射),您知道其中有什么。如果您需要 CPU 访问它,您应该只将数据存储在本地;通过这种方式,您将获得更可靠的访问权限。

如果您进行另一次像素传输,从该指针读取这意味着 OpenGL 将必须执行同步,因为 PBO 的全部要点是异步传输。也就是说,当您执行 glReadPixels 或其他任何操作时,OpenGL 可以等待实际完成此操作,直到您映射缓冲区或使用 glGetBufferSubData

但是如果缓冲区被映射用于读取,那么 OpenGL 不知道您何时要从中读取(因为它无法知道您何时从指针读取)。所以OpenGL不能保证里面的存储。简而言之:未定义的行为。那时你可以得到任何东西

所以你说的没有意义。

关于c++ - glUnmapBuffer 同时保持 glMapBuffer 内存有效为只读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9349721/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com