【重学C语言】十八、SDL2 图形编程介绍和环境配置

news2024/11/26 17:23:15

【重学C语言】十八、SDL2 图形编程介绍和环境配置

  • **SDL2介绍**
  • SDL 2用途
  • SDL 在哪些平台上运行?
  • 下载和安装 SDL2
    • 安装 SDL2
  • clion 配置 SDL2

SDL2介绍

SDL2(Simple DirectMedia Layer 2)是一个开源的跨平台多媒体开发库,主要用于游戏开发中的多媒体处理,如视频渲染、音频播放、鼠标/键盘控制等。它用C语言编写,支持多种平台,包括Windows、macOS、Linux、iOS和Android等。SDL2通过提供统一的接口,内部会根据不同的平台调用底层的API,大大降低了多媒体应用开发的难度。

SDL 2用途

视频

  • 3D图形:SDL 可与 OpenGL API 或 Direct3D API 结合使用,用于 3D 图形
  • 加速 2D 渲染 API:支持简单的旋转、缩放和 alpha 混合,所有这些都使用现代 3D API 加速,使用 OpenGL 和 Direct3D 支持加速
  • 创建和管理多个窗口

输入事件

  • 提供的事件和 API 函数用于:
    • 应用程序和窗口状态更改
    • 鼠标输入
    • 键盘输入
    • 操纵杆和游戏控制器输入
    • 多点触控手势
  • 可以使用SDL_EventState ()启用或禁用每个事件
  • 事件在发布到内部事件队列之前通过用户指定的过滤器函数
  • 线程安全事件队列

力反馈

  • Windows、Mac OS X 和 Linux 支持力反馈

音频

  • 设置8位和16位音频、单声道立体声或5.1环绕声的音频播放,如果硬件不支持格式,可选择转换
  • 音频在单独的线程中独立运行,通过用户回调机制填充
  • 专为定制软件混音器设计,但SDL_mixer提供完整的音频/音乐输出库

文件 I/O 抽象

  • 用于打开、读取和写入数据的通用抽象
  • 对文件和内存的内置支持

共享对象支持

  • 加载共享对象(Windows 上的 DLL,Mac OS X 上的 .dylib,Linux 上的 .so)
  • 共享对象中的查找函数

线程

  • 简单的线程创建API
  • 简单线程本地存储API
  • 互斥体、信号量和条件变量
  • 无锁编程的原子操作

计时器

  • 获取经过的毫秒数
  • 等待指定的毫秒数
  • 在单独的线程中创建与代码一起运行的计时器
  • 使用高分辨率计数器进行分析

CPU 特性检测

  • 查询CPU数量
  • 检测 CPU 特性和支持的指令集

大端小端支持

  • 检测当前系统的字节序
  • 用于快速交换数据值的例程
  • 读取和写入指定字节序的数据

电池管理

  • 查询电源管理状态

SDL 在哪些平台上运行?

Windows

  • 使用 Win32 API 进行显示,利用 Direct3D 进行硬件加速
  • 使用 DirectSound 和 XAudio2 作为声音

Mac OS X

  • 使用 Cocoa 进行视频显示,利用 OpenGL 进行硬件加速
  • 使用 Core Audio 播放声音

Linux

  • 使用 X11 进行视频显示,利用 OpenGL 进行硬件加速
  • 使用 ALSA、OSS 和 PulseAudio API 来处理声音

IOS

  • 使用 UIKit 进行视频显示,利用 OpenGL ES 2.0 进行硬件加速
  • 使用 Core Audio 播放声音

Android

  • 使用 JNI 接口进行视频显示,利用 OpenGL ES 1.1 和 2.0 进行硬件加速
  • 对声音使用 JNI 音频回调

下载和安装 SDL2

安装 SDL2

  1. 点击 SDL2 核心库下载 下载SDL2库,进入 GitHub下载
    在这里插入图片描述
    在这里插入图片描述

  2. 下载出来会有一个压缩包,放到一个合适的目录(记住这个目录哦,经常要用的),解压。
    在这里插入图片描述

  3. 进入解压后的目录,如下图:

    1. cmake:cmake配置文件
    2. docs:文档目录,只不过都是英文的
    3. include:头文件目录,编程需要的
    4. lib:库目录(静态库和动态库都有)

在这里插入图片描述
4. 给环境变量添加库目录,让程序运行的时候能够找到动态库。
在这里插入图片描述

clion 配置 SDL2

配置 CMakeLists.txt

在你的 CLion 项目中,你需要更新 CMakeLists.txt 文件以包含 SDL2。这通常涉及以下几个步骤:

* 查找 SDL2 的头文件和库文件。
* 使用 `find_package` 命令(如果可用)。
* 添加 SDL2 的头文件路径和库文件到你的项目中。

以下是一个简单的 CMakeLists.txt 示例,用于在 Unix-like 系统(如 Linux 或 macOS)上包含 SDL2:

cmake_minimum_required(VERSION 3.28)
project(SDL2_config C)

set(CMAKE_C_STANDARD 23)
# 查找SDL2包,REQUIRED强制请求,没找到报错
find_package(SDL2 REQUIRED) 
# 使用指定的源文件生成目标
add_executable (${PROJECT_NAME} "main.c")
# 指定目标在链接时需要的依赖(库)
target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARIES})

注意:在 Windows 上,你可能需要手动指定 SDL2 的头文件和库文件的路径。
编写代码

现在你可以开始编写使用 SDL2 的代码了。以下是一个简单的 SDL2 初始化示例:

#define SDL_MAIN_HANDLED
#include <SDL.h>

int main(int argc, char* argv[]) {
	SDL_version ver;
	SDL_GetVersion(&ver);
	SDL_Log("%d %d %d\n", ver.major, ver.minor, ver.patch);
	return 0;
}


在这里插入图片描述

构建和运行

现在你可以使用 CLion 构建并运行你的 SDL2 项目了。如果一切正常,你应该会看到一个 SDL2 窗口显示出来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1795365.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cortex系列详解

Cortex系列属于ARMv7架构(ARM公司在经典处理器ARM11以后的产品改用Cortex命名) 一、Cortex-A系列 “A”系列面向尖端的基于虚拟内存的操作系统和用户应用。 A 系列处理器适用于具有高计算要求、运行丰富操作系统以及提供交互媒体和图形体验的应用领域。 具体案例如:智能手…

2024百度之星 跑步

原题链接&#xff1a;码题集OJ-跑步 题目大意&#xff1a;一个n个人在绕圈跑&#xff0c;第i个人跑一圈的时间是i分钟&#xff0c;每二个人位置相同就会打一次招呼&#xff0c;如果同时来到终点&#xff0c;他们就会停下来&#xff0c;请问会打多少次招呼&#xff1f; 思路&a…

文件加密软件排行榜前五名|好用的五款文件加密软件分享

你的公司是否存在这些问题&#xff1a; 数据泄露事件常有发生&#xff0c;数据安全的重要性日益凸显&#xff0c;而文件加密软件则是保护数据安全的重要工具。 市场上存在众多文件加密软件&#xff0c;每款都有其独特的特点和优势。 本文将为您分享五款好用的文件加密软件&…

java通过ftp上传文件到服务器

依赖 <!-- https://mvnrepository.com/artifact/com.jcraft/jsch --><dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.55</version></dependency> 代码 package com.cyz; impor…

Docker高级篇之Dockerfile解析

文章目录 1. DockerFile简介2. DockerFile的构建过程3. DockerFile的常用保留字4. 使用案例5. 虚悬镜像 1. DockerFile简介 DockerFile是用来构建Docker镜像的文本文件&#xff0c;是由一条条构建镜像的指令和参数构成的脚本。 2. DockerFile的构建过程 DockerFile内容的基…

2.3 OpenCV随手简记(四)

阈值处理是很多高级算法底层处理的预方法之一。 自己求图像平均阈值&#xff1a; # -*- codingGBK -*- import cv2 as cv import numpy as np #求出图像均值作为阈值来二值化 def custom_image(image): gray cv.cvtColor(image, cv.COLOR_BGR2GRAY) cv.imshow("原来&qu…

精选网络安全书单:打造数字世界的钢铁长城!

目录 1.前言 2.书单推荐 2.1. 《内网渗透实战攻略》 2.2. 《Kali Linux高级渗透测试&#xff08;原书第4版&#xff09;》 2.3. 《CTF那些事儿》 2.4. 《权限提升技术&#xff1a;攻防实战与技巧》 2.5. 《数字政府网络安全合规性建设指南&#xff1a;密码应用与数据安全…

CentOS6系统因目录有隐含i权限属性致下属文件无法删除的故障一例

CentOS6服务器在升级openssh时因系统目录权限异常&#xff08;有隐含i权限属性&#xff09;&#xff0c;下属文件无法删除&#xff0c;导致系统问题的故障一例。 一、问题现象 CentOS6在升级openssh时&#xff0c;提示如下问题&#xff1a; warning: /etc/ssh/sshd_config c…

五个超实用的 ChatGPT-4o 提示词

GPT-4o 是 OpenAI 最近推出的最新人工智能模型&#xff0c;不仅具备大语言模型的能力&#xff0c;而且拥有多模态模型的看、读、说等能力&#xff0c;而且速度比 GPT-4 更快。下面我们就来介绍几个超实用的 GPT-4o 提示词&#xff0c;帮助大家更好地了解 GPT-4o 的功能和应用场…

Vuforia AR篇(五)— 地平面检测

目录 前言一、什么是地平面识别&#xff1f;二、使用步骤三、示例代码四、效果五、总结 前言 在增强现实&#xff08;AR&#xff09;应用程序的开发中&#xff0c;地平面识别是一项关键技术&#xff0c;它允许虚拟对象与现实世界的地面进行互动。Vuforia 是一个功能强大的 AR …

SpringBoot引入WebSocket依赖报ServerContainer no avaliable

1、WebSocketConfig 文件报错 Configuration EnableWebSocket public class WebSocketConfig {Beanpublic ServerEndpointExporter serverEndpointExporter() {return new ServerEndpointExporter();}2、报错内容 Exception encountered during context initialization - canc…

UFS协议—新手快速入门(二)【5-6】

目录 五、UFS协议栈 六、UFS技术演进与详解 1、UFS应用层 设备管理器 任务管理器 2、UFS传输层 3、UFS互联层 UFS协议—新手快速入门&#xff08;一&#xff09;【1-4】 五、UFS协议栈 UFS&#xff08;Universal Flash Storage&#xff09;协议是针对固态存储设备&…

德国西门子论未来质量管理 - 如何与明天相遇?

未来制造业的质量 -- 如何用软件方案满足质量要求 作者&#xff1a;Bill Butcher 翻译&编辑&#xff1a;数字化营销工兵 【前言】在Frost&Sullivan最近发表的一份白皮书中&#xff0c;他们讨论了制造业的质量投资。质量是制造过程的关键要素&#xff0c;但似乎比其他…

Ubuntu部署开源网关Apache APISIX

说明 系统&#xff1a;Ubuntu 24.04 LTSDocker版本&#xff1a;v26.1.3Docker Compose版本&#xff1a;v2.26.1 下载和配置 Ubuntu需要安装Docker和Docker Compose 下载apisix-docker仓库 git clone https://github.com/apache/apisix-docker.git修改docker-compose 配置e…

嵌入式学习记录6.6(拷贝构造/友元函数/常成员函数)

一.拷贝构造函数和拷贝赋值函数 1.1拷贝构造函数功能,格式 拷贝构造函数是一种特殊的构造函数&#xff0c;用来将一个类对象给另一个类对象初始化使用的。 1> 用一个类对象给另一个类对象初始化时&#xff0c;会自动调用拷贝构造函数。 2> 当一个类对作为函数的实参&…

【Linux】Linux环境基础开发工具_5

文章目录 四、Linux环境基础开发工具Linux小程序---进度条git 未完待续 四、Linux环境基础开发工具 Linux小程序—进度条 上篇我们实现了一个简易的进度条&#xff0c;不过那仅仅是测试&#xff0c;接下来我们真正的正式实现一个进度条。 接着编写 processbar.c 文件 然…

前端面试项目细节重难点(已工作|做分享)想(八)

面试官&#xff1a;请你讲讲你在该项目中遇到的印象深刻的问题是什么&#xff1f; 答&#xff1a;我的回答&#xff1a;该项目的实现过程中我确实遇到了问题&#xff1a;【我会给大家整理回答思路和角度&#xff0c;那那么遇到这样的问题也可借鉴这种思路进行阐述】 第一层面…

Docker 基础使用(2) 镜像与容器

文章目录 镜像的含义镜像的构成镜像的作用镜像的指令容器的含义容器的状态容器的指令 Docker 基础使用&#xff08;0&#xff09;基础认识 Docker 基础使用 (1) 使用流程概览 Docker 基础使用&#xff08;2&#xff09; 镜像与容器 Docker 基础使用&#xff08;3&#xff09; 存…

达梦8 并行查询

达梦数据库可以通过在查询语句加/* parallel */ HINT并行执行。下面以一个排序语句为例 我们通过一条监控语句查询排序区的使用情况。 最初没有查询结果&#xff08;no rows&#xff09; 伴随着语句insert /* parallel(4) */ into d select * from a order by 2执行&#xff…

Redis系列之淘汰策略介绍

Redis系列之淘汰策略介绍 文章目录 为什么需要Redis淘汰策略&#xff1f;Redis淘汰策略分类Redis数据淘汰流程源码验证淘汰流程Redis中的LRU算法Redis中的LFU算法 为什么需要Redis淘汰策略&#xff1f; 由于Redis内存是有大小的&#xff0c;当内存快满的时候&#xff0c;又没有…