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

【重学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.mzph.cn/web/23415.shtml

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

相关文章

最优化练习题

def f(x):return x*x-4*x5 a0,b01,31、均匀搜索 令 δ ( b 0 − a 0 ) / N , a i a 0 i δ , i 1 , 2 , 3 \delta(b_0-a_0)/N,a_ia_0i\delta,i1,2,3 δ(b0​−a0​)/N,ai​a0​iδ,i1,2,3 while b0-a0>0.1:anp.linspace(a0,b0,5)for i in range(1,4):if f(a[i-1])>f…

flutter3-os:基于flutter3.x+dart3+getx手机版os管理系统

flutter3-os-admin跨平台手机后台OS系统。 原创Flutter3.22Dart3.4Getxfl_chart等技术开发仿ios手机桌面OA管理系统。自研栅格化布局引擎、自定义桌面壁纸、小部件、底部Dock菜单、可拖拽悬浮球等功能。 全新自研栅格化OS菜单布局引擎。 使用技术 编辑器&#xff1a;VScode技术…

深入理解feign远程调用的各种超时参数

1. 引言 在spring cloud微服中&#xff0c;feign远程调用可能是大家每天都接触到东西&#xff0c;但很多同学却没咋搞清楚这里边的各种超时问题&#xff0c;生产环境可能会蹦出各种奇怪的问题。 首先说下结论&#xff1a; 1)只使用feign组件&#xff0c;不使用ribbion组件&…

【Text2SQL 论文】How to prompt LLMs for Text2SQL

论文&#xff1a;How to Prompt LLMs for Text-to-SQL: A Study in Zero-shot, Single-domain, and Cross-domain Settings ⭐⭐⭐⭐ arXiv:2305.11853, NeurlPS 2023 Code: GitHub 一、论文速读 本文主要是在三种常见的 Text2SQL ICL settings 评估不同的 prompt constructio…

数据分析必备:一步步教你如何用Pandas做数据分析(18)

1、Pandas 串联 Pandas 连接的操作实例 Pandas提供了各种功能&#xff0c;可以轻松地将Series&#xff0c;DataFrame和Panel对象组合在一起。 pd.concat(objs,axis0,joinouter,join_axesNone,ignore_indexFalse)objs − 这是Series的序列或映射&#xff0c;DataFrame或Panel对…

【云岚到家】-day01-项目熟悉-查询区域服务开发

文章目录 1 云岚家政项目概述1.1 简介1.2 项目业务流程1.3 项目业务模块1.4 项目架构及技术栈1.5 学习后掌握能力 2 熟悉项目2.1 熟悉需求2.2 熟悉设计2.2.1 表结构2.2.2 熟悉工程结构2.2.3 jzo2o-foundations2.2.3.1 工程结构2.2.3.2 接口测试 3 开发区域服务模块3.1 流程分析…

Python接口自动化之使用requests库发送http请求

requests库 ​ 什么是Requests &#xff1f;Requests 是⽤Python语⾔编写&#xff0c;基于urllib&#xff0c;采⽤Apache2 Licensed开源协议的 HTTP 库。它⽐ urllib 更加⽅便&#xff0c;可以节约我们⼤量的⼯作&#xff0c;完全满⾜HTTP测试需求。 ​ 安装&#xff1a;cmd命…

docker 拉取不到镜像的问题:拉取超时

error pulling image configuration: download failed after attempts6: dial tcp 31.13.94.10:443: i/o timeout 首先设置国内的镜像源&#xff1a;复制下面直接执行 sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-EOF{"registry-mirrors"…

【POSIX】消息类的格式与使用

本文给出一个MacOS操作系统中的消息类的使用过程示例&#xff08;结合gencat命令&#xff0c;<nl_types.h>头文件以及catopen,catgets,catclose3个函数&#xff09; 首先根据对应的操作系统&#xff0c;查看 gencat 命令 man gencat 可以详细看到其中对于输入文件&…

Spark MLlib 机器学习详解

目录 &#x1f349;引言 &#x1f349;Spark MLlib 简介 &#x1f348; 主要特点 &#x1f348;常见应用场景 &#x1f349;安装与配置 &#x1f349;数据处理与准备 &#x1f348;加载数据 &#x1f348;数据预处理 &#x1f349;分类模型 &#x1f348;逻辑回归 &a…

⌈ 传知代码 ⌋ 辅助任务改进社交帖子多模态分类

&#x1f49b;前情提要&#x1f49b; 本文是传知代码平台中的相关前沿知识与技术的分享~ 接下来我们即将进入一个全新的空间&#xff0c;对技术有一个全新的视角~ 本文所涉及所有资源均在传知代码平台可获取 以下的内容一定会让你对AI 赋能时代有一个颠覆性的认识哦&#x…

【自然语言处理】【Scaling Law】语言模型物理学 第3.3部分:知识容量Scaling Laws

语言模型物理学3.3&#xff1a;知识容量Scaling Laws 论文名称&#xff1a;Physics of Language Models: Part 3.3, Knowledge Capacity Scaling Laws 论文地址&#xff1a;https://arxiv.org/pdf/2404.05405 相关博客 【自然语言处理】【Scaling Law】Observational Scaling …

R语言探索与分析17-股票题目

Value at Risk&#xff08;VaR&#xff09;是一种统计技术&#xff0c;用于量化投资组合在正常市场条件下可能遭受的最大潜在损失。它是风险管理和金融领域中一个非常重要的概念。VaR通常以货币单位表示&#xff0c;用于估计在给定的置信水平和特定时间范围内&#xff0c;投资组…

OpenCV的小部件最基本范例

OpenCV也有与PYQT类似的小部件&#xff0c;例如滑块slider。OpenCV可以用与PYQT类似的“信号与槽”方法&#xff0c;也可以在函数中直接查询小部件的值。 import cv2 import numpy as npcv2.namedWindow(Show1) image np.zeros((100, 400, 3), np.uint8) # 创建一个空白内容…

JavaScript基础知识4(数组、函数、参数、作用域、具名和匿名函数、逻辑运算符短路、转化布尔类型)

JavaScript基础知识4&#xff08;数组、函数、参数、作用域、具名和匿名函数、逻辑运算符短路、转化布尔类型&#xff09; 数组数组是什么&#xff1f;数组的基本使用定义数组和数组单元访问数组和数组索引数据单元值类型数组长度属性 操作数组 函数声明和调用声明&#xff08;…

(面试官问我微服务与naocs的使用我回答了如下,面试官让我回去等通知)微服务拆分与nacos的配置使用

微服务架构 正常的小项目就是所有的功能集成在一个模块中&#xff0c;这样代码之间不仅非常耦合&#xff0c;而且修改处理的时候也非常的麻烦&#xff0c;应对高并发时也不好处理&#xff0c;所以 我们可以使用微服务架构&#xff0c;对项目进行模块之间的拆分&#xff0c;每一…

前端传参数后端变量类型能够接受到List却无法接收到值

问题描述 今天写了个接口&#xff0c;下图所示 ReqVO里是这样的&#xff1a; 然后前端去请求&#xff0c;从请求结果中看发现这里值是在的&#xff08;有经验的可能就看出来了otherInfo.id: 这样以参数后端是接收不到的&#xff0c;但是当时没发现&#xff09; 传进来后端…

维纳运动的概念

维纳运动&#xff08;Wiener Process&#xff09;&#xff0c;也称为标准布朗运动&#xff0c;是一种重要的随机过程&#xff0c;广泛应用于数学、物理学和金融学等领域。它是一个连续时间的随机过程&#xff0c;具有一些特殊的性质&#xff0c;使其成为描述随机动态系统的经典…

GAT1399协议分析(8)--批量图像查询

一、请求消息定义 视频图像包含视频片段、 图像、 文件、 人员、 人脸、 机动车、 非机动车、 物品、 场景和视频案事件、 视频图像标签等对象 在消息体中,可以包含其中一种类,加上Data字段即可。 ImageInfo对象 二、请求消息实例 wireshark 抓包实例 请求: 文本化: /V…

制造执行MES系统在光伏行业的应用

全球对可再生能源的需求不断增长&#xff0c;光伏能源作为一种清洁、可持续的能源形式&#xff0c;已经在广泛应用中受到了广泛关注。为满足工业领域的光伏能源需求&#xff0c;光伏制造执行系统(MES)作为一种集成化的技术解决方案&#xff0c;提供了更高效、更可靠的解决方案。…