如何绘制具有不同fps速率的两层



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

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. 在重绘事件中使用backbuffer纹理

有两种选择

  1. 每个层都有自己的目标纹理,在重新绘制时,你可以将它们组合到屏幕上
  2. 每次重绘都更新的层没有纹理,它直接渲染到设备上,最重要的是渲染较慢层的父纹理

选择对你更好的。我通常对每次重绘都有bool _redraw,只有在层中发生变化时才重绘纹理。但是可视化每一帧的纹理内容。。。

最新更新