SDL in Linux 亂記
SDL (Simple DirectMedia Layer) 是個跨平台的多媒體 library. 無意間找到 Sol’s Graphics for Beginners 網頁看起來很有趣.
下面程式碼來自於 SDL Skeleton and Putting Pixels 網頁.
#include#if defined(_MSC_VER) #include "SDL.h" #else #include "SDL/SDL.h" #endif SDL_Surface *screen; void render() { // Lock surface if needed if (SDL_MUSTLOCK(screen)) if (SDL_LockSurface(screen) < 0) return; // Ask SDL for the time in milliseconds int tick = SDL_GetTicks(); // Declare a couple of variables int i, j, yofs, ofs; // Draw to screen yofs = 0; for (i = 0; i < 480; i++) { for (j = 0, ofs = yofs; j < 640; j++, ofs++) { ((unsigned int*)screen->pixels)[ofs] = i * i + j * j + tick; } yofs += screen->pitch / 4; } // Unlock if needed if (SDL_MUSTLOCK(screen)) SDL_UnlockSurface(screen); // Tell SDL to update the whole screen SDL_UpdateRect(screen, 0, 0, 640, 480); } // Entry point int main(int argc, char *argv[]) { // Initialize SDL's subsystems - in this case, only video. if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) { fprintf(stderr, "Unable to init SDL: %s\n", SDL_GetError()); exit(1); } // Register SDL_Quit to be called at exit; makes sure things are // cleaned up when we quit. atexit(SDL_Quit); // Attempt to create a 640x480 window with 32bit pixels. screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE); // If we fail, return error. if ( screen == NULL ) { fprintf(stderr, "Unable to set 640x480 video: %s\n", SDL_GetError()); exit(1); } // Main loop: loop forever. while (1) { // Render stuff render(); // Poll for events, and handle the ones we care about. SDL_Event event; while (SDL_PollEvent(&event)) { switch (event.type) { case SDL_KEYDOWN: break; case SDL_KEYUP: // If escape is pressed, return (and thus, quit) if (event.key.keysym.sym == SDLK_ESCAPE) return 0; break; case SDL_QUIT: return(0); } } } return 0; }
但是看到那些程式碼.不會編譯. 只好 Google 一下. 就找到 My first opengl program in Linux! 這篇.
於是按照他的指示用下列指令編譯就可以產生執行檔.
gcc main.cpp -o main `sdl-config --cflags --libs` -lGL -lGLU