系统相关
首页 > 系统相关> > c – glUnmapBuffer,同时保持glMapBuffer内存有效为只读

c – glUnmapBuffer,同时保持glMapBuffer内存有效为只读

作者:互联网

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

如果没有,是否有任何技术原因?或者这个“功能”刚被遗漏?

解决方法:

map和unmap的目的是说“我需要一个指向这个的指针”.并且“我已经完成了使用指向这个的指针.”这就是功能所做的.

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

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

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

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

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

但是如果缓冲区被映射为读取,那么OpenGL不知道你什么时候要从它读取(因为它无法告诉你什么时候从指针读取).因此OpenGL无法保证其中的存储.简而言之:未定义的行为.你可以得到任何东西.

所以你所说的话没有意义.

标签:c-3,c,opengl,pbo
来源: https://codeday.me/bug/20190826/1730788.html