所以,我一直在玩弄SDL2,看它是否会适合我的需要。 我下面介绍的例子(从lazyfoo大部分),并提出了简单的测试。
#include <stdio.h>
#include <SDL.h>
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) < 0) {
printf("SDL could not initialize! SDL Error: %s\n", SDL_GetError());
return 1;
}
else {
/* Create window */
window = SDL_CreateWindow(
"SDL Window",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
SCREEN_WIDTH,
SCREEN_HEIGHT,
SDL_WINDOW_SHOWN | SDL_WINDOW_BORDERLESS
);
if(window == NULL) {
printf("Window could not be created! SDL Error: %s\n", SDL_GetError());
return 1;
}
else {
// /* Get window surface */
screen_surface = SDL_GetWindowSurface(window);
// /* Fill the surface white */
SDL_FillRect(screen_surface, NULL, SDL_MapRGB(screen_surface->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);
两次,一前一后,工作,一旦它不会? 为什么会如果它在所有的工作Invalid renderer
被抛出? 我深感不解。
- OSX:10.7.5
- 编译:i686的-苹果darwin11-LLVM-GCC-4.2(GCC)4.2.1(基于苹果公司建立5658)(LLVM构建2336.11.00)
- SDL2:2.0.3(通过自制安装)
我还试图通过手动键入包括路径和库调用的gcc而不SDL2-配置。