我听说在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);
。
在我的小测试程序中,两种方法都有效。但是哪一个能提供更好的性能呢?我观察到在上传数据后可以设置参数。第二种方法是否等同于第一种方法,由驱动程序隐式完成?
答案 0 :(得分:4)
纹理混合的方法都与pixel transfer performance无关。当您拨打glTex(Sub)Image
等电话时会发生像素转移。如何读取着色器中的数据与这些函数的性能无关。
您被建议做的是提供像素传输函数,其中包含BGRA顺序的数据。这意味着你是需要在CPU 上调整数据的人。但实际上,建议是确保您的磁盘纹理数据预先调整以获得最佳传输性能。如果您无法控制磁盘数据的格式,那么最好让实现调整纹理数据本身,而不是编写代码来执行此操作。
他们的速度可能更快。