linux之x86裁剪移植---字符界面sdl开发入门
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                linux之x86裁剪移植---字符界面sdl开发入门
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                linux下有沒有TurboC2.0那樣的畫點、線、圓的圖形函數庫,有沒有grapihcs.h,或者與之相對應或相似的函數庫是什么?有沒有DirectX這樣的游戲開發庫?SDL就是其中之一。
??? SDL(Simple DirectMedia Layer)是一個夸平臺的多媒體游戲支持庫,其中包含了對圖形、聲音、游戲桿、線程等的支持,目前可以運行在許多平臺上,其中包括linux的 FrameBuffer控制臺、svgalib、X Window環境,以及Windows DirectX、BeOS等。SDL是編寫夸平臺游戲和多媒體應用的優秀平臺,與Windows的DirectX有的一比。主頁:http: //www.libsdl.org。
??? SDL庫幾乎已經成了目前流行的Linux的標配的多媒體庫,系統安裝時一般都已經默認安裝了它們。利用SDL庫開發應用程序,首先,要在程序中聲明要使用的相應的頭文件,比如:#include <SDL/SDL.h>,然后,在編譯時指出要連接的SDL庫即可,比如:gcc -lSDL test.c -o test。SDL庫一般位于系統的標準頭文件目錄/usr/include里,編譯器會在這個目錄里找相應的頭文件,如果要進一步省略“SDL/”,則必須在編譯時指定頭文件的具體位置,例如:gcc -I /usr/include/SDL -lSDL test.c -o test。也可以:gcc `sdl-config-libs-cflags` test.c -o test。“`”不是單引號,而是位于鍵盤左上方的反引號。
??? 要在linux控制臺字符界面的環境下進行圖形開發,還要打開framebuffer功能,方法是修改/boot/grub/grub.conf配置文件,在kernel...一行后面添加vga=0x317。如下:
title Fedora Core (2.6.15-1.2054_FC5)
?? ?root (hd0,5)
?? ?kernel /vmlinuz-2.6.15-1.2054_FC5 ro root=LABEL=/ rhgb quiet vga=0x0317
?? ?initrd /initrd-2.6.15-1.2054_FC5.img
關于VGA值與顯示器分辨率的關系如表:
?? ?640X480?? ??? ?800X600?? ??? ?1024X768?? ?1280X1024
8位色?? ?0x301?? ??? ?0x303?? ??? ?0x305?? ??? ?0x307
16位色?? ?0x311?? ??? ?0x314?? ??? ?0x317?? ??? ?0x31A
24位色?? ?0x312?? ??? ?0x315?? ??? ?0x318?? ??? ?0x31B
初始化圖形模式
要加載和初始化SDL庫需要調用SDL_Init()函數,該函數以一個參數來傳遞要激活的子系統的標記,返回-1表示初始化失敗。
下表列出來SDL的各個子系統:
標記?? ??? ?表示
SDL_INIT_VIDEO?? ??? ?視頻子系統
SDL_INIT_AUDIO?? ??? ?音頻子系統
SDL_INIT_CDROM?? ??? ?光驅子系統
SDL_INIT_TIMER?? ??? ?計時器子系統
SDL_INIT_JOYSTICK?? ?游戲桿子系統
SDL_INIT_EVERYTHING?? ?全部子系統
要同時激活多個子系統,可以把相應的標記按位或,如:SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO);
初始化SDL庫之后,還需要設置一下視頻模式,通過調用SDL_SetVideoMode()來完成:
SDL_Surface *screen;
screen=SDL_etVideoMode(640,480,16,SDL_SWSURFACE);/*640 X 480 X 16位色*/
SDL_Surface 定義在SDL_video.h中,它是一個繪圖平面,所有的繪圖操作都是在其上完成的。在退出圖形模式時由SDL自動處理。不需要用時需顯示的釋放:SDL_FreeSurface(surface);
先來看一下一個完整的例子:
//ex_sdl.c
#include <stdlib.h>
#include <SDL.h>
int main()
{
??? SDL_Surface *screen;
??? Uint32 color;
??? if ( SDL_Init( SDL_INIT_VIDEO) < 0 ) {
??????? fprintf(stderr, "無法初始化SDL: %s\n", SDL_GetError());
??????? exit(1);
??? }
? ??SDL_ShowCursor(0);
??? screen = SDL_SetVideoMode(640, 480, 16, SDL_SWSURFACE);? /*640 X 480 X 16位色*/??? if ( screen == NULL ) {
??????? fprintf(stderr, "無法設置640x480x16位色的視頻模式:%s\n", SDL_GetError());
??????? exit(1);
??? }
??? atexit(SDL_Quit);
??? color = SDL_MapRGB(screen->format,0,0,255);? /*藍色*/
??? SDL_FillRect(screen,&screen->clip_rect,color);? /*整個屏幕填充顏色*/
??? SDL_UpdateRect(screen,0,0,0,0);????????????? /*更新整個屏幕*/
??? SDL_Delay(5000);????????????????????????? /*延遲5秒鐘*/
}
atexit(SDL_Quit);的作用是在程序退出時調用SDL_Quit()函數,這樣就不必在每個要退出的地方都調用SDL_Quit()。
轉載于:https://www.cnblogs.com/mao0504/p/5589746.html
總結
以上是生活随笔為你收集整理的linux之x86裁剪移植---字符界面sdl开发入门的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 求心中的另一个自己歌词
 - 下一篇: 深圳社保交多少钱啊?