glUnmapBuffer,同时将glMapBuffer内存保持为只读
glUnmapBuffer while keeping glMapBuffer memory valid as read-only
是否可以将glUnmapBuffer
作为GL_STREAM_DRAW
像素缓冲区对象,并使用SSE 4.1流加载保持glMapBuffer
之前返回的指针所指向的数据对只读操作有效?
如果没有,是否有任何技术原因?还是这个"功能"被遗漏了?
映射和取消映射的目的是说"我需要一个指向这个的指针。"answers"我已经用完了指向这个的指示器。"这就是函数的作用。
当您取消映射缓冲区时,驱动程序现在可以自由:
- 如果映射的指针不是指向缓冲区的直接指针,则将写入的数据(如果写入了任何内容)复制到缓冲区对象
- 如果映射的指针是指向该对象的指针,则在GPU内存中移动缓冲区对象
记住:映射指针不需要来返回指向该缓冲区的实际指针。它只是返回一个指针,当读取时,该指针将把数据存储在缓冲区中,当写入时,写入的字节将在取消映射时传输到缓冲区中。
此外,执行您建议的操作的唯一原因是,您希望读取缓冲区中的数据。好吧,既然你只是映射了缓冲区(可能是为了写,否则你就不会取消映射),你就知道里面有什么。如果你需要CPU访问它,你应该把数据存储在本地;这样你就可以更可靠地访问它。
如果你进行另一个像素传输,从指针中读取意味着OpenGL必须执行同步,因为PBO的整个点是异步传输。也就是说,当您执行glReadPixels
或其他操作时,OpenGL可以等待实际完成此操作,直到您映射缓冲区或使用glGetBufferSubData
。
但是,如果缓冲区是为读取而映射的,那么OpenGL就不知道你什么时候要从它读取(因为它无法判断你什么时候从指针读取)。因此OpenGL不能保证其内部的存储。简而言之:未定义的行为。在那一点上,你可以得到任何。
所以你说的没有意义。
相关文章:
- 将字符串存储在c++中的稳定内存中
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- Win32编译器选项和内存分配
- 当vector是tje全局变量时,c++中vector的内存管理
- 带内存和隔离功能的SQLite
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 迭代时从向量和内存中删除对象
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 为什么示例代码访问IUnknown中已删除的内存
- 犰狳C++ - 从常量内存初始化只读矩阵而不复制
- 从只读内存中读取结构
- 如何修改只读内存中的字符
- glUnmapBuffer,同时将glMapBuffer内存保持为只读
- 是否可以以只读模式连接到内存中的sqlite数据库?
- 是否有任何运行时断言,如:内存是只读的还是当前进程可访问的
- 将堆内存设置为只读
- 只读内存映射寄存器在C中使用' volatile const '定义,但在c++中仅使用' volatile '
- 有没有办法将分配的内存块标记为只读