2015-10-29 34 views
0

我想在我的場景中繪製兩層(讓我們說主層和調試信息層)。現在,我畫我的層以這樣的方式如何繪製兩個不同幀率的圖層?

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); 

我該如何重繪這一層只有每個第二幀?

+0

我很困惑。你說你確實想畫每一幀的圖層,然後你說你不想那麼做......? – Galik

+0

我想用兩個幀的繪製調用一個。在第一幀我畫我的圖層。在第二幀我什麼都不做,但我的圖層存在於屏幕上。在第三幀我重繪我的圖層。 –

+2

把第二層放到framebuffer(即渲染到紋理)?在每一幀中,您都會將內容複製到場景中,但您可以儘可能少地更新它。 – MaKo

回答

0

,你必須使用backbuffering技術,以便:

  1. 重寫你的渲染所以它輸出到紋理,而不是在你的重繪事件屏幕
  2. 使用後備緩衝紋理

有兩個選項

  1. 每個圖層都有自己的目標紋理,並在重畫中將它們合併爲scre en
  2. 每次重繪更新的圖層都沒有紋理,它直接渲染到設備上,最後渲染爲較慢圖層的透明紋理。

選擇什麼對你更好。對於每次重繪,我通常都有bool _redraw,並且只有在圖層中發生了某些變化時才重新渲染紋理。但可視化每個幀的紋理內容...

相關問題