如何放大/缩小到OpenGL屏幕而不再渲染整个屏幕

use*_*451 1 c++ opengl

我正在编写一个程序来显示5百万个矩形,用OpenGL渲染.它需要约.3秒钟在屏幕上显示这些矩形.但是,当我尝试放大/缩小或向左/向右平移屏幕时,也需要相同的时间.

我想知道是否有办法将所有内容保存到内存/缓冲区中,因此屏幕不必一次又一次地重绘.

我也对其他解决方案持开放态度.

以下是我的重塑功能:

static void reshape_cb() {
    glViewport(0, 0, (GLint) screen_width, (GLint) screen_height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D (0.0, DESIGN_SIZE, 0.0, DESIGN_SIZE);

}
Run Code Online (Sandbox Code Playgroud)

dat*_*olf 5

我正在编写一个程序来显示5百万个矩形,用OpenGL渲染.它需要约.3秒钟在屏幕上显示这些矩形.

这听起来像是以非常低效的方式发送绘图命令.现代GPU能够每秒渲染数亿个三角形.我的猜测是,你正在使用立即模式.

我想知道是否有办法将所有内容保存到内存/缓冲区中,因此屏幕不必一次又一次地重绘.

缩放通常意味着改变视点或渲染分辨率,因此需要完全重绘.

我也对其他解决方案持开放态度.谢谢.

您应该优化绘图代码.关键字是:

  • 顶点阵列
  • 顶点缓冲对象
  • 大型绘图批次