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()。
linux之x86裁剪移植---字符界面sdl开发入门的更多相关文章
- linux之x86裁剪移植---grub 识别文件系统
grub主要作用是找到内核(kernel)与部分核心模块的镜像(initrd,主要是sata硬盘驱动之类的模块),把它们导入内存中运行.kernel与initrd放在文件系统中,因此grub必须有识别 ...
- linux之x86裁剪移植---ffmpeg的H264解码显示(420、422)
在虚拟机上yuv420可以正常显示 ,而945(D525)模块上却无法显示 ,后来验证了directdraw的yuv420也无法显示 ,由此怀疑显卡不支持 ,后把420转换为422显示. 420显示如 ...
- 如何编写一个路由器的界面1-Luci开发入门
Howto:如何写Module(模块)-----------------这一部分主要是翻译github上的document 注意:如果您打算将模块加入LUCI整合之前,您应该阅读Module参考. 本 ...
- 全网络最正确的让 Linux 开机进入字符界面的方法及设置 FrameBuffer 分辨率的方法
引言 这个标题有点长,是为了在标题中就把问题说清楚,以便搜索引擎能够把有需要的朋友准确地带到我这里来.目前在网络上,很多关于 Linux 方面的知识是过时的和错误的.我标题中指出的两个知识点就是其中的 ...
- Linux启动界面切换:图形界面-字符界面(转)
Linux字符界面切换到图形界面 由字符界面切换到图形界面可用两种简单方法实现: 1.在字符界面输入startx或init 5 . 2.通过编辑/etc/inittab文件实现默认进入图形界面. 把其 ...
- Linux字符界面下用户账户的设置
在Linux系统字符界面下创建.修改以及删除用户账户主要使用useradd,usermod和userdel这3个命令. 一.创建用户账户 创建用户账户就是在系统中创建一个新账户,然后为新账户分配用户U ...
- Linux字符界面和图形界面
Ubuntu图形界面和字符界面的切换 Ubuntu和其他的Linux系统一样,有图形界面和字符界面,同时能够设置默认的启动界面. linux的显示界面分为命令行的字符界面和图形界面,我们可以设置lin ...
- linux 字符界面浏览器 w3m(转)
最近找到了几个linux终端下使用的浏览器,主要用来测试本机web服务器是否搭建成功.因为我们一般是用ssh客户端连接linux的,所以很需要一个字符界面的浏览器.找了几个显示都不理想,只有w3m用起 ...
- 两款【linux字符界面下】显示【菜单】,【选项】的powershell脚本模块介绍
两款[linux字符界面下]显示[菜单],[选项]的powershell脚本模块介绍 powershell linux ps1 menu choice Multiselect 传教士 菜单 powe ...
随机推荐
- ftp服务配置
文件传输协议(File Transfer Protocol,FTP),基于该协议FTP客户端与服务端可以实现共享文件.上传文件.下载文件. FTP 基于TCP协议生成一个虚拟的连接,主要用于控制F ...
- linux监控下几个系统工具
1.top 2.htop(yum install -y htop) 3.glances(yum install -y glances) 4.dstat -l -c -m -d -r -n --top ...
- JetBrains Pycharm 破解+汉化
准备材料: 1.JetBrains Pycharm 传送门: https://pan.baidu.com/s/1qZCpIR6 密码: rvrn 2.JetbrainsCrack-2.6.2. ...
- 洛谷 [P3258] 松鼠的新家
树上差分 对于一条路径 \(u->v\) 来说,设 \(t=LCA(u,v)\) ,d[]为差分数组 ,则有 d[u]++;d[v]++;d[t]--;d[fa[t]]--; 注意:题目中所给的 ...
- 51NOD 1705 七星剑 [DP 期望的线性性质]
传送门 题意: 七颗星,第$i$课星用第$j$个宝石有$p[i][j]$的概率成功,失败将为$g[i][j]$颗星: 第$j$个宝石化费$c[j]$ 求最小期望化费 $MD$本来自己思路挺对的看了半天 ...
- 《深入理解Java虚拟机》——垃圾收集器与内存分配策略
GC需要完成: 哪些内存需要回收 什么时候回收 如何回收 如何确定对象不再使用 引用计数算法 给对象添加一个引用计数器,当有一个地方引用它时,计数器值进行加1操作:当引用失效时,计数器值进行减1操作: ...
- python基础dict,集合,文件
字典是一种key:value的数据类型dict1{ 'stud1':'孙礼昭', 'stud2':'slz', 'stud3':'sunlizhao',}dict是无序的,key是唯一的 天生去重增 ...
- 启动mysql遇到1067问题
最近安装sql的时候,出现一些问题:启动的时候出现1067错误 在网上找了很多方法,比如删除mysql安装目录下date的bdata1, ib_logfile0, .. 等innodb的文件, 比如修 ...
- Jmeter_上传与下载
今天重点说一下Jmeter的上传与下载 1:Jmeter上传文件 首先确认你的文件名称,参数名称,MIME类型,这些可以从接口文档里面获取,或者直接在页面抓包然后从请求头里面查看.注意,此处我的文件路 ...
- 新闻热词:从爬虫到react native应用
背景 由于只想了解当天新增的top热词,减少过多信息干扰,打算做一款app实现这个功能. 架构: 热词抓取 -> mysql <=> nodejs <=> nginx & ...