首先:
Windows XP SP3、2GB RAM、Intel core 2 Duo 2.33 GHz、nVidia 9600GT 1GB RAM。OpenGL 3.3 全面更新。
我在做什么的简短描述:
理想情况下,我需要在每帧使用 glTexSubImage2D 将一个单个像素放入 GL 纹理 (A) 中。
然后,在 shader-FBO-quadfacingcamera 设置中修改纹理,并用生成的 FBO 替换原始图像。
当然,我不想要 FBO 反馈循环,所以我将修改后的版本放在临时纹理中,并使用 glCopyTexSubImage2D 单独进行更新。
现在的顺序是:
1)每帧使用glTexSubImage2D将一个像素放入GL纹理(A)中(宽度=高度= 1)。
2) 此修改后的版本 A 将在 shader-FBO-quad 设置中使用/修改,以渲染成不同的纹理 (B)。
3) 使用 glCopyTexSubImage2D 将生成的纹理 B 覆盖在 A 上。
4) 重复...
通过重复这个循环,我想通过将着色器中的颜色值每帧乘以 0.99 来实现缓慢的淡入淡出效果。
有两件事是严重错误的:
1) 每帧重复 0.99 的衰减因子,衰减在 RGB 48、48、48 处停止。因此,留下一串没有完全淡出的灰色像素。
2) 程序以 100 FPS 运行。很坏。因为如果我注释掉 glCopyTexSubImage2D 程序将以 1000 FPS 运行!
我也通过注释掉 glTexSubImage2D 并单独留下 glCopyTexSubImage2D 来实现 1000 FPS。这一事实澄清了 glTexSubImage2D 和 glCopyTexSubImage2D 本身不是瓶颈(我试图用辅助 FBO 替换 glCopyTexSubImage2D 来进行复制,结果相同)。
观察:瓶颈显示了这两个命令何时起作用!
困难模式:请不要 PBO。
与源代码和 exe 链接:
http
://www.mediafire.com/? ymu4v042a1aaha3(使用 CodeBlocks 和 SDL)
FPS 计数被写入 stdout.txt
我要求解决那里暴露的两件事。
预期结果:在 800-1000 FPS 时完全淡出到纯黑色。