LINUX.ORG.RU

[SDL] Странная работа SDL_Flip

 


0

0

Есть примитивная программа:

#include <SDL/SDL.h>
#include <SDL/SDL_video.h>
#include <unistd.h>

int main ()
  {
  SDL_Surface *S;
  SDL_Surface *Img1;
  SDL_Surface *Img1_Opt;
  SDL_Rect r;
  r.x = 130;
  r.y = 130;

  SDL_Init (SDL_INIT_VIDEO);

  S = SDL_SetVideoMode(800, 600, 32, SDL_DOUBLEBUF);

  Img1 = SDL_LoadBMP ("Img1.bmp");
  Img1_Opt = SDL_DisplayFormat (Img1);
  SDL_FreeSurface (Img1);
  SDL_BlitSurface (Img1_Opt, NULL, S, &r);

  // !!!
  sleep (1);
  // !!!
  SDL_Flip (S);
  sleep (2);

  SDL_FreeSurface (Img1_Opt);
  SDL_Quit ();
  return 0;
  }

Если убрать задержку перед SDL_Flip, то экран иногда остаётся чёрным, а иногда программа отрабатывает как надо. Со sllepом или бесконечным циклом SDL_Flip всё работает как надо. В чём может быть дело?


Скажи пожалуйста. Ты понимаешь, что такое двойная буферизация, и что, собстно, делает SDL_Flip?
Подумай, и сам ответишь на свой вопрос.

iSage ★★★★
()
Ответ на: комментарий от iSage

Поставим вопрос по другому. Как убедиться, что картинка уже обновилась перед тем как делать Flip/Update_Rect?

С SDL и графикой столкнулся впервые. Кстати если без DOUBLEBUF - тоже самое происходит. Надо сформировать и вывести статическую картинку (хочется именно с помощью SDL).

ksicom
() автор топика

Кажется смог локализовать проблему.
Пример работает. Но если в нём заменить
screen = SDL_SetVideoMode(640, 480, 16, SDL_DOUBLEBUF | SDL_FULLSCREEN);
на
screen = SDL_SetVideoMode(640, 480, 32, SDL_DOUBLEBUF);
или на
screen = SDL_SetVideoMode(640, 480, 0, SDL_DOUBLEBUF);
то проблема появляется.
Похоже дело в bpp...
Видеокарта встроенная:
lspci:
VGA compatible controller: Intel Corporation 82945G/GZ Integrated Graphics Controller (rev 02)

На других видеокартах (ATI Radeon 9200 и ещё одна интеловская встроенная) проблему не замечал.

ksicom
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.