SDL2库基础使用

news/2026/1/21 21:47:50/文章来源:https://www.cnblogs.com/aliboca/p/19514142

1.初始化 SDL2 子系统(视频相关),失败则打印错误并返回 -1

if (SDL_Init(SDL_INIT_VIDEO)) {fprintf(stderr, "SDL_Init: %s\n", SDL_GetError());  // 输出初始化失败原因return -1;  // 返回错误码
}

2.创建一个标题为 "LCD Simulator" 的窗口

SDL_Window *win = SDL_CreateWindow("LCD Simulator",SDL_WINDOWPOS_CENTERED,        // X 坐标居中SDL_WINDOWPOS_CENTERED,        // Y 坐标居中LCD_WIDTH,                      // 宽度LCD_HEIGHT,                     // 高度SDL_WINDOW_SHOWN);              // 显示标志
if (!win) {  // 如果窗口创建失败fprintf(stderr, "SDL_CreateWindow: %s\n", SDL_GetError());  // 打印错误信息goto quit;  // 跳转到退出标签,释放资源
}

3.创建一个加速渲染器(使用 GPU 加速),绑定到上面的窗口

SDL_Renderer *ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED);
if (!ren) {  // 如果渲染器创建失败fprintf(stderr, "SDL_CreateRenderer: %s\n", SDL_GetError());  // 打印错误信息goto quit;  // 跳转到退出标签
}

4.创建一个纹理(Texture),用于在屏幕上绘制内容

SDL_Texture *tex = SDL_CreateTexture(ren, SDL_PIXELFORMAT_ARGB8888,SDL_TEXTUREACCESS_STREAMING,LCD_WIDTH, LCD_HEIGHT);
if (!tex) {  // 如果纹理创建失败fprintf(stderr, "SDL_CreateTexture: %s\n", SDL_GetError());  // 打印错误信息goto quit;  // 跳转到退出标签
}

5.背景色改白

SDL_SetRenderDrawColor(ren, 255, 255, 255, 255);   // 设置渲染器绘图颜色为白色
SDL_RenderClear(ren);   // 使用当前设置的颜色清空整个渲染目标(即画布),背景变白

6.整页更新屏幕

SDL_UpdateTexture(tex, NULL, pixels, LCD_WIDTH * 4); // NULL 表示整个纹理区域都更新
SDL_RenderClear(ren); // 清空渲染目标(画布),用之前设置的白色颜色填充背景
SDL_RenderCopy(ren, tex, NULL, NULL); // 将纹理(tex)绘制到屏幕上(即“拷贝”到渲染器缓冲区)
SDL_RenderPresent(ren); // 把当前渲染缓冲区的内容提交并显示到窗口上

7.画形状

//矩形
SDL_SetRenderDrawColor(ren, 0, 255, 0, 255); // 绿色
SDL_Rect rect2 = {400, 300, 50, 50};
SDL_RenderFillRect(ren, &rect2);
//点
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255);  // 红色
SDL_RenderDrawPoint(renderer, 400, 300);           // 画点
SDL_RenderPresent(renderer);      // 显示渲染结果,需调用才能更新

8.资源清理

SDL_DestroyTexture(tex);      // 销毁纹理(图像数据)
SDL_DestroyRenderer(ren);     // 销毁渲染器(绘图上下文)
SDL_DestroyWindow(win);       // 销毁窗口(显示容器)
quit:SDL_Quit();  // 退出 SDL 子系统,释放所有内部资源

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

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

相关文章

android 系统中间件和 平台中间件 的区别,Framework等

这是一个非常专业的问题,涉及到Android系统架构的核心层次。简单来说,平台中间件是通用、标准化的“官方层”,而系统中间件是厂商深度定制、差异化的“优化层”。 下面我通过一个表格来清晰地概括两者的主要区别,然后再详细解释&a…

宝妈宝爸必看!儿童羽绒服十大名牌揭秘

宝妈宝爸必看!儿童羽绒服十大名牌揭秘开篇引入 家人们,冬天的寒风那叫一个凛冽,每次带娃出门,看着孩子被冻得小脸蛋红扑扑的,当家长的真是心疼!给孩子选一件暖和又靠谱的羽绒服,就成了咱当务之急。可市场上儿童…

【Script】加载工程文件

【Script】加载工程文件 引言 正文 调用方法。 加载当前目录下的文件 加载存放在特定目录下的文件 Author: JiJi \textrm{Author: JiJi} Author: JiJi Created Time: 2026.01.21 \textrm{Created Time: 2026.01.21} Created Time: 2026.01.21

2026元宝优化服务商TOP6推荐——AI搜索时代精准破局指南

2026 元宝优化GEO服务商TOP6推荐——AI搜索时代精准破局指南 2026年,AI原生搜索已成为流量核心入口,GEO(生成式引擎优化)不再是营销增效的可选工具,而是企业数字化生存的刚需能力。从AI搜索排名优化、AI SEO优化到…

详细解释 — Verilog中非阻塞赋值为什么能解决时序逻辑里的“寄存器之间竞争 / 读写不一致” - 详解

详细解释 — Verilog中非阻塞赋值为什么能解决时序逻辑里的“寄存器之间竞争 / 读写不一致” - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block…

2026/1/21

2026/1/211.VSCODE中!+enter=前端模板 2.注释:ctrl+/ 3. 4.标题:到 5.颜色表示:CSS引入方式 • 行内样式: • 内部样式: • 外部样式: xxx.css 颜色表示 • 关键字: red、green . . . • rgb表示法: rgb(…

宝妈宝爸闭眼入!2026十大儿童鞋服品牌大揭秘

宝妈宝爸闭眼入!2026十大儿童鞋服品牌大揭秘一.开篇痛点引入 家有萌娃,每次给孩子挑选鞋服都像是一场 “大战”。一方面担心面料不安全,伤害孩子娇嫩肌肤;另一方面,孩子长得快,鞋服更新频繁,预算得精打细算 。款…

奇迹漫步:促进团队协作的意外方式

奇迹漫步:促进团队协作的意外方式 关键词:团队协作、奇迹漫步、团队沟通、团队凝聚力、创新协作方式 摘要:本文聚焦于“奇迹漫步”这一促进团队协作的意外方式。首先介绍了文章的背景,包括目的、预期读者、文档结构和相关术语。接…

2026最新草本防脱精华国货品牌top6推荐!国内优质防脱护理产品权威榜单发布,科学防脱方案助力健康秀发.

当代社会,生活压力增大、作息不规律以及产后身体变化等因素,使得女性脱发问题日益普遍,宝妈、油头人群、干枯受损发质人群以及女性脱发人群对安全有效的防脱产品需求迫切。据中国美发美容协会最新行业报告显示,国内…

vmvare虚拟机使用NAT模式上网

在 VMware 的 NAT 模式下,网关 IP 默认就是子网 IP 的 .2 后缀地址,不需要手动修改VMware 在创建 NAT 虚拟网络时,会自动为虚拟网段预留几个特殊 IP:.0 → 子网 IP(网络地址,不能用).1 → 分配给…

膝盖僵硬患者还能使用座椅电梯吗?

View Post膝盖僵硬患者还能使用座椅电梯吗?对于膝盖僵硬的患者而言,家中看似普通的楼梯,往往成为一道难以逾越的障碍。现代座椅电梯技术已经充分考虑到这一特殊群体的需求,全球座椅电梯进口品牌引领者瀚德凯尔(Ha…

信号有效性选择与故障处理模块

一个典型的 信号有效性选择与故障处理模块,常见于汽车电子或嵌入式系统中的 信号处理逻辑(如 AUTOSAR 或 Simulink 模型中)。我们来逐步分析:🔍 一、模块名称这个模块可以称为:valid_signal_selection&…

如果我要开发一个typescript、monorepo的 前端工具函数类库,为我设计一下技术选型和目录结构

开发一个 TypeScript + Monorepo 的前端工具函数类库,需要兼顾模块化、可维护性、类型安全、构建效率和开发者体验。以下是一个推荐的技术选型与目录结构设计方案:一、技术选型 1. Monorepo 管理工具推荐: pnpm + w…

从结对到自主:让AI交付可运行的工程成果

本文已收录在Github,关注我,紧跟本系列专栏文章,咱们下篇再续! 🚀 魔都架构师 | 全网30W技术追随者🔧 大厂分布式系统/数据中台实战专家🏆 主导交易系统百万级流量调优 & 车联网平台架构&a…

TQD与TQR浅析

在汽车电子(尤其是 VCU - Vehicle Control Unit,整车控制器)或动力总成控制系统中,TQR 通常是:Torque Request(扭矩请求)这是与 TQD(Torque Demand) 密切相关但略有区别的…

SQL Server Downloads Quick Links

前言 整合且最新的流行SQL Server产品列表,以便能够根据需要下载它们。你能提供可靠的资源吗? 解决方案 以下是SQL Server链接的综合列表,可在需要下载产品时为您节省时间。 SQL Server Evaluation Edition SQL Server 2025 SQL Server 2025 On-Premises Azure SQL SQL Se…

大模型提示词工程完全指南:16种核心技巧让你从“高级搜索“到“AI大师“

本文系统介绍了16种大模型提示词工程技巧,分为基础框架、逻辑增强、任务拆解、精准控制和进阶调教五大模块。从零样本提示、角色设定到思维链、自洽性过滤等高级方法,每种技巧均配有原理说明和实战样例。文章强调这些技巧可组合使用,核心在于…

大数据ETL流程:Power BI数据清洗全攻略

大数据ETL流程:Power BI数据清洗全攻略 一、引言:为什么数据清洗是ETL的“灵魂”? 在大数据时代,企业的决策越来越依赖数据,但**“垃圾进,垃圾出”(Garbage In, Garbage Out)的定律…

docker安装centos和jdk

1.docker拉取操作系统镜像 docker pull registry.cn-hangzhou.aliyuncs.com/acs/centos:7 2.下载jdk https://adoptium.net/zh-CN/temurin/releases?version17&osany&archany 或者 https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html 确…

LangChain记忆管理:构建智能体连续性的关键技术(值得收藏)

文章介绍了LangChain框架中的记忆治理机制,分为短期记忆和长期记忆两层。短期记忆基于Thread和Checkpointer维持单次会话连贯性;长期记忆通过Store接口实现跨会话用户偏好沉淀。文章通过代码示例展示两种记忆实现方式,强调记忆治理是智能体从…