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

时间:2015-10-29 03:03:38

标签: c++ opengl render-to-texture

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

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 个答案:

答案 0 :(得分:0)

你必须使用后备缓冲技术:

  1. 重写渲染,使其输出到纹理而不是屏幕
  2. 重绘事件中的
  3. 使用后备缓冲区纹理
  4. 有两个选项

    1. 每个图层都有自己的目标纹理,并在重绘时将它们组合到屏幕
    2. 每次重绘时更新的图层都没有纹理,它会直接渲染到设备上,并在其上面呈现较慢图层的透明纹理。
    3. 选择最适合自己的方式。我通常每次重绘都有bool _redraw,只有在图层中发生了某些变化时才重新渲染纹理。但是可视化每帧的纹理内容......