【发布时间】:2012-12-11 03:33:08
【问题描述】:
我检查了一些东西,我得到了关于 C++ & OpenGL & GLSL 性能的奇怪结果。
在第一个程序中,我使用片段着色器将像素绘制到纹理上,然后渲染纹理。
纹理的 mag\min 为 GL_NEAREST。
在第二个程序中,我使用片段着色器并直接渲染到屏幕上。
为什么第二个程序更快?渲染纹理不是比重复相同的动作更快吗?
这就像拍摄 AAA 游戏的视频,然后在同一台计算机上显示,视频的 FPS 较低。
片段着色器是:
uniform int mx,my;
void main(void) {
vec2 p=gl_FragCoord.xy;
p-=vec2(mx,my);
if (p.x<0.0)
p.x=-p.x;
if (p.y<0.0)
p.y=-p.y;
float dis=sqrt(p.x*p.x+p.y*p.y);
dis+=(abs(p.x)+abs(p.y))-(abs(p.x)-abs(p.y));
p.x/=dis;
p.y/=dis;
gl_FragColor=vec4(p.x,p.y,0.0,1.0);
}
【问题讨论】:
-
直接将其渲染到屏幕不会涉及任何纹理读取,因此这很可能会更快。离屏渲染不一定更快,但更实用。片段着色器也可以写入多个纹理。需要正确的分析。您如何确定哪个更快?
-
@Grimmy
clock_t和clock在 SwapBuffers 之前和之后。