OpenGL减少制服的使用

蛋仔

我有接近10000个顶点缓冲区(不同大小)和每个缓冲区对应的整数数据。因此,当我渲染时,我会执行以下操作:

Bind shader
For each vertex buffer:
    Set uniform
    Bind vertex buffer
    Draw call

如此多的统一更改确实会使程序变慢。

所以我在考虑使用统一的缓冲区对象或ssbo,然后将整数数组发送到着色器,然后通过每次绘制调用以某种方式将其索引到数组中。是否有办法以某种方式知道在着色器中正在处理哪个绘制调用?

拉比德76

通常,OpenGL不计算绘图调用。您必须自己管理一个统一的计数器,或者可以为每个网格生成一个SSBO,并在进行绘制调用之前绑定属于该网格的SSBO。

我看到的一种可能性是使用多次抽奖(请参阅参考资料glMultiDrawArrays )。但是随后,您必须将所有网格的数据存储在同一缓冲区对象中,并且所有网格的顶点属性规范必须相同,并存储在一个“顶点数组对象”中
绘图命令的索引存储在内置的顶点着色器输入变量中gl_DrawID(需要GLSL 4.60或ARB_shader_draw_parameters)。


改善性能的另一种方法是对网格进行分类,以便对制服的更改更少。如果存在具有相同统一设置的网格,则连续渲染它们,而不必在两者之间设置统一。


通过不渲染可以实现最佳的性能改进。不渲染所有网格,仅渲染视口中“可见”的几何。
您可以实施一些简单的剔除测试,例如View Frustum Culling如果网格物体的边界框或边界球不在适当位置且未与“视锥”相交,则跳过该网格

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

OpenGL对于存在且已使用的制服返回-1

来自分类Dev

未设置LWJGL OpenGL制服

来自分类Dev

(OpenGL)上下文丢失后是否保留制服?

来自分类Dev

着色器中使用的制服无效

来自分类Dev

为什么我应该使用常量顶点属性而不是制服?

来自分类Dev

在着色器使用它们后访问 GLSL 制服

来自分类Dev

OpenGL索引和位置对于制服和顶点属性是否相同?

来自分类Dev

OpenGL-切换着色器和制服是否经常成为严重的瓶颈?

来自分类Dev

如何在SPIR-V Shader中的OpenGL中设置sampler2D制服?

来自分类Dev

OpenGL ES-未找到矢量制服-仅矩阵有效

来自分类Dev

OpenGL 如何知道将哪个图像单元附加到制服上?

来自分类Dev

openssl:减少内存使用

来自分类Dev

Javascript:使用||减少功能

来自分类Dev

使用ImageMagick减少色彩

来自分类Dev

减少g ++ RAM使用

来自分类Dev

使用openmp错误减少

来自分类Dev

减少iPad / iPhone的使用

来自分类Dev

如何减少内存使用?

来自分类Dev

在启用了UAC的情况下,使用ServiceController与使用services.msc来控制服务

来自分类Dev

在定制服务中使用SchedulerFactoryBean将Quartz与Spring结合使用

来自分类Dev

控制器使用$ scope?定制服务使用这个吗?

来自分类Dev

在Angular js中使用定制服务发布请求后出现内部服务器错误

来自分类Dev

如何使用Swift将Float制服传递给iOS Metal着色器?

来自分类Dev

使用带有多个采样器制服的单个纹理图像单元

来自分类Dev

如何在Angular 9中使用rxjs来控制服务调用的流程?

来自分类Dev

在未使用的着色器中设置制服会影响输出

来自分类Dev

在Python模拟中使用生成器来复制服务器响应

来自分类Dev

在TFS Team Foundation版本控制服务器工作区中本地使用Mercurial

来自分类Dev

使用 NSIS 创建和控制服务安装应用程序时安装失败

Related 相关文章

  1. 1

    OpenGL对于存在且已使用的制服返回-1

  2. 2

    未设置LWJGL OpenGL制服

  3. 3

    (OpenGL)上下文丢失后是否保留制服?

  4. 4

    着色器中使用的制服无效

  5. 5

    为什么我应该使用常量顶点属性而不是制服?

  6. 6

    在着色器使用它们后访问 GLSL 制服

  7. 7

    OpenGL索引和位置对于制服和顶点属性是否相同?

  8. 8

    OpenGL-切换着色器和制服是否经常成为严重的瓶颈?

  9. 9

    如何在SPIR-V Shader中的OpenGL中设置sampler2D制服?

  10. 10

    OpenGL ES-未找到矢量制服-仅矩阵有效

  11. 11

    OpenGL 如何知道将哪个图像单元附加到制服上?

  12. 12

    openssl:减少内存使用

  13. 13

    Javascript:使用||减少功能

  14. 14

    使用ImageMagick减少色彩

  15. 15

    减少g ++ RAM使用

  16. 16

    使用openmp错误减少

  17. 17

    减少iPad / iPhone的使用

  18. 18

    如何减少内存使用?

  19. 19

    在启用了UAC的情况下,使用ServiceController与使用services.msc来控制服务

  20. 20

    在定制服务中使用SchedulerFactoryBean将Quartz与Spring结合使用

  21. 21

    控制器使用$ scope?定制服务使用这个吗?

  22. 22

    在Angular js中使用定制服务发布请求后出现内部服务器错误

  23. 23

    如何使用Swift将Float制服传递给iOS Metal着色器?

  24. 24

    使用带有多个采样器制服的单个纹理图像单元

  25. 25

    如何在Angular 9中使用rxjs来控制服务调用的流程?

  26. 26

    在未使用的着色器中设置制服会影响输出

  27. 27

    在Python模拟中使用生成器来复制服务器响应

  28. 28

    在TFS Team Foundation版本控制服务器工作区中本地使用Mercurial

  29. 29

    使用 NSIS 创建和控制服务安装应用程序时安装失败

热门标签

归档