在OpenGL中调用频道的最快方法是什么?

时间:2018-06-16 15:19:40

标签: opengl

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

一种是修改片段着色器,而不是ggplot(melt(df[, .(True.species, PrMissed, PrMisID)], id.vars="True.species"), aes(x = True.species, y = value, fill = variable))+ geom_bar(position = "stack", stat = "identity")+ theme(axis.text.x = element_text(angle = 90))+ scale_x_discrete(limits = sort(df$True.species)) ,而是使用

FragColor = texture(...)

然而,红皮书引入了另一种方法,即设置参数vec4 t = texture(...); FragColor = vec4(t.b,t.g,t.r,t.a);

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

1 个答案:

答案 0 :(得分:4)

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

您被建议做的是提供像素传输函数,其中包含BGRA顺序的数据。这意味着是需要在CPU 上调整数据的人。但实际上,建议是确保您的磁盘纹理数据预先调整以获得最佳传输性能。如果您无法控制磁盘数据的格式,那么最好让实现调整纹理数据本身,而不是编写代码来执行此操作。

他们的速度可能更快。