SDL教程(一)——开发环境

2024-06-01 10:12
文章标签 教程 开发 环境 sdl

本文主要是介绍SDL教程(一)——开发环境,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

​ 一直想着要接触一下SDL, 毕竟网上很多FFmpeg的demo都是使用SDL进行显示的,如果弄好了SDL,肯定后面跑音视频的demo,就更为简单了。所以,今天早上一大早,开始搞一下这个东西。搞好搞去,查来查去,发现,还是依然没有一个比较完整的教程,感觉就是自己跑通了就好了,也不会去讲一些细节问题。这就很恼火了,明明很简单的一个东西,搞的这么麻烦。废话不多说,开始。

正文

一、环境

我这边的环境是:

win11

VS2019

这个环境可以注意一下,估计用VS2022啥的应该也没啥问题,但用低版本的话,我就不太清楚了。

二、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 开发实战(一):SDL介绍及开发环境配置 ](https://www.cnblogs.com/renhui/p/10449936.html)

三、SDL下载

SDL官网:http://www.libsdl.org/index.php

https://github.com/libsdl-org/SDL/releases/tag/release-2.30.3

可下载这个:

在这里插入图片描述

四、VS2019 + SDL

1、打开VS2019

2、新建一个C++空项目

3、建完之后,这个样子

在这里插入图片描述

4、记得在源文件那增加一个cpp文件

5、重点来了,引入头文件和库

6、引入头文件:

7、点击项目->右键->属性

8、将头文件添加到这个里面:双击进去添加

在这里插入图片描述

9、引如库文件:将库文件目录放入

在这里插入图片描述

10、引如依赖项:先找到属性–>链接器–> 输入—> 附加依赖项,添加附加依赖项:SDL2.lib;SDL2main.lib;

在这里插入图片描述

环境到这里就配置结束了。

五、引如测试代码

//#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 1;}SDL_Window* win = SDL_CreateWindow("Hello World!", 100, 100, 640, 480, SDL_WINDOW_SHOWN);if (win == nullptr) {std::cout << "SDL_CreateWindow Error: " << SDL_GetError() << std::endl;return 1;}SDL_Renderer* ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);if (ren == nullptr) {SDL_DestroyWindow(win);std::cout << "SDL_CreateRender Error: " << SDL_GetError() << std::endl;SDL_Quit();return 1;}std::string imagePath = "3.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 1;}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 1;}for (int i = 0; i < 3; ++i) {SDL_RenderClear(ren);SDL_RenderCopy(ren, tex, NULL, NULL);SDL_RenderPresent(ren);SDL_Delay(1000);}SDL_DestroyTexture(tex);SDL_DestroyRenderer(ren);SDL_DestroyWindow(win);SDL_Quit();// Returnreturn 0;
}

这个是一个显示bmp图片的程序。

注意,bmp图片要放在这个目录:

在这里插入图片描述

在这里插入图片描述

也就是要放在test.cpp同级目录,而不是在可执行文件的那个目录,如果放在那个目录,会显示无法找到对应的bmp图片。注意格式一定要原本是bmp格式,否则应该是会报错的。
刚才试了一下,用qt也是可以的。
注意,qt的话,要用MSVC2019 或是其他的,MinGw好像是用不了的
如果遇到什么问题,可以直接留言讨论

参考

1、SDL 开发实战(一):SDL介绍及开发环境配置

这篇关于SDL教程(一)——开发环境的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1020715

相关文章

一篇文章彻底搞懂macOS如何决定java环境

《一篇文章彻底搞懂macOS如何决定java环境》MacOS作为一个功能强大的操作系统,为开发者提供了丰富的开发工具和框架,下面:本文主要介绍macOS如何决定java环境的相关资料,文中通过代码... 目录方法一:使用 which命令方法二:使用 Java_home工具(Apple 官方推荐)那问题来了,

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

一文详解Python如何开发游戏

《一文详解Python如何开发游戏》Python是一种非常流行的编程语言,也可以用来开发游戏模组,:本文主要介绍Python如何开发游戏的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、python简介二、Python 开发 2D 游戏的优劣势优势缺点三、Python 开发 3D

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

全网最全Tomcat完全卸载重装教程小结

《全网最全Tomcat完全卸载重装教程小结》windows系统卸载Tomcat重新通过ZIP方式安装Tomcat,优点是灵活可控,适合开发者自定义配置,手动配置环境变量后,可通过命令行快速启动和管理... 目录一、完全卸载Tomcat1. 停止Tomcat服务2. 通过控制面板卸载3. 手动删除残留文件4.

Python的pandas库基础知识超详细教程

《Python的pandas库基础知识超详细教程》Pandas是Python数据处理核心库,提供Series和DataFrame结构,支持CSV/Excel/SQL等数据源导入及清洗、合并、统计等功能... 目录一、配置环境二、序列和数据表2.1 初始化2.2  获取数值2.3 获取索引2.4 索引取内容2

python依赖管理工具UV的安装和使用教程

《python依赖管理工具UV的安装和使用教程》UV是一个用Rust编写的Python包安装和依赖管理工具,比传统工具(如pip)有着更快、更高效的体验,:本文主要介绍python依赖管理工具UV... 目录前言一、命令安装uv二、手动编译安装2.1在archlinux安装uv的依赖工具2.2从github

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

C#实现SHP文件读取与地图显示的完整教程

《C#实现SHP文件读取与地图显示的完整教程》在地理信息系统(GIS)开发中,SHP文件是一种常见的矢量数据格式,本文将详细介绍如何使用C#读取SHP文件并实现地图显示功能,包括坐标转换、图形渲染、平... 目录概述功能特点核心代码解析1. 文件读取与初始化2. 坐标转换3. 图形绘制4. 地图交互功能缩放

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求: