SDL_gfx是SDL的一个扩展库,包括了许多图形相关的操作函数,本文介绍该库在Windows平台使用VS2003编译过程,并给出一个简单的例子。

SDL_gfx主页地址:http://www.ferzkopp.net/joomla/software-mainmenu-14/4-ferzkopps-linux-software/19-sdlgfx,最新版本是2.0.23,去年年底发布的。下载并解压后,里面包含了Linux平台编译的配置文件及Windows平台的工程文件,由于是在Windows下编译的,不用理会Linux那一套configure、Makefile。不过只有VS2008和VS2010的工程,没有VS2003的,Other Builds目录有VisualC6、C7、C8的压缩包,我试了一下,不太懂用,于是干脆自己新建一个工程来编译。,

前面说了,SDL_gfx是SDL的一个扩展库,因此,编译SDL_gfx需要SDL的库及头文件。这里假设SDL头文件在include目录,库文件(SDL.lib和SDLmain.lib)在lib目录。

下面是简单的步骤:

0、下载SDL_gfx-2.0.23并解压;

1、VS新建静态库工程:SDL_gfx;

2、将SDL的include放到工程目录,并在VS中设置好头文件路径(建议用相对路径);

路径设置:Tools->Options->左边的Projects->右边的Show directories for: 选Include files,添加对应的头文件目录;选Library files添加对应的库目录

3、将SDL_gfx-2.0.23目录所有.c、.h文件拷贝到工程目录,并添加到工程中;

4、编译工程即可(建议用Release版本)生成SDL_gfx.lib静态库。

下面以该扩展库中关于画图(点、线、矩形、圆,等等)的一些函数为例,介绍一下该库的使用。这些函数的头文件是SDL_gfxPrimitives.h。

新建工程,将SDL的include目录、lib目录、SDL_gfxPrimitives.h放到工程目录,并将刚才生成的SDL_gfx.lib放到lib目录中。由于前面已经设置好头文件及库文件目录,这里不用再设置。但需要设置依赖库,依赖库在Project->Properties->Linker->Input中"Additional Dependencies"输入lib目录的三个静态库名称。另外需要设置使用MFC动态库Project->Properties->General->"Use of MFC"->"Use MFC in a Shared DLL"

下面简单总结一下VS 2003使用SDL注意事项:

0、设置头文件、库文件所在目录
1、包含SDL.lib、SDLmain.lib(如有其它库亦要包含)
2、工程属性选"Use MFC in a Shared DLL"
3、main函数形式int main(int argc, char* argv[])
4、将SDL.dll放到程序运行目录

设置完毕即可编译程序了。

下面是完整的测试程序:

// 画图相关代码来自:
// http://www.aaroncox.net/tutorials/2dtutorials/sdlshapes.html

#include "SDL.h"
#include "SDL_gfxPrimitives.h"

const int WINDOW_WIDTH = 640;
const int WINDOW_HEIGHT = 480;
const char* WINDOW_TITLE = "SDL Test -- By Late Lee";

static SDL_Surface *g_screen;

enum color {BLACK, RED, GREEN, BLUE, CYAN, MAGENTA, YELLOW, WHITE, COLOR_MAX}; // Colors

// 颜色值:R G B A(alpha)
static Uint32 g_colors[COLOR_MAX] ={
    0x000000ff, 0xff0000ff, 0x00ff00ff, 0x0000ffff,
    0x00ffffff, 0xff00ffff, 0xffff00ff, 0xffffffff};

int initGraphic()
{
    const SDL_VideoInfo *info;
    Uint8  video_bpp;
    Uint32 videoflags;

// Initialize SDL
    if ( SDL_Init(SDL_INIT_VIDEO) < 0 )
    {
        fprintf(stderr, "Couldn't initialize SDL: %s\n",SDL_GetError());
        return 1;
    }
    atexit(SDL_Quit);

// Alpha blending doesn't work well at 8-bit color
    info = SDL_GetVideoInfo();
    if ( info->vfmt->BitsPerPixel > 8 )
    {
        video_bpp = info->vfmt->BitsPerPixel;
    }
    else
    {
        video_bpp = 16;
    }
    videoflags = SDL_SWSURFACE | SDL_DOUBLEBUF;

// Set 640x480 video mode
    if ( (g_screen=SDL_SetVideoMode(WINDOW_WIDTH,WINDOW_HEIGHT,video_bpp,videoflags)) == NULL )
    {
        fprintf(stderr, "Couldn't set %ix%i video mode: %s\n",640,480,SDL_GetError());
        return 2;
    }

SDL_WM_SetCaption(WINDOW_TITLE, 0);

return 0;
}

int drawGraphic()
{
    //boxColor (g_screen, 0, 0, g_screen->w - 1, g_screen->h - 1, g_colors[RED]);

// 像素
    //pixelRGBA(g_screen, 100, 100, 255, 0, 0, 255);
    // 水平线
    hlineColor(g_screen, 10, 100, 10, g_colors[MAGENTA]);
    hlineColor(g_screen, 10, 100, 100, g_colors[MAGENTA]);

// 垂直线
    vlineColor(g_screen, 10, 10, 100, g_colors[RED]);
    vlineColor(g_screen, 100, 10, 100, g_colors[RED]);

// 直线
    lineColor(g_screen, 100, 100, 200, 10, g_colors[YELLOW]);
    lineRGBA(g_screen, 200, 10, 100, 50, 0x80, 0x11, 0xff, 0xff);

// 三角形
    trigonColor(g_screen, 200, 10, 150, 100, 250, 100, g_colors[WHITE]);

filledTrigonColor(g_screen, 300, 10, 250, 100, 350, 100, g_colors[YELLOW]);

// 矩形
    rectangleRGBA(g_screen, -10, 300, 100, 380, 0, 255, 0, 255);

// 填充
    boxRGBA(g_screen, 210, 76, 325, 300, 255, 0, 0, 150);

// 圆
    circleColor(g_screen, 500, 200, 100, g_colors[GREEN]);

// 椭圆
    ellipseRGBA(g_screen, 600, 400, 50, 90, 255, 255, 0, 200);
    
    filledEllipseRGBA(g_screen, 600, 400, 25, 150, 0, 255, 0, 255);

// 多边形
    short x[6] = { 350, 275, 300, 325, 350, 400 }; 
    short y[6] = { 325, 325, 390, 390, 375, 300 };

polygonRGBA(g_screen, x, y, 6, 255, 255, 255, 155);

// 更新屏幕
    SDL_Flip(g_screen);
    return 0;
}

int main(int argc, char* argv[])
{
    int done = 0;
    SDL_Event event;

atexit(SDL_Quit);
    initGraphic();
    drawGraphic();
    while (!done)
    {
         /* Slow down polling */
        SDL_Delay(100);

/* Check for events */
        while (SDL_PollEvent(&event))
        {
            switch (event.type)
            {
                case SDL_QUIT:
                    done = 1;
                    break;
                default:
                    break;
            }
        }
    }

return 0;
}

效果图:

SDL_gfx-2.0.23在windows平台下的编译及例子相关推荐

  1. SDL 1.2.14在windows平台下的编译及例子

    背景: 初次接触SDL,大约是当初做毕业设计时.如今再次接触,只换了平台而已,但事是人非,年华似水.曾经的理想,如今只有不停写代码.写代码,似乎除了这事情,别的不知做什么了. 从本文开始,将发布一些在 ...

  2. ZLMediaKit在windows平台下的编译和运行

    ZLMediaKit是一个新出的流媒体服务器,与SRS功能基本一致,但是SRS不支持windows,ZLMediaKit是支持windows平台的. 方便在windows平台下进行学习和开发. 具体的 ...

  3. SQLite3.8.4.2在Windows平台下的编译和使用

    2019独角兽企业重金招聘Python工程师标准>>> SQLite is a software library that implements a self-contained,  ...

  4. 【VP9】libvpx在Windows和Linux平台下的编译和vp9编解码器的命令行参数

    =================================================================== 参考:https://www.cnblogs.com/endv/ ...

  5. Windows平台下使用Active Directory对Subversion进行权限控制(非完美解决方案)

    Windows平台下使用Active Directory对Subversion进行权限控制(非完美解决方案) Windows平台下使用Active Directory对Subversion进行权限控制 ...

  6. 在Windows平台下实现《简明 Python 教程》第十章案例(利用winrar实现压缩备份)...

    在<简明Python教程>第十章,作者以一个小的脚本开发作为案例讲解Python(http://woodpecker.org.cn/abyteofpython_cn/chinese/ch1 ...

  7. Arduino可穿戴开发入门教程Windows平台下安装Arduino IDE

    Arduino可穿戴开发入门教程Windows平台下安装Arduino IDE Windows平台下安装Arduino IDE Windows操作系统下可以使用安装向导和压缩包形式安装.下面详细讲解这 ...

  8. Windows平台下安装PhoenixSuit要点

    2019独角兽企业重金招聘Python工程师标准>>> 在上手问题这个板块经常看到烧写固件失败的求助帖,这个帖子主要整理一下Windows平台下安装PhoenixSuit和刷机的要点 ...

  9. Windows平台下安装Hadoop

    http://www.cnblogs.com/kinglau/archive/2013/08/20/3270160.html 1.安装JDK1.6或更高版本 官网下载JDK,安装时注意,最好不要安装到 ...

最新文章

  1. apache hadoop 2.4.0 64bit 在windows8.1下直接安装指南(无需虚拟机和cygwin)
  2. linux网络配置和防火墙配置一例
  3. idea创建maven的web项目
  4. Linux添加/删除用户和用户组
  5. 5.9 程序示例--非线性分类-机器学习笔记-斯坦福吴恩达教授
  6. awk 分解行、字段
  7. 改变uTools的插件安装/数据目录
  8. 再破纪录!ECCV 2020 旷视研究院15篇成果总览
  9. yarn install 遇到的错误消息 - Error EPERM operation not permitted, open .yarnrc
  10. Kubernetes搭建可扩展的微服务系统
  11. nginx配置多个站点的方法
  12. Android之使用Http协议实现文件上传功能
  13. 常言道:“人在做,天在看。”,你是怎样理解这句话的?
  14. Nginx配置共用80端口|端口转发端口映射
  15. SQLSERVER中使用函数去掉数据中的空格,批量删除数据中空格、换行符?,替换字段中字符串
  16. webqq机器人java_一步一步来做WebQQ机器人-(二)(第一次登陆)
  17. 冰点下载器手机版apk_冰点下载器手机版apk
  18. HTTPD虚拟主机配置
  19. 保护板测试仪上位机软件,蓄电池性能测试仪放电部分与上位机软件设计
  20. Android系统 GPIO状态查询

热门文章

  1. 一个男生写的关于怎么追女生昨天没有说一个很关键的东西
  2. 职业生涯设计的10点忠告
  3. 传新一轮估值200亿美金 小红书回应:以老股东增持为主
  4. 小米MIX 4内部代号曝光:“众神之王”三季度降临
  5. 1499元!魅族Watch“天青”配色正式首销:与手机完全互联互通
  6. 亚马逊创始人下月将乘自家火箭进入太空 亲弟弟同行
  7. 小鹏NGP自动导航辅助驾驶Beta版体验:论软件,这台量产车可能是第一
  8. 拼多多关联公司申请“碰多多”、“碰碰多”商标
  9. 被骂十几年,躺赚上千亿!这个“土匪”行业,还能浪多久?
  10. 字节跳动确认入局车联网:满足车载场景的用户体验