gpt4 book ai didi

opengl - 只写 `glMapBuffer` ,如果我不全部写怎么办?

转载 作者:行者123 更新时间:2023-12-02 04:52:27 26 4
gpt4 key购买 nike

假设我有一个缓冲区对象,其中包含一些数据。

我使用glMapBufferGL_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_BITGL_MAP_INVALIDATE_BUFFER_BIT 标志将数据标记为无效,并启用您针对一般 GL_WRITE_ONLY 情况所考虑的优化。但如果没有这些,数据就要被保留,而如何做到这一点则是实现的问题。

关于opengl - 只写 `glMapBuffer` ,如果我不全部写怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30248594/

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