Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否仅修改VBO缓冲区数据的特定元素类型?_C++_Opengl_Vbo - Fatal编程技术网

C++ 是否仅修改VBO缓冲区数据的特定元素类型?

C++ 是否仅修改VBO缓冲区数据的特定元素类型?,c++,opengl,vbo,C++,Opengl,Vbo,我有我的VBO目前使用单缓冲区,它有顶点,texcoord和颜色元素 现在,是否可以只高效地更新texcoords而不更新顶点/颜色?它的效率应该与更新单独的缓冲区相同。您可以使用将VBO的特定范围映射到用户内存中。当然,如果顶点、颜色和texcoord数据是交错的,那么它将相当于一个 编辑: 如果您的VBO是: [XYZ XYZ XYZ XYZ RGBA RGBA RGBA RGBA TxTy TxTy TxTy TxTy] 通过映射缓冲区的最后一部分([TxTy-TxTy-TxTy-TxT

我有我的VBO目前使用单缓冲区,它有顶点,texcoord和颜色元素


现在,是否可以只高效地更新texcoords而不更新顶点/颜色?它的效率应该与更新单独的缓冲区相同。

您可以使用将VBO的特定范围映射到用户内存中。当然,如果顶点、颜色和texcoord数据是交错的,那么它将相当于一个

编辑:

如果您的VBO是:

[XYZ XYZ XYZ XYZ RGBA RGBA RGBA RGBA TxTy TxTy TxTy TxTy]
通过映射缓冲区的最后一部分(
[TxTy-TxTy-TxTy-TxTy]
)并对其进行更新,只能上载纹理坐标。您也可以使用来完成此操作。更新该缓冲区比更新完整缓冲区更快

但如果使用交错数据:

[XYZ RGBA TxTy XYZ RGBA TxTy XYZ RGBA TxTy XYZ RGBA TxTy]

然后无法更新部分缓冲区。

您可以将VBO映射到内存空间,然后跨数据并修改它来更新texcoords

一个缺点是,整个VBO一旦修改,将需要重新发送到视频内存进行渲染;如果经常修改,总线带宽可能会成为一个问题


如果您试图对texcoords进行某种算法修改,您可能可以在着色器中进行此计算。另一个选项是在CPU端组成一个新值数组,将这些值发送到着色器,并在渲染时进行重放;不过,使用此选项,您最好首先将texcoords从原始VBO中排除。

我将制作动画、位置更改和照明,我不能使用着色器,因为我希望它也能在垃圾硬件上工作。因此,答案是我只能发送我修改过的X类型的元素,例如texcoords?这将与使用多个缓冲区一样快,或者更快?如何使用格式为“XYZ XYZ XYZ RGBA RGBA RGBA TxTy TxTy TxTy TxTy TxTy”的数据?或者只需告诉我称为as和i的方法是什么:)