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开发入门的更多相关文章

  1. linux之x86裁剪移植---grub 识别文件系统

    grub主要作用是找到内核(kernel)与部分核心模块的镜像(initrd,主要是sata硬盘驱动之类的模块),把它们导入内存中运行.kernel与initrd放在文件系统中,因此grub必须有识别 ...

  2. linux之x86裁剪移植---ffmpeg的H264解码显示(420、422)

    在虚拟机上yuv420可以正常显示 ,而945(D525)模块上却无法显示 ,后来验证了directdraw的yuv420也无法显示 ,由此怀疑显卡不支持 ,后把420转换为422显示. 420显示如 ...

  3. 如何编写一个路由器的界面1-Luci开发入门

    Howto:如何写Module(模块)-----------------这一部分主要是翻译github上的document 注意:如果您打算将模块加入LUCI整合之前,您应该阅读Module参考. 本 ...

  4. 全网络最正确的让 Linux 开机进入字符界面的方法及设置 FrameBuffer 分辨率的方法

    引言 这个标题有点长,是为了在标题中就把问题说清楚,以便搜索引擎能够把有需要的朋友准确地带到我这里来.目前在网络上,很多关于 Linux 方面的知识是过时的和错误的.我标题中指出的两个知识点就是其中的 ...

  5. Linux启动界面切换:图形界面-字符界面(转)

    Linux字符界面切换到图形界面 由字符界面切换到图形界面可用两种简单方法实现: 1.在字符界面输入startx或init 5 . 2.通过编辑/etc/inittab文件实现默认进入图形界面. 把其 ...

  6. Linux字符界面下用户账户的设置

    在Linux系统字符界面下创建.修改以及删除用户账户主要使用useradd,usermod和userdel这3个命令. 一.创建用户账户 创建用户账户就是在系统中创建一个新账户,然后为新账户分配用户U ...

  7. Linux字符界面和图形界面

    Ubuntu图形界面和字符界面的切换 Ubuntu和其他的Linux系统一样,有图形界面和字符界面,同时能够设置默认的启动界面. linux的显示界面分为命令行的字符界面和图形界面,我们可以设置lin ...

  8. linux 字符界面浏览器 w3m(转)

    最近找到了几个linux终端下使用的浏览器,主要用来测试本机web服务器是否搭建成功.因为我们一般是用ssh客户端连接linux的,所以很需要一个字符界面的浏览器.找了几个显示都不理想,只有w3m用起 ...

  9. 两款【linux字符界面下】显示【菜单】,【选项】的powershell脚本模块介绍

    两款[linux字符界面下]显示[菜单],[选项]的powershell脚本模块介绍 powershell linux  ps1 menu choice Multiselect 传教士 菜单 powe ...

随机推荐

  1. java 对象、集合的非空判断

    自我总结,有什么不到位的地方,请各位纠正补充,感激不尽! 目的:使程序更严谨 ***对象验证是否不为空:  if( null != obj ) ***List验证不为空:if( null != lis ...

  2. R语言-探索两个变量

    目的: 通过探索文件pseudo_facebook.tsv数据来学会两个变量的分析流程 知识点: 1.ggplot语法 2.如何做散点图 3.如何优化散点图 4.条件均值 5.变量的相关性 6.子集散 ...

  3. Redis进阶实践之十 Redis主从复制的集群模式

    一.引言        Redis的基本数据类型,高级特性,与Lua脚本的整合等相关知识点都学完了,说是学完了,只是完成了当前的学习计划,在以后的时间还需继续深入研究和学习.从今天开始来讲一下有关Re ...

  4. iOS-电子书开发 笔记

    前言 刚接手电子书项目时,和安卓开发者pt Cai老师[aipiti Cai,一个我很敬佩很资深的开发工程师,设计领域:c++.Java.安卓.QT等]共同商议了一下,因为项目要做要同步,移动端[手机 ...

  5. Spring对远程服务的支持

    Java程序有以下的远程调用技术选择: 远程过程调用(RPC)是同步的,客户端在服务器端返回结果之前将一直被阻塞. 各种技术适用的场景如下: 典型的RMI开发的过程如下: 定义一个接口,用于客户端和服 ...

  6. Xcode断点 中断不正常 每次断点都进入汇编

    该问题是由于XCode的设置引起,其修改方法是: 选择Xcode菜单 -> Debug ->Debug workflow,将Alway show Disassembly前面的勾去掉就好了.

  7. Windows上MongoDB的安装

    下载 下载MongoDB,自然是在他的官网下载相应系统的版本了,我下载的是Windows的安装包. 安装 傻瓜式安装,不多说.(默认安装在C盘的.) 启动 mongodb的数据存在一个叫data 文件 ...

  8. 借助Maven入手Spring Boot第一个程序

    目前网上有不少Spring Boot的入门文章,都很有帮助,本人最近在深入学习Spring Cloud,在搭建第一个Hello World程序时,感觉对于新手而言,介绍文章怎么详细都不为过,因为其中坑 ...

  9. PHP调用外部命令

    ------------------------------------------------------------------ 一.PHP调用外部命令总结                     ...

  10. numpy模块中的sum(axis)方法

    1.sum函数声明 sum(a, axis=None, dtype=None, out=None, keepdims=<class 'numpy._globals._NoValue'>) ...