Сделал задержку... и увидел, что все совсем не так происходит.
В оконном режиме все ОК.
В полноэкранном двойная буферизация занимается ерундой:
Есть 2 буфера.
Вот я на один вывел текст, сделал SDL_GL_SwapBuffers. Он отобразился.
Но на втором буфере этот текст не появился! Рисую на втором куб. SDL_GL_SwapBuffers - куб появился, текст исчез. Еще раз меняю - куб исчез, тот текст появился.
Пока временное решение, несовместимое с delay (тоже по непонятной причине, но из-за этого мигает при задержке, хотя она не между рефрешами):
в инитграфе SDL_GL_SetAttribute(SDL_GL_SWAP_CONTROL,1);
после каждой операции вызывается void refreshscreen() {
SDL_GL_SwapBuffers();
if(isFullScreen)
SDL_GL_SwapBuffers();
}
Хм, вроде так и должно быть.
SDL_GL_SetAttribute() can be used to select double/single buffering, but
in OpenGL, you really don't want to do a dirty rectangle thing...clear
the color buffer every frame, redraw the whole scene and swap buffers.
All modern hardware expects this, it's cleaner to code, and in some
cases, it can be faster, since the GL knows it can discard some previous
state.
Но "всю сцену" я рендерить не могу, т.к. я не знаю, что напишет пользователь. Вопрос другой тогда - почему в окне работает?
Изменено: iMichael, 10 Сентябрь 2010 - 17:00