- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一个缓冲区对象,其中包含一些数据。
我使用glMapBuffer
与 GL_WRITE_ONLY
并写入每隔一个字节(想想交错的顶点属性)。
然后我glUnmapBuffer
缓冲区。
我没有写入的字节是被保留还是现在未定义?
我想知道 GL_WRITE_ONLY
的主要目的似乎是为了避免将缓冲区的先前内容从卡的内存传输到主内存。然而,驱动程序无法知道我实际写入了哪些字节,以便仅部分更新缓冲区。
因此,要么驱动程序首先将内容传输到主内存,渲染 GL_WRITE_ONLY
在我能想到的几乎所有平台上都毫无意义。或者假设我写了完整的映射区域。然而手册页中没有提到这样的义务。
最佳答案
简短回答:数据被保留。
I'm wondering because the main purpose of GL_WRITE_ONLY seems to be to avoid transferring the previous content of the buffer from the card's memory to main memory.
嗯,实现有许多潜在的方法来满足该请求,并且访问标志可能有助于决定走哪条路径。例如,驱动程序可能决定在 VRAM 中对缓冲区进行一些直接 I/O 映射,而不是使用系统 RAM 进行映射。
您看到的问题实际上已由更现代的 glMapBufferRange()
解决。 GL_ARB_map_buffer_range
中介绍的API扩大。尽管名称可能暗示这是用于映射缓冲区的一部分,但它实际上完全取代了 glMapBuffer()
函数,并允许进行更精细的控制。例如,GL_MAP_INVALIDATE_RANGE_BIT
或 GL_MAP_INVALIDATE_BUFFER_BIT
标志将数据标记为无效,并启用您针对一般 GL_WRITE_ONLY
情况所考虑的优化。但如果没有这些,数据就要被保留,而如何做到这一点则是实现的问题。
关于opengl - 只写 `glMapBuffer` ,如果我不全部写怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30248594/
我正在使用 OpenGL 进行一些 GPGPU 处理。所以我有不同的线程为 OpenGL 处理线程提供工作。 在每个“工作项”之后,我需要调用 glReadPixels 和 glMapBuffer 以
我已经初始化了glewInit()和任何其他openGL的东西。所有这些都是在我执行这些调用之前进行的。 glGenBuffers( 1, &m_uiVertBufferHandle ); g
假设我有一个缓冲区对象,其中包含一些数据。 我使用glMapBuffer与 GL_WRITE_ONLY并写入每隔一个字节(想想交错的顶点属性)。 然后我glUnmapBuffer缓冲区。 我没有写入的
我对缓冲区的概念感到困惑。我了解 glBufferData 和 glBufferSubData 的基础知识。在主循环中的渲染函数之前使用 glBufferSubData,您可以使用 offset 和
我遇到了一个奇怪的问题,我想更新包含大约五十万个元素(顶点)的数组缓冲区,因此我调用 glMapBuffer(...),对某些元素进行一些操作元素并调用 glUnmapBuffer(...),但从那时
我不是在尝试流式传输或其他任何东西,我只是想通过将顶点和索引数据直接加载到 OpenGL 的缓冲区而不是必须先将其放入中间缓冲区来加快我的文件加载代码。这是获取指针的代码: void* VertexA
我正在尝试将 glMapBuffer 与 QOpenGLWidget 一起使用,但我找不到它。这是我包含的文件: #include #include #include #include #in
是否有可能 glUnmapBuffer 一个 GL_STREAM_DRAW 像素缓冲区对象,并且仍然保留先前由 glMapBuffer 返回的指针指向的数据对使用 SSE 4.1 流加载的只读操作有效
为了更新我的统一缓冲区对象,我使用 glBufferSubData .使用速度更快吗glBufferSubData或 glMapBuffer与 glUnmapBuffer ? 最佳答案 关于glMap
我一直在用glBufferData ,对我来说,您必须指定使用提示(例如 GL_DYNAMIC_DRAW)是有意义的。 然而,最近是suggested to me on Stack Overflow我
阅读《 OpenGL编程指南》第8版。 这实际上是一个硬件问题,实际上... 我介绍了有关OpenGL缓冲区的部分,据我了解它们是在图形卡内存中分配的内存空间,这是否正确? 如果是这样,我们如何使用g
我突然想到用 std::vector 管理一系列映射内存(来自 glMapBuffer)是个好主意。 // map data to ptr T* dataPtr = (T*)glMapBuffer(t
我想在创建 VBO 后更新对象的顶点列表。我都看过 glBufferSubData和 glMapBuffer而且它们似乎都在做类似的事情,这意味着我现在不确定该使用哪一个。 我的伪工作流程是: Cre
我不得不粘贴的代码太多了。我已经按照教程进行操作,但是,当我尝试自己实现它们时,似乎没有任何效果。我将在下面粘贴 glMapBuffer 例程。请注意,vertex_type 和 render_tar
我正在尝试使用 glDrawRangeElements 从 VBO 和元素缓冲区对象渲染点。 VBO 和 EBO 是这样实例化的: glGenBuffers(1, &vertex_buffer
我需要在应用程序启动时为 PBO 分配一个相当大的缓冲区(1 GB),并且这样做: glBufferData(GL_PIXEL_UNPACK_BUFFER, new_size, 0, GL_STREA
我正在通过使用 kronos 和 pvrsdk 在 ununtu 10.10 中执行 Opengl-es 2.0。现在代码 #include #include ==========||||||||
我有大量数据要传输到缓冲区,例如 VBO 或 IndirectDrawBuffer,我使用 glMapBuffer 和 glBufferSubData 来执行此操作。我发现在渲染缓冲区时使用 glMa
我是一名优秀的程序员,十分优秀!