日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

linux之x86裁剪移植---字符界面sdl开发入门

發布時間:2023/11/27 生活经验 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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开发入门的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。