如何以不同的 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);
我怎样才能每隔一帧重绘这一层?
你必须使用反向缓冲技术,所以:
- 重写您的渲染,使其输出到纹理而不是屏幕
- 在重绘事件中使用后缓冲纹理
有两种选择
- 每一层都有自己的目标纹理,在重绘时将它们组合到屏幕上
- 每次重绘更新的图层没有纹理,直接渲染到设备,最上面渲染的是较慢图层的透明纹理。
选择最适合您的。我通常对每次重绘都有 bool _redraw
,并且仅当图层中发生某些变化时才重新渲染纹理。但是可视化每帧纹理的内容...
我想在我的场景中绘制两个层(比如说主层和调试信息层)。现在我以这种方式绘制图层:
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);
我怎样才能每隔一帧重绘这一层?
你必须使用反向缓冲技术,所以:
- 重写您的渲染,使其输出到纹理而不是屏幕
- 在重绘事件中使用后缓冲纹理
有两种选择
- 每一层都有自己的目标纹理,在重绘时将它们组合到屏幕上
- 每次重绘更新的图层没有纹理,直接渲染到设备,最上面渲染的是较慢图层的透明纹理。
选择最适合您的。我通常对每次重绘都有 bool _redraw
,并且仅当图层中发生某些变化时才重新渲染纹理。但是可视化每帧纹理的内容...