现在我的 OpenGL 应用程序变得越来越大和越来越复杂,我注意到它在非常低端的系统(如上网本)上也变得有点慢。在 Java 中,我可以通过绘制到 BufferedImage 然后将其绘制到屏幕并每隔一段时间更新缓存渲染来解决这个问题。我将如何使用 C++ 在 OpenGL 中执行此操作?
我找到了一些指南,但它们似乎只适用于较新的硬件/特定的 Nvidia 卡。由于缓存的渲染操作只会每隔一段时间更新一次,我可以牺牲速度来换取兼容性。
glBegin(GL_QUADS);
setColor(DARK_BLUE);
glVertex2f(0, 0); //TL
glVertex2f(appWidth, 0); //TR
setColor(LIGHT_BLUE);
glVertex2f(appWidth, appHeight); //BR
glVertex2f(0, appHeight); //BR
glEnd();
这是我特别关心的事情。占据整个屏幕的渐变每秒被重新绘制多次。我怎样才能将它缓存到纹理中,然后只绘制该纹理以提高性能?
此外,我在 Java 中使用的一个技巧是将其渲染为 1 X 高度的纹理,然后将其缩放为宽度 x 高度以提高性能并降低内存使用量。 openGL有这样的技巧吗?
最佳答案
如果你不想使用Framebuffer Objects出于兼容性原因(但它们非常广泛可用),您不想使用旧版(且不可移植)Pbuffers任何一个。这使您可以很容易地使用 glReadPixels 读取帧缓冲区的内容。并使用 glTexImage2D 使用该数据创建新纹理.
让我补充一点,我真的不认为在您的情况下您会收获很多。在屏幕上绘制纹理至少需要访问每个像素的纹素,如果替代方法只是像您现在所做的那样插值颜色,那实际上并不能节省多少!
关于c++ - 如何在 OpenGL 中绘制纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/640874/