【问题标题】:What is the fastest way to swizzle channels in OpenGL?在 OpenGL 中调配通道的最快方法是什么?
【发布时间】:2018-06-16 23:32:45
【问题描述】:

我听说在 OpenGL 中,将纹理数据格式从 GL_RGBA 更改为 GL_BGRA 可以显着提高像素传输性能。现在有两种方法可以调整纹理数据以适应这种格式:

一种是修改片段着色器,所以不要使用FragColor = texture(...),而是使用

vec4 t = texture(...);
FragColor = vec4(t.b,t.g,t.r,t.a);

不过红皮书介绍了另一种方法,就是设置参数GL_TEXTURE_SWIZZLE_RGBA

在我的小型测试程序中,两种方法都有效。但是其中哪一个提供更好的性能?我观察到可以在上传数据后设置参数。那么第二种方法是否等同于第一种方法,由驱动程序隐式完成?

【问题讨论】:

    标签: opengl


    【解决方案1】:

    两种纹理混合方法都与pixel transfer performance 无关。当您拨打glTex(Sub)Image 之类的电话时,就会发生像素转移。您在着色器中读取数据的方式与这些函数的性能无关。

    建议您使用 BGRA 顺序的数据提供像素传输函数。这意味着 是需要在 CPU 上调配数据的人。但实际上,建议是确保您的磁盘纹理数据已预先混合以获得最佳传输性能。如果您无法控制磁盘数据的格式,那么最好让实现自行调整纹理数据,而不是编写代码来这样做。

    他们的可能更快。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-23
      • 1970-01-01
      相关资源
      最近更新 更多