当前位置: 首页 > news >正文

SDL2库基础使用

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.jsqmd.com/news/280370/

相关文章:

  • android 系统中间件和 平台中间件 的区别,Framework等
  • 宝妈宝爸必看!儿童羽绒服十大名牌揭秘
  • 【Script】加载工程文件
  • 2026元宝优化服务商TOP6推荐——AI搜索时代精准破局指南
  • 详细解释 — Verilog中非阻塞赋值为什么能解决时序逻辑里的“寄存器之间竞争 / 读写不一致” - 详解
  • 2026/1/21
  • 奇迹漫步:促进团队协作的意外方式
  • 宝妈宝爸闭眼入!2026十大儿童鞋服品牌大揭秘
  • 2026最新草本防脱精华国货品牌top6推荐!国内优质防脱护理产品权威榜单发布,科学防脱方案助力健康秀发.
  • vmvare虚拟机使用NAT模式上网
  • 膝盖僵硬患者还能使用座椅电梯吗?
  • 信号有效性选择与故障处理模块
  • 如果我要开发一个typescript、monorepo的 前端工具函数类库,为我设计一下技术选型和目录结构
  • 从结对到自主:让AI交付可运行的工程成果
  • TQD与TQR浅析
  • 大模型提示词工程完全指南:16种核心技巧让你从“高级搜索“到“AI大师“
  • SQL Server Downloads Quick Links
  • 大数据ETL流程:Power BI数据清洗全攻略
  • docker安装centos和jdk
  • LangChain记忆管理:构建智能体连续性的关键技术(值得收藏)
  • Linux 之 Network
  • 破局Oracle迁移困局:破局Oracle迁移困局:直面兼容性与成本的隐性痛点
  • Java程序员转行大模型开发全攻略:附CSDN独家学习资料包_大模型应用开发学习路线
  • 从“会聊天“到“会办事“:AI Agent如何引领大模型新时代
  • Hadoop 之 行业生态
  • 2026必备!8个一键生成论文工具,MBA轻松搞定学术写作!
  • [mcp 工具传参]
  • 从小白到专家:大模型中的Token Embedding完全解析
  • 导师推荐9个AI论文平台,研究生高效写作必备!
  • 草莓成熟情况检测数据集1662张VOC+YOLO格式