SDL_Draw的编译与应用




1.安装
从 http://sdl-draw.sourceforge.net 下载。
解压到本地。
嵌入式编译:
./configure --prefix=${PWD}/tmp --host=arm-linux --build=i386 --target=arm-linux --disable-static --enable-shared --disable-sdltest --with-sdl-prefix=/home/mt2601/GUI_source/mydirectfb-yizhi/SDL-1.2.15/tmp

修改./Makefile ./src/Makefile ./libtool
所有有关编译的东西都加上arm-linux-, 比如ranlib加上 arm-linux-ranlib

make && make install只会生成静态库,不知道为什么,但是可以用
编译:(README.txt里有说明)arm-linux-gcc -o sdldraw sdldraw.c -Wall `/home/mt2601/GUI_source/mydirectfb-yizhi/SDL-1.2.15/tmp/bin/sdl-config --cflags` -I./include `/home/mt2601/GUI_source/mydirectfb-yizhi/SDL-1.2.15/tmp/bin/sdl-config --libs` ./tmp/lib/libSDL_draw.a


安装完成后,它的头文件SDL_draw还需要手动复制从include的文件夹中复制到/usr/include/SDL下,否则编译时还是找不到这个头文件

2.编译
安装完成后,就可以编译了。
编译命令:
 g++ demo.cpp -o demo -lSDL_draw
示例程序如下:

  1. #include <stdlib.h>
  2. #include "SDL/SDL.h"
  3. #include "SDL/SDL_draw.h"
  4. lib
  5.   2 
  6. int main(int argc, char *argv[])
  7. {
  8.   SDL_Surface *screen;// 屏幕
  9.   int width, height;
  10.   Uint8 video_bpp;
  11.   Uint32 videoflags;
  12.    if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) {
  13.     fprintf(stderr, "SDL初始化失败。。。。 %s", SDL_GetError());
  14.     exit(1);
  15.   }
  16.   atexit(SDL_Quit); //退出
  17.   videoflags = SDL_SWSURFACE | SDL_ANYFORMAT;
  18.   width = 640;
  19.   height = 480;
  20.   video_bpp = 0;
  21.   /*Video mode activation*/
  22.   screen = SDL_SetVideoMode(width, height, video_bpp, videoflags);
  23.   if (!screen) {
  24.     fprintf(stderr, "不能激活视频模式: %dx%d: %s\n",
  25.             width, height, SDL_GetError());
  26.     exit(2);
  27.   }
  28. {
  29.   Uint32 c_red = SDL_MapRGB(screen->format, 255,0,0);
  30.   Draw_Circle(screen, 50,50, 50, c_red); // 画圆,圆心(50,50) 半径50
  31.   Draw_Rect(screen, 500,400, 50,50, c_red);//画矩形 
  32.   SDL_UpdateRect(screen, 0, 0, 0, 0);//刷新屏幕
  33. //Wait 10 seconds
  34.     SDL_Delay( 10000 );
  35.   fprintf(stderr, "显示结束。。。。");
  36.   return 0;
  37.  
  38. }
  39. }

Library API

#include "SDL_draw.h"


void  Draw_Pixel (SDL_Surface *super,
                Sint16 x, Sint16 y, 
                Uint32 color);

Draw a colored pixel on coordinates x,y.


void  Draw_Line (SDL_Surface *super,
               Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2,
               Uint32 color);

Draw a line from x1,y1 to x2,y2.


void  Draw_Circle (SDL_Surface *super,
                 Sint16 x0, Sint16 y0, Uint16 r,
                 Uint32 color);

Draw a circle with center x0,y0 and radius r.


void  Draw_FillCircle (SDL_Surface *super,
                     Sint16 x0, Sint16 y0, Uint16 r,
                     Uint32 color);

Draw a filled circle with center x0,y0 and radius r.


void  Draw_HLine (SDL_Surface *super,
                Sint16 x0,Sint16 y0, Sint16 x1,
                Uint32 color);

Draw a horizontal line from x0,y0 to x1,y0.


void  Draw_VLine (SDL_Surface *super,
                Sint16 x0,Sint16 y0, Sint16 y1,
                Uint32 color);

Draw a vertical line from x0,y0 to x0,y1.


void  Draw_Rect (SDL_Surface *super,
               Sint16 x,Sint16 y, Uint16 w,Uint16 h,
               Uint32 color);

Draw a rectangle with upper left corner in x,y being w the width and h the height.


void  Draw_FillRect (SDL_Surface *super,
                   Sint16 x,Sint16 y, Uint16 w,Uint16 h,
                   Uint32 color);

The same as above but the rectangle is filled. This function is equivalent to SDL_FillRect (is a MACRO).


void  Draw_Ellipse (SDL_Surface *super,
                  Sint16 x0, Sint16 y0,
                  Uint16 Xradius, Uint16 Yradius,
                  Uint32 color);

Draw a ellipse with center in x0,y0. Xradius is the major axis and Yradius is the minor axis.


void  Draw_FillEllipse (SDL_Surface *super,
                      Sint16 x0, Sint16 y0,
                      Uint16 Xradius, Uint16 Yradius,
                      Uint32 color);

Draw a filled ellipse (same parameters as the above function).


void  Draw_Round (SDL_Surface *super,
                Sint16 x0,Sint16 y0, Uint16 w,Uint16 h,
                Uint16 corner, Uint32 color);

Draw a rectangle with rounded corners. x0,y0 is the upper left corner of the rectangle, w is the width and h is the height. corner is the radius of the corner.


void  Draw_FillRound (SDL_Surface *super,
                Sint16 x0,Sint16 y0, Uint16 w,Uint16 h,
                Uint16 corner, Uint32 color);

The same as above but the rounded rectangle is filled.


The file sdldrawtest.c is a example application for the library. You can compile it using (for the GNU Compiler):

$ export CFLAGS="`sdl-config --cflags` -I./include"
$ export LIBS="`sdl-config --libs` ./src/.libs/libSDL_draw.a"
$ gcc -o sdldrawtest sdldrawtest.c -Wall $CFLAGS $LIBS

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要进行sdl_ttf的交叉编译,你需要先下载SDL_ttf的源代码包(SDL_ttf-2.0.10.tar.gz),你可以在SDL官方网站的下载页面中找到它的下载地址。在进行交叉编译之前,你需要先安装好SDL、freetype和libiconv这三个依赖库。 接下来,你需要设置好交叉编译环境。根据你提供的信息,你的系统环境是linux,移植环境是arm11,编译工具链是gcc-4.3.1。确保你已经正确安装了适用于arm11的交叉编译工具链,并将其添加到系统的PATH环境变量中。 在开始编译之前,你需要先解压SDL_ttf的源代码包。进入解压后的目录,并使用以下命令进行配置和编译: ``` ./configure --host=arm-none-linux-gnueabi --prefix=/path/to/install make make install ``` 其中,--host参数指定了目标平台的体系结构,根据你的情况替换为适合arm11的值。--prefix参数指定了安装路径,根据你的需求进行替换。 编译完成后,你可以将生成的库文件和头文件拷贝到目标平台上,并将其链接到你的应用程序中。 总结起来,进行sdl_ttf的交叉编译的步骤如下: 1. 下载SDL_ttf的源代码包(SDL_ttf-2.0.10.tar.gz)。 2. 解压源代码包。 3. 设置好交叉编译环境,并确保已安装好SDL、freetype和libiconv这三个依赖库。 4. 进入解压后的目录,执行配置命令和编译命令。 5. 将生成的库文件和头文件拷贝到目标平台上。 希望这些步骤对你有帮助。如果还有其他问题,请随时提问。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [SDL以及扩展库的交叉编译过程简介](https://blog.csdn.net/hqyhqyhq/article/details/7659495)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值