一、環境介紹
作業系統: ubutu18.04 64位
二、SDL介紹
(Simple DirectMedia Layer)是一個自由的跨平台的多媒體開發包,适用于遊戲、遊戲SDK、示範軟體、模拟器、MPEG播放器和其他應用軟體,用途廣泛。
SDL提供了數種控制圖像、聲音、輸出入的函數,讓開發者隻要用相同或是相似的代碼就可以開發出跨多個平台(Linux、Windows、Mac OS X等)的應用軟體。
這裡使用較新的SDL2庫進行編譯安裝。
三、下載下傳編譯SDL2
3.1 下載下傳SDL2
下載下傳位址:
http://www.linuxfromscratch.org/blfs/view/cvs/multimedia/sdl2.html![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5iNzkjNykTYiBjYkBTO1QmY0MTN0E2YzAzYiNzNjJGM58CX5d2bs92Yl1iclB3bsVmdlR2LcNWaw9CXt92Yu4GZjlGbh5yYjV3Lc9CX6MHc0RHaiojIsJye.png)
wbyq@wbyq:~/work_pc$ tar xvf /mnt/hgfs/linux-share-dir/SDL2-2.0.12.tar.gz
wbyq@wbyq:~/work_pc/SDL2-2.0.12$ ./configure --prefix=$PWD/_install
wbyq@wbyq:~/work_pc/SDL2-2.0.12$ make && make install
wbyq@wbyq:~/work_pc/SDL2-2.0.12$ cd _install/
wbyq@wbyq:~/work_pc/SDL2-2.0.12/_install$ ls
bin include lib share
wbyq@wbyq:~/work_pc/SDL2-2.0.12/_install$ tree
.
├── bin
│ └── sdl2-config
├── include
│ └── SDL2
│ ├── begin_code.h
│ ├── close_code.h
│ ├── SDL_assert.h
│ ├── SDL_atomic.h
│ ├── SDL_audio.h
│ ├── SDL_bits.h
│ ├── SDL_blendmode.h
│ ├── SDL_clipboard.h
│ ├── SDL_config.h
│ ├── SDL_cpuinfo.h
│ ├── SDL_egl.h
│ ├── SDL_endian.h
│ ├── SDL_error.h
│ ├── SDL_events.h
│ ├── SDL_filesystem.h
│ ├── SDL_gamecontroller.h
│ ├── SDL_gesture.h
│ ├── SDL.h
│ ├── SDL_haptic.h
│ ├── SDL_hints.h
│ ├── SDL_joystick.h
│ ├── SDL_keyboard.h
│ ├── SDL_keycode.h
│ ├── SDL_loadso.h
│ ├── SDL_log.h
│ ├── SDL_main.h
│ ├── SDL_messagebox.h
│ ├── SDL_metal.h
│ ├── SDL_mouse.h
│ ├── SDL_mutex.h
│ ├── SDL_name.h
│ ├── SDL_opengles2_gl2ext.h
│ ├── SDL_opengles2_gl2.h
│ ├── SDL_opengles2_gl2platform.h
│ ├── SDL_opengles2.h
│ ├── SDL_opengles2_khrplatform.h
│ ├── SDL_opengles.h
│ ├── SDL_opengl_glext.h
│ ├── SDL_opengl.h
│ ├── SDL_pixels.h
│ ├── SDL_platform.h
│ ├── SDL_power.h
│ ├── SDL_quit.h
│ ├── SDL_rect.h
│ ├── SDL_render.h
│ ├── SDL_revision.h
│ ├── SDL_rwops.h
│ ├── SDL_scancode.h
│ ├── SDL_sensor.h
│ ├── SDL_shape.h
│ ├── SDL_stdinc.h
│ ├── SDL_surface.h
│ ├── SDL_system.h
│ ├── SDL_syswm.h
│ ├── SDL_test_assert.h
│ ├── SDL_test_common.h
│ ├── SDL_test_compare.h
│ ├── SDL_test_crc32.h
│ ├── SDL_test_font.h
│ ├── SDL_test_fuzzer.h
│ ├── SDL_test.h
│ ├── SDL_test_harness.h
│ ├── SDL_test_images.h
│ ├── SDL_test_log.h
│ ├── SDL_test_md5.h
│ ├── SDL_test_memory.h
│ ├── SDL_test_random.h
│ ├── SDL_thread.h
│ ├── SDL_timer.h
│ ├── SDL_touch.h
│ ├── SDL_types.h
│ ├── SDL_version.h
│ ├── SDL_video.h
│ └── SDL_vulkan.h
├── lib
│ ├── cmake
│ │ └── SDL2
│ │ ├── sdl2-config.cmake
│ │ └── sdl2-config-version.cmake
│ ├── libSDL2-2.0.so.0 -> libSDL2-2.0.so.0.12.0
│ ├── libSDL2-2.0.so.0.12.0
│ ├── libSDL2.a
│ ├── libSDL2.la
│ ├── libSDL2main.a
│ ├── libSDL2main.la
│ ├── libSDL2.so -> libSDL2-2.0.so.0.12.0
│ ├── libSDL2_test.a
│ ├── libSDL2_test.la
│ └── pkgconfig
│ └── sdl2.pc
└── share
└── aclocal
└── sdl2.m4
9 directories, 88 files
3.3 将SDL2庫安裝的路徑加入系統LD_LIBRARY_PATH環境變量
因為前面配置了SDL的庫安裝編譯的目錄在目前_install目錄下,為了編譯程式之後,運作程式能找到SDL2的庫,需要将庫的路徑加入到系統環境變量裡。可以直接在指令行執行下面代碼,或者寫一個腳本開機自動運作。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/wbyq/work_pc/SDL2-2.0.12/_install/lib
四、測試SDL
下面代碼使用SDL庫打開視窗顯示一張BMP圖檔。
4.1 源代碼
#include <iostream>
#include <SDL.h>
int main(int argc, char** argv)
{
//初始化SDL
if (SDL_Init(SDL_INIT_VIDEO) != 0)
{
std::cout << "SDL_Init Error: " << SDL_GetError() << std::endl;
return 1;
}
//建立視窗
SDL_Window *win = nullptr;
win = SDL_CreateWindow("Hello SDL2",
SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED,
640, 480, SDL_WINDOW_SHOWN);
if (win == nullptr)
{
std::cout << SDL_GetError() << std::endl;
return 1;
}
//建立渲染器
SDL_Renderer *ren = nullptr;
ren = SDL_CreateRenderer(win, -1,
SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
if (ren == nullptr)
{
std::cout << SDL_GetError() << std::endl;
return 1;
}
//建立表面
SDL_Surface *bmp = nullptr;
bmp = SDL_LoadBMP("888.bmp");
if (bmp == nullptr) {
std::cout << SDL_GetError() << std::endl;
return 1;
}
//建立材質
SDL_Texture *tex = nullptr;
tex = SDL_CreateTextureFromSurface(ren, bmp);
SDL_FreeSurface(bmp);
//清空渲染器
SDL_RenderClear(ren);
//将材質複制到渲染器
SDL_RenderCopy(ren, tex, NULL, NULL);
//呈現渲染器
SDL_RenderPresent(ren);
//視窗延時
SDL_Delay(5000);
//釋放資源
SDL_DestroyTexture(tex);
SDL_DestroyRenderer(ren);
SDL_DestroyWindow(win);
//退出SDL
SDL_Quit();
return 0;
}
4.2 Makefile檔案
CC=g++
all:
$(CC) sdl_display.c -o app -I/home/wbyq/work_pc/SDL2-2.0.12/_install/include -I/home/wbyq/work_pc/SDL2-2.0.12/_install/include/SDL2 -lSDL2 -L/home/wbyq/work_pc/SDL2-2.0.12/_install/lib -lpthread -lm -ldl
4.3 測試效果