Opengl 是否可以循环通过顶点着色器中的第二个VBO?

Opengl 是否可以循环通过顶点着色器中的第二个VBO?,opengl,vertex-buffer,vertex-shader,Opengl,Vertex Buffer,Vertex Shader,假设我有两个顶点缓冲区。一个描述我想要绘制的实际形状,另一个能够影响第一个 所以,我真正想做的是这样的事情: uniform VBO second_one; void main() { for (int i = 0; i < size_of_array(second_one); ++i) Do things with second_one[i] to alter the values create the output informations } 统一VBO二次开发;

假设我有两个顶点缓冲区。一个描述我想要绘制的实际形状,另一个能够影响第一个

所以,我真正想做的是这样的事情:

uniform VBO second_one;

void main()
{
  for (int i = 0; i < size_of_array(second_one); ++i)
    Do things with second_one[i] to alter the values
  create the output informations
}
统一VBO二次开发;
void main()
{
对于(int i=0;i<数组的大小(第二个);+i)
使用second_one[i]更改值
创建输出信息
}
我可能想做的事情可以是重力,第二个点中的每个点都试图将点拖得离它更近,等等,然后在点被调整后,应用矩阵来确定它的实际位置


我真的很惊讶这是可能的,或者是接近它的东西。但关键是要能够使用第二个VBO,或者使其成为统一的vec3类型,也就是说,我可以访问它。

对于您想要的,您有三种选择

  • 一系列制服。GLSL让你做
    uniformvec3的事情[50]。GLSL中的数组有一个
    .length()
    方法,因此您可以了解它们有多大。当然,你使用的制服数量是有限制的,但是你不应该需要超过20-30件。除此之外,您将真正感受到性能的流失
  • 。与非块制服相比,这些制服可以存储更多的数据,但它们仍然有限制。存储来自缓冲区对象。但是,根据硬件的不同,对它们的访问比直接访问要慢一些
  • 。这是将缓冲区对象附加到纹理的一种方法。使用此选项,可以从着色器中访问大量内存。但请注意:它们的访问速度不快。如果您可以使用上述方法之一,请这样做

  • 请注意#2和#3只能在支持GL 3.x及以上版本的硬件上找到。因此,DX10类硬件。

    对于您想要的,您有三种选择

  • 一系列制服。GLSL让你做
    uniformvec3的事情[50]。GLSL中的数组有一个
    .length()
    方法,因此您可以了解它们有多大。当然,你使用的制服数量是有限制的,但是你不应该需要超过20-30件。除此之外,您将真正感受到性能的流失
  • 。与非块制服相比,这些制服可以存储更多的数据,但它们仍然有限制。存储来自缓冲区对象。但是,根据硬件的不同,对它们的访问比直接访问要慢一些
  • 。这是将缓冲区对象附加到纹理的一种方法。使用此选项,可以从着色器中访问大量内存。但请注意:它们的访问速度不快。如果您可以使用上述方法之一,请这样做

  • 请注意#2和#3只能在支持GL 3.x及以上版本的硬件上找到。所以DX10类硬件。

    有什么问题吗?问题是我想使用一个VBO和变换反馈,因为它非常快。因此,能够将VBO作为制服传递将避免将相同的数据传递给制服等等!有什么问题吗?问题是我想用一个VBO和变换反馈,因为它非常快。因此,能够将VBO作为制服传递将避免将相同的数据传递给制服等等!谢谢第一个选项之所以最快,是因为它在恒定内存中运行。第二个可能在全局内存中,速度很慢,但更接近我要做的事情。最后一个在纹理记忆中!谢谢第一个选项之所以最快,是因为它在恒定内存中运行。第二个可能在全局内存中,速度很慢,但更接近我要做的事情。最后一个在纹理记忆中!