Intereting Posts

SDL2 Неверный рендер на SDL_GetWindowSurface и / или SDL_CreateRenderer в OSX

Поэтому я играл с SDL2, чтобы узнать, подходит ли оно моим потребностям. Я следовал вступительным примерам (от lazyfoo в основном) и сделал простой тест.

#include  #include  const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; int main(int argc, char const *argv[]) { /* The window handle */ SDL_Window* window = NULL; /* The surface contained in the window */ SDL_Surface* screen_surface = NULL; /* Init SDL */ if(SDL_Init(SDL_INIT_VIDEO) format, 0x50, 0x50, 0x50)); // /* Update the surface */ SDL_UpdateWindowSurface(window); printf("%s\n", SDL_GetError()); /* Wait n secs */ SDL_Delay(2000); } } /* Destroy the window */ SDL_DestroyWindow(window); /* Quit SDL subsystem */ SDL_Quit(); return 0; } 

Составлено на OSX 10.7.5 (MBA 2011) с:

 gcc `sdl2-config --cflags --libs` -o sdl_test sdl_test.c 

Пример достаточно прост. Он должен инициализировать SDL, создать окно, прикрепить поверхность к окну, установить цвет в серый цвет и отобразить его – через две секунды он должен выйти.

Однако окно остается черным. Не показана серая поверхность. Вот почему я представил, что printf для ошибок SDL до задержки. Он показывает Invalid renderer который я отслеживал, чтобы его запускал screen_surface = SDL_GetWindowSurface(window);

Я также пытался сделать это по-другому

 renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_SOFTWARE); SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255); SDL_RenderClear(renderer); SDL_RenderPresent(renderer); 

вместо метода SDL_Surface .. но то же самое происходит с Invalid renderer выкинутым на SDL_CreateRenderer. Как вы можете видеть, я пробовал его с помощью _SOFTWARE и _ACCELERATED флагов – то же самое.

Теперь, вот «смешная» часть. В первом коде с SDL_Surface способом я вызвал SDL_UpdateWindowSurface (окно); дважды – один за другим. Серый цвет показывает! Однако Invalid renderer все еще выкинут, но работает код. Зачем SDL_UpdateWindowSurface(window); вызывать SDL_UpdateWindowSurface(window); дважды, один за другим, работать, а когда нет? Почему это вообще работает, если Invalid renderer выкинут? Я глубоко озадачен.

  • OSX: 10.7.5
  • компилятор: i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (основано на Apple Inc. build 5658) (LLVM build 2336.11.00)
  • SDL2: 2.0.3 (устанавливается через доморощенный)

Я также попытался вызвать gcc без sdl2-config, вручную набрав include path и libs.