2012-04-03 2 views
0

Я пытаюсь нарисовать сферы на экране, не удаляя их (чтобы получить эффект «следов» короля) с OpenGL (glut).Мерцание на полноэкранном режиме

У меня также есть текст на экране, который я хочу, чтобы читать, поэтому я должен вручную нарисовать черный прямоугольник над старым текстом, а затем нарисовать новый.

Дело в том, я хочу, чтобы превратить «следы» вкл/выкл во время работы, но Ive столкнулись с очень странные проблемы:

Когда я одного буферизацию, все прошло просто отлично, но когда я перешел на двойной буферизации и использовал только передний буфер, я начал мерцать над текстом. Это произошло только в полноэкранном режиме. В оконном режиме с таким же разрешением (1920x1080) нет мерцания, хотя я получаю тот же fps (около 250).

Кто-нибудь знает, что вызывает это и почему?

+0

Что означает «используемый только передний буфер»? Вы используете 'glutSwapBuffers()', то есть как избежать мерцания в приложениях с двойной буферизацией. – psalvaggio

+0

Нет, только наоборот. Я избегаю использования glutSwapBuffers, чтобы получить однобуферизацию. Я хочу иметь возможность переключаться между одиночной и двойной буферизацией. Мне нужна одиночная буферизация, чтобы получить эффект тропы, не рисуя все дважды. –

+1

У меня всегда складывалось впечатление, что вы переключались между ними, передавая 'GLUT_SINGLE' или' GLUT_DOUBLE' 'glutInitDisplayMode'. Я нашел этот пример, может быть, он может помочь: http://www.sgi.com/products/software/opengl/examples/glut/examples/source/sb2db.c – psalvaggio

ответ

1

Вся идея двойной буферизации объясняется в this wikipedia article. Я не уверен, почему вы не видите никаких проблем без двойной буферизации, но насколько я понимаю ваш вопрос, вам нужно использовать двойную буферизацию должным образом.

Редактировать: вас могут заинтересовать ответы Is double buffering needed any more. This answer to PiP in OpenGL causing flickering также могут иметь отношение к вашей программе.

+0

Я знаю идею двойной буферизации, но, как я уже сказал, мне иногда нужно получить эффект «след». Если бы я использовал двойную буферизацию, мне нужно было бы сделать все дважды. –

+0

Кроме того, это не объясняет, почему это происходит только в полноэкранном режиме. –

+0

wrt drawing дважды - двойная буферизация - больше cpu/mem интенсивная ;; wrt мерцает над текстом - это ожидается, так как вы также говорите, что сначала начертаете черный над старым текстом, а затем снова нарисуете текст ;; wrt ** not ** мерцание в режиме окна - мне интересно, какую ОС вы используете, когда я давно пользовался Windows, я заметил большую разницу в производительности оконного и не-оконного приложений. Я предполагаю, что видение или отсутствие мерцания будет зависящим от платформы. Возможно, попробуй посмотреть, что происходит на другой платформе или, по крайней мере, на другой машине? – akostadinov

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