OpenGL:缓冲区对象性能问题
我有一个关于缓冲区对象性能的问题。我已经使用标准顶点数组(不是交错)渲染了一个网格,我想将其更改为Buffer Object以提高性能。当我介绍buffers对象时,当我发现使用buffers对象会四次降低性能时,我感到震惊。我认为缓冲区应该提高性能。这是真的吗?所以,我认为我做错了什么 我已经渲染了3d平铺贴图,为了减少所需的内存量,我只使用一个平铺(顶点集)来渲染整个贴图。我只更改贴图每个平铺的纹理坐标和顶点位置的y值。位置和纹理坐标的缓冲区是使用GL_DYNAMIC_DRAW参数创建的。索引缓冲区是使用GL_STATIC_DRAW创建的,因为它在地图渲染期间不会更改。因此,对于每个贴图块,至少映射和取消映射一次贴图缓冲区。对于纹理坐标和位置,我应该只使用一个缓冲区吗OpenGL:缓冲区对象性能问题,opengl,Opengl,我有一个关于缓冲区对象性能的问题。我已经使用标准顶点数组(不是交错)渲染了一个网格,我想将其更改为Buffer Object以提高性能。当我介绍buffers对象时,当我发现使用buffers对象会四次降低性能时,我感到震惊。我认为缓冲区应该提高性能。这是真的吗?所以,我认为我做错了什么 我已经渲染了3d平铺贴图,为了减少所需的内存量,我只使用一个平铺(顶点集)来渲染整个贴图。我只更改贴图每个平铺的纹理坐标和顶点位置的y值。位置和纹理坐标的缓冲区是使用GL_DYNAMIC_DRAW参数创建的。索
谢谢,尝试使用
GL\u MODELVIEW
/GL\u texture
矩阵移动顶点/纹理坐标,并且不要使用缓冲区数据(GL\u STATIC\u DRAW
)。e、 g.如果平铺大小为1x1,则创建rect(0,0)-(1,1),并使用glTranslate
设置其在世界上的位置。纹理坐标也是如此
VBO的存在并不是为了提高绘制几个四边形的性能。当使用着色器绘制具有数千个多边形的网格时,可以看到它们的真正威力。如果您不需要与较新的opengl版本有任何向前兼容性,我认为使用它们来绘制动态变化的数据没有什么用处。如果您需要在每一帧更新缓冲区,您应该使用GL\u STREAM\u draw(这提示缓冲区内容可能只会使用一次),而不是GL\u DYNAMIC\u draw(这意味着它们在更新之前只会被使用几次)。 根据我的经验,使用GL_STREAM_DRAW创建的缓冲区将被类似于普通ol'数组处理,因此在使用它时,您应该期望与数组具有相同的性能
另外,如果不需要读取缓冲区的内容,请确保调用glMapBuffer时将访问参数设置为GL_WRITE_ONLY。否则,如果缓冲区位于视频内存中,则必须将其从视频内存传输到主内存,然后再返回(好吧,这实际上取决于驱动程序…)对于每个贴图调用。通过总线传输大量数据是一个非常容易遇到的瓶颈。好的,谢谢。是的,我正在考虑使用纹理矩阵移动纹理坐标。我也使用GL_MODELVIEW移动顶点坐标,但我需要更改一个值(y值)调整每个顶点的高度以使其适应地面高度。顺便说一句,这比几个四边形还要多。;)