仅修改VBO缓冲区数据的特定元素类型
Modifying only a specific element type of VBO buffer data?
我有我的VBO使用单一缓冲区的时刻,它有顶点,texcoord和颜色元素。
现在,是否有可能有效地只更新文本而不更新顶点/颜色?它应该与单独更新缓冲区的效率相同
您可以使用glMapBufferRange将VBO的特定范围映射到用户内存中。当然,如果你的顶点、颜色和文本数据是交错的,它将相当于一个glMapBuffer。
编辑:如果你的VBO是:
[XYZ XYZ XYZ XYZ RGBA RGBA RGBA RGBA TxTy TxTy TxTy TxTy]
你可以通过映射缓冲区的最后一部分([TxTy TxTy TxTy TxTy]
)来上传纹理坐标并更新它。你也可以使用glBufferSubData来做到这一点。更新这个缓冲区比更新完整的缓冲区要快。
但是如果你使用交错数据:
[XYZ RGBA TxTy XYZ RGBA TxTy XYZ RGBA TxTy XYZ RGBA TxTy]
您可以将VBO映射到内存空间,然后通过跨越数据并修改它来更新文本记录。
一个缺点是,整个VBO,一旦修改,将需要重新到显存进行渲染;如果你经常修改这个,总线带宽可能会成为一个问题。
如果你试图对你的文本进行某种算法修改,你可以在着色器中进行此计算。另一种选择是在CPU端组成一个新值数组,并将这些值发送给着色器,并在渲染时进行替换;但是,使用这个选项,您不妨首先从原始VBO中排除文本值。
相关文章:
- C++ 未初始化的本地(非全局)int 数组中的元素类型到底是什么?
- 如何将 n 个连续元素插入到元素类型不可复制的 std::vector 中?
- 元函数使用 decltype 返回元素类型
- STDLIB中容器元素类型有什么要求?
- 使用 dectlype 推断模板元素类型中的数据类型是否正确?
- boost multi_index - 如果元素类型仅支持移动语义,如何遍历它?
- 打印/修改类对象的特定成员变量,其类定义列表 (STL) 包含的元素类型
- 使用声明中的元素类型隐式初始化 std::array
- 使用 SFINAE 和 void_t 来确定容器内的元素类型
- 键入 trait 以获取 std::array 或 C 样式数组的元素类型
- 如何在QTScript中将QLIST内部的QMAP注册为元素类型
- 关联容器,比较函数不是元素类型的一部分吗?
- 特征稀疏矩阵的 CoeffRef 中的错误,元素类型为向量
- 在编译时间检查模板参数类型是否设置或多键,并且容器的元素类型是算术的
- 从函数模板参数中自动推论对容器的元素类型
- 直接获取基于范围的循环中的元素类型 **例如"using"
- 定义指向 C++ 中相同元素类型的元素
- 如何在C++中一一阅读 CIN?元素类型不同
- 如何从STL容器实例中获取元素类型
- 容器的const_cast元素类型