一、什么是SDL?

SDL是 “Simple DirectMedia Layer”的缩写,SDL是一个开源的跨平台的多媒体库,封装了复杂的音视频底层操作,简化了音视频处理的难度。

SDL使用C语言写成,提供了数种控制图像、声音、输出入的函数,可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。目前多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。

1. SDL 库分类

SDL库分为 Video、Audio、CD-ROM、Joystick 和 Timer 等若干子系统,除此之外,还有一些单独的官方扩充函数库。

这些库由官方网站提供,并包含在官方文档中,共同组成了SDL的“标准库”:

  • SDL_image : 支持时下流行的图像格式,如BMP、PPM、XPM、 PCX、GIF、JPEG、PNG、TGA。
  • SDL_mixer:更多的声音输出函数以及更多的声音格式支持。
  • SDL_net:网络支持。
  • SDL_ttf:TrueType字体渲染支持。
  • SDL_rtf:简单的RTF渲染支持。

2. SDL 子系统分类

SDL 按照功能可以分成下列数个子系统(subsystem):

  • Video(图像): 图像控制以及线程(thread)和事件管理(event)。
  • Audio(声音): 声音控制
  • Joystick(摇杆): 游戏摇杆控制
  • CD-ROM(光盘驱动器): 光盘媒体控制
  • Window Management(视窗管理): 与视窗程序设计集成
  • Event(事件驱动):处理事件驱动

二、 SDL 开发环境配置

学习阶段推荐使用Visual Studio进行学习,因为环境配置方面相对来说比较简单。后续需要向其他平台迁移的时候,再进一步深入学习和整理。

SDL官网:http://www.libsdl.org/index.php 。目前SDL有两个版本 1.2 和 2.0,建议学习阶段使用 SDL 2.0。

1. 下载SDL Development Libraries

下载地址为:http://www.libsdl.org/download-2.0.php

解压缩文件,将这个文件夹拷贝到任意地方。

2. 在Visual Studio 中新建一个控制台项目

将第1步解压的文件的include目录和lib目录拷贝到项目的目录下。

3. 添加include目录

右键打开项目的属性窗口,找到 C/C++,添加附加包含目录:

4. 添加 library 目录

将lib目录添加配置进来:

5. 添加"附加依赖项"

先找到属性-->链接器--> 输入---> 附加依赖项,添加附加依赖项:SDL2.lib;SDL2main.lib;

6. 编写HelloWorld代码,验证环境配置

// SDL.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
// #include "pch.h"
#include <iostream> extern "C" {
#include "SDL.h"
} int main(int argc, char* argv[])
{
if (SDL_Init(SDL_INIT_VIDEO)) {
std::cout << "SDL_Init Error: " << SDL_GetError() << std::endl;
return ;
} SDL_Window *win = SDL_CreateWindow("Hello World!", , , , , SDL_WINDOW_SHOWN); if (win == nullptr) {
std::cout << "SDL_CreateWindow Error: " << SDL_GetError() << std::endl;
return ;
} SDL_Renderer *ren = SDL_CreateRenderer(win, -, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
if (ren == nullptr) {
SDL_DestroyWindow(win);
std::cout << "SDL_CreateRender Error: " << SDL_GetError() << std::endl;
SDL_Quit();
return ;
} std::string imagePath = "1.bmp";
SDL_Surface *bmp = SDL_LoadBMP(imagePath.c_str());
if (bmp == nullptr) {
SDL_DestroyRenderer(ren);
SDL_DestroyWindow(win);
std::cout << "SDL_LoadBMP Error: " << SDL_GetError() << std::endl;
SDL_Quit();
return ;
} SDL_Texture *tex = SDL_CreateTextureFromSurface(ren, bmp); SDL_FreeSurface(bmp);
if (tex == nullptr) {
SDL_DestroyRenderer(ren);
SDL_DestroyWindow(win);
std::cout << "SDL_CreateTextureFromSurface Error: " << SDL_GetError() << std::endl;
SDL_Quit();
return ;
} for (int i = ; i < ; ++i) {
SDL_RenderClear(ren);
SDL_RenderCopy(ren, tex, NULL, NULL);
SDL_RenderPresent(ren);
SDL_Delay();
} SDL_DestroyTexture(tex);
SDL_DestroyRenderer(ren);
SDL_DestroyWindow(win);
SDL_Quit(); // Return
return ;
}

7. 查看代码运行结果

至此,我们的SDL的环境配置成功了,并且能够正常使用了。

SDL 开发实战(一):SDL介绍及开发环境配置的更多相关文章

  1. 大数据开发实战:Stream SQL实时开发三

    4.聚合操作 4.1.group by 操作 group by操作是实际业务场景(如实时报表.实时大屏等)中使用最为频繁的操作.通常实时聚合的主要源头数据流不会包含丰富的上下文信息,而是经常需要实时关 ...

  2. 大数据开发实战:Stream SQL实时开发二

    1.介绍 本节主要利用Stream SQL进行实时开发实战,回顾Beam的API和Hadoop MapReduce的API,会发现Google将实际业务对数据的各种操作进行了抽象,多变的数据需求抽象为 ...

  3. 大数据开发实战:Stream SQL实时开发一

    1.流计算SQL原理和架构 流计算SQL通常是一个类SQL的声明式语言,主要用于对流式数据(Streams)的持续性查询,目的是在常见流计算平台和框架(如Storm.Spark Streaming.F ...

  4. 大数据开发实战:Storm流计算开发

    Storm是一个分布式.高容错.高可靠性的实时计算系统,它对于实时计算的意义相当于Hadoop对于批处理的意义.Hadoop提供了Map和Reduce原语.同样,Storm也对数据的实时处理提供了简单 ...

  5. Java开发学习(三十二)----Maven多环境配置切换与跳过测试的三种方式

    一.多环境开发 我们平常都是在自己的开发环境进行开发, 当开发完成后,需要把开发的功能部署到测试环境供测试人员进行测试使用, 等测试人员测试通过后,我们会将项目部署到生成环境上线使用. 这个时候就有一 ...

  6. Hibernate笔记——Hibernate介绍和初次环境配置

    Hibernate简介 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库. Hibernate ...

  7. Android OpenSL ES 开发:Android OpenSL 介绍和开发流程说明

    一.Android OpenSL ES 介绍 OpenSL ES (Open Sound Library for Embedded Systems)是无授权费.跨平台.针对嵌入式系统精心优化的硬件音频 ...

  8. 《python3网络爬虫开发实战》第一章、开发环境配置-问题汇总

    开发环境: VMware虚拟机 Ubuntu18.04 python3.6 (由于对vi操作水平有限,所以大部分都用的gedit进行文件编辑) 换源: 刚装上系统后换了好几个源,就清华源感觉好使点,别 ...

  9. HTML5 App商业开发实战教程 基于WeX5可视化开发平台

  10. Laravel Vuejs 实战:开发知乎 (1)项目环境配置和用户表设计

    1.使用laragon新建laravel项目 zhihu 2.配置env文件的database设置 DB_DATABASE=zhihu 3.分析users表需要的字段 4.修改数据库迁移文件: cla ...

随机推荐

  1. http 四大特征

  2. 主席树套树状数组——带修区间第k大zoj2112

    主席树带修第k大 https://www.cnblogs.com/Empress/p/4659824.html 讲的非常好的博客 首先按静态第k大建立起一组权值线段树(主席树) 然后现在要将第i个值从 ...

  3. python迭代器Itertools

    https://docs.python.org/3.6/library/itertools.html 一无限迭代器: Iterator Arguments Results Example count( ...

  4. JS中的位操作在实际项目中的应用

    前言: Linux中的文件管理子系统的权限管理,想必大家都知道:rwx分别代表read(可读),write(可写), execute(可执行,如果是可执行程序的话),其中rxw可以按照数字表示: r  ...

  5. with原理__enter__、__exit__

    Python对with的处理还很聪明.基本思想是with所求值的对象必须有一个__enter__()方法,一个__exit__()方法. 紧跟with后面的语句被求值后,返回对象的__enter__( ...

  6. MSSql-1内部数据库版本号

    源SQL Server版本 内部数据库版本 SQL Server 2017 869 SQL Server 2016 782 SQL Server 2012 706 SQL Server 2008 R2 ...

  7. 放球游戏B

    题目描述 校园里在上活动课,Red和Blue两位小朋友在玩一种游戏,他俩在一排N个格子里,自左到右地轮流放小球,每个格子只能放一个小球.第一个人只能放1个球,之后的人最多可以放前一个人的两倍数目的球, ...

  8. RabbitMQ中交换机的消息分发机制

    RabbitMQ是一个消息代理,它接受和转发消息,是一个由 Erlang 语言开发的遵循AMQP协议的开源实现.在RabbitMQ中生产者不会将消息直接发送到队列当中,而是将消息直接发送到交换机(ex ...

  9. 使用HttpClient发送文件流到服务器端

    适用场景:网络绝对路径的URL文件或图片,不存储到本地,转换成stream,直接使用HTTPClient传送到SpringBoot的服务端,将文件存储下来,并返回一个文件地址.目前分层架构的系统越来越 ...

  10. easyUI 创建有复选框的table.datagrid

    table : function(data){ pt.v.table.datagrid({ // singleSelect:true, height:295, columns:[[ {field:'x ...