2015-10-29 3 views
0

Я хочу нарисовать два слоя в моей сцене (скажем, основной слой и слой отладки). Теперь я рисую свои слои таким образом:Как нарисовать два слоя с разной скоростью 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); 

Как перерисовать этот слой только каждый второй кадр?

+0

Я смущен. Вы говорите, что хотите нарисовать слой каждый второй кадр, а затем вы говорите, что не хотите этого делать ... ??? – Galik

+0

Я хочу использовать draw call one для двух кадров. На первом кадре я рисую слой. Во втором кадре я ничего не делаю, кроме своего слоя на экране. На третьем кадре я перерисовываю слой. –

+2

Поместите второй слой в фреймбуфер (т. Е. Отрисуйте текстуру)? На каждом кадре вы копируете контент по сцене, но можете обновлять его так редко, как вам нравится. – MaKo

ответ

0

вы должны использовать технику backbuffering так:

  1. переписать рендеринг так выводит на текстуру вместо экранов
  2. в вашем случае перерисовывать использовать BackBuffer текстуры

Есть два варианта

  1. каждый слой имеет свою собственную целевую текстуру, а при перерисовании вы объединяете их в scre en
  2. слой, который обновляется при каждом перерисовании, не имеет текстуры и визуализируется непосредственно на устройстве, а поверх него отображается прозрачная текстура более медленного слоя.

Выберите, что лучше для вас. Обычно у меня есть bool _redraw для каждого перерисовывания и ретрансляции текстуры, только если что-то изменилось в слое. Но визуализируйте содержимое текстуры каждый кадр ...

 Смежные вопросы

  • Нет связанных вопросов^_^