如何以不同的 fps 速率绘制两个图层?

How to draw two layers with different fps rate?

我想在我的场景中绘制两个层(比如说主层和调试信息层)。现在我以这种方式绘制图层:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
layer1->draw();
layer2->draw();

我想做这样的事情:

static int frameCount = 0;

layer1->draw();

if (frameCount % 2) {
   layer2->draw();
}

frameCount++;

但我不想每一帧都绘制第二层。我想在每一帧绘制这一层,但每秒重新绘制。例如,我以这种方式绘制图层:

glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (void*)0);

glEnableVertexAttribArray(1);
glBindBuffer(GL_ARRAY_BUFFER, colorBuffer);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, (void*)0);

glDrawArrays(GL_POINTS, 0, vertexNumber);
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);

我怎样才能每隔一帧重绘这一层?

你必须使用反向缓冲技术,所以:

  1. 重写您的渲染,使其输出到纹理而不是屏幕
  2. 在重绘事件中使用后缓冲纹理

有两种选择

  1. 每一层都有自己的目标纹理,在重绘时将它们组合到屏幕上
  2. 每次重绘更新的图层没有纹理,直接渲染到设备,最上面渲染的是较慢图层的透明纹理。

选择最适合您的。我通常对每次重绘都有 bool _redraw,并且仅当图层中发生某些变化时才重新渲染纹理。但是可视化每帧纹理的内容...