SDL窗口创建以及简单显示(1)

news2024/12/22 20:46:08

 项目创建步骤

 1. 使用Qt Creator创建一个C项目

 2. 将SDL库文件放到源文件目录下

 在项目pro文件中添加库文件

win32{
	INCLUDEPATH += $$PWD/SDL2-2.0.10/include
	LIBS += $$PWD/SDL2-2.0.10/lib/x86/SDL2.lib
}

 使用SDL创建一个窗口

#include <stdio.h>

#include <SDL.h>

#undef main    // 先取消main函数(因为SDL内部使用了main函数)
int main()
{
    // 创建一个SDL_VIDEO窗口
    SDL_Window* window = NULL;
    SDL_Init(SDL_INIT_VIDEO);
    window = SDL_CreateWindow("Title",
                              SDL_WINDOWPOS_UNDEFINED,       // 默认x y 显示到窗口中间
                              SDL_WINDOWPOS_UNDEFINED,
                              640,
                              480,
                              SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);// 设置窗口属性
    if(!window)
    {
        printf("Can't create window, err:%s\n", SDL_GetError());
        return 666;
    }

    SDL_Delay(5000);                // 延迟5000ms
    SDL_DestroyWindow(window);      // 销毁窗口
    SDL_Quit();                     // 释放资源

    return 0;
}

运行效果

 

SDL简单显示案例

#include <stdio.h>
#include <SDL.h>

#undef main
int main()
{
    SDL_Window* window = NULL;          // 窗口
    SDL_Renderer* renderer = NULL;      // 渲染器
    SDL_Texture* texture = NULL;        // 纹理

    SDL_Init(SDL_INIT_VIDEO);

    // 创建窗口
    window = SDL_CreateWindow("Window Title",
                              SDL_WINDOWPOS_UNDEFINED,
                              SDL_WINDOWPOS_UNDEFINED,
                              640,
                              480,
                              SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);
    if(NULL == window)
    {
        printf("Create Window error: %s\n", SDL_GetError());
        return -1;
    }

    // 创建渲染器(一个窗口可有多个渲染器)
    renderer = SDL_CreateRenderer(window, -1, 0);
    if(NULL == renderer)
    {
        printf("Create Renderer error: %s\n", SDL_GetError());
        // 销毁窗口,释放资源
        SDL_DestroyWindow(window);
        SDL_Quit();
        return -1;
    }

    // 基于渲染器创建纹理
    texture = SDL_CreateTexture(renderer,
                                SDL_PIXELFORMAT_RGBA8888,
                                SDL_TEXTUREACCESS_TARGET,
                                640,
                                480);
    if(NULL == texture)
    {
        printf("Create Texture error: %s\n", SDL_GetError());
        // 销毁渲染器 窗口 释放资源
        SDL_DestroyRenderer(renderer);
        SDL_DestroyWindow(window);
        SDL_Quit();
        return -1;
    }

    int showCnt = 0;    // 显示次数
    int run = 1;        // 循环退出条件
    SDL_Rect rect;      // 定义一个SDL矩形
    rect.w = 50;
    rect.h = 50;

    while(run)
    {
        // 随机rect的位置
        rect.x = rand() % 600;
        rect.y = rand() % 400;

        // 设置渲染目标为纹理
        SDL_SetRenderTarget(renderer, texture);
        // 设置渲染绘制颜色
        SDL_SetRenderDrawColor(renderer, 255, 0, 255, 255);
        // 刷新渲染
        SDL_RenderClear(renderer);

        // 设置渲染绘制颜色
        SDL_SetRenderDrawColor(renderer, 0, 255, 0, 255);
        // 绘制矩形
        SDL_RenderDrawRect(renderer, &rect);
        // 绘制填充矩形
        SDL_RenderFillRect(renderer, &rect);

        // 恢复渲染目标为窗口
        SDL_SetRenderTarget(renderer, NULL);
        SDL_RenderCopy(renderer, texture, NULL, NULL);

        // 显示纹理
        SDL_RenderPresent(renderer);
        SDL_Delay(300);

        if(showCnt++ >= 30)
            run = 0;
    }

    // 销毁 纹理 渲染器 窗口,释放资源
    SDL_DestroyTexture(texture);
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    SDL_Quit();

    return 0;
}

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

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

相关文章

HarmonyOS开发:探索组件化模式开发

前言 组件化一直是移动端比较流行的开发方式&#xff0c;有着编译运行快&#xff0c;业务逻辑分明&#xff0c;任务划分清晰等优点&#xff0c;针对Android端的组件化&#xff0c;之前有比较系统的总结过相关文章&#xff0c;感兴趣的朋友&#xff0c;可以查看&#xff0c;点击…

java后端返回给前端不为空的属性

问题背景&#xff1a; 目前遇到的一个问题。一个对象里面定义了数组、集合、和字符串属性等&#xff0c;但是返回给前端的时候数组和集合都是空的&#xff0c;前端接收到的是“” 一个空字符。然后保存的时候又把空字符传给后端&#xff0c;出现了数据结构不匹配导致报错。 解…

二、【常用的几种抠图方式一】

文章目录 选框抠图快速选择工具抠图魔棒工具抠图对象选择工具抠图套索工具抠图多边形套索工具抠图磁性套索工具抠图 选框抠图 选框工具抠图适合规则的图形&#xff0c;如下图先使用选框工具框出对象的图轮廓&#xff0c;然后再选择并遮住在里边擦出图形的边缘&#xff0c;根据…

Hi3516DV500部署paddle版型分析模型记录

原版模型测试并导出onnx paddle 版面分析-> https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/ppstructure/layout/README_ch.md 测试 python3 deploy/python/infer.py \ --model_dirmodel/picodet_lcnet_x1_0_fgd_layout_cdla_infer/ \ --image_fil…

Openssl数据安全传输平台011:base64的使用

文章目录 1 base641.1 概念1.2 应用场景 2 base64 算法 &#xff08;重要&#xff09;3 openssl 中base64的使用3.1 BIO 操作3.2 base64 编码 -> bio链的写操作3.3 base64 解码 -> bio链的读操作 1 base64 1.1 概念 Base64是一种基于64个可打印字符来表示二进制数据的表…

CTF-Web(3)文件上传漏洞

笔记目录 CTF-Web(2)SQL注入CTF-Web(3)文件上传漏洞 1.WebShell介绍 (1)一句话木马定义 一种网页后门&#xff0c;以asp、php、jsp等网页文件形式存在的一种命令执行环境&#xff0c;而 一句话木马往往只有一行WebShell代码。 作用&#xff1a; 攻击获得网站控制权限 查看、修改…

p5.js 状态管理

本文简介 带尬猴&#xff0c;我是德育处主任 原生 canvas 提供了 save() 和 restore() 两个方法去管理画布状态。p5.js 作为一个 canvas 库&#xff0c;也理所当然的提供了状态管理的方法。在 p5.js 里这两个方法叫 push() 和 pop()。 本文主要讲解 p5.js 的 push() 和 pop()…

Q41F-25C软密封球阀型号解析

Q41F-25C型号字母含义解析 Q41F-25C是德特森阀门常用的软密封球阀型号字母分别代表的意思是: Q——代表阀门类型《球阀》 4——代表连接方式《法兰》 1——代表结构形式《浮动式》 F——代表阀座材料《聚四氟乙烯PTFE》 -《分隔键》 25——代表公称压力《2.5MPA》 C——…

Ubuntu编译 PCL 1.13.1 详细流程

Ubuntu编译 PCL 1.13. 详细流程 一、编译环境二、虚拟机准备1. 虚拟机扩容2. 配置交换分区 三、Cmake - gui 生成 MakeFile1. 解决 flann 依赖问题2. 配置 Cmake 四、编译安装1.编译&#xff1a;2. 安装 一、编译环境 Ubuntu&#xff1a;Ubuntu 20.04 VMware&#xff1a;VMwar…

护眼灯亮度多少合适?2023最专业的护眼灯品牌推荐

护眼灯是现在广大台灯消费者使用最多的一个灯具种类&#xff0c;它主要带来了更加柔和的用光环境与护眼效果。而其中&#xff0c;护眼灯的国家级照度又是其挑选的重点&#xff0c;那A级跟AA级具体有啥区别呢&#xff1f;首先&#xff0c;护眼台灯的国家A级或者AA级标准&#xf…

R与Python结合,在安装tensorflow时遇到了报错--尚未解决

在服务器上安装tensorflow时&#xff0c;遇到了一个报错信息&#xff1a; 在网上找到一个类似的错误&#xff08;TensorFlow_error&#xff09;,见下图&#xff0c;但是博主没有给出解决办法。

使用Hystrix实现请求合并,降低服务器并发压力

1.引入Hystrix <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency> 2.在启动类上开启Hystrix功能 EnableHystrix 3.请求合并实现代码 import com…

走进国产机器人领军品牌华数机器人,共探数字化变革魔力

近日&#xff0c;纷享销客举办的“一院两司服务对接会暨走进纷享销客【数字化标杆】游学示范基地活动”在佛山顺利举行&#xff0c;本期活动走进华中数控旗下品牌、国家级专精特新“小巨人”企业华数机器人&#xff0c;特邀佛山华数机器人有限公司常务副总经理杨林、纷享销客广…

Ubuntu 内核降级到指定版本

reference https://www.cnblogs.com/leebri/p/16786685.html 前往此网站&#xff0c;找到所需的内核 https://kernel.ubuntu.com/~kernel-ppa/mainline/ 查看系统架构 dpkg --print-architecture 二、下载安装包 注意&#xff1a;下载除lowlatency以外的deb包 三、安装内核 3…

C++前缀和算法的应用:从栈中取出 K 个硬币的最大面值和 原理源码测试用例

本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 题目 一张桌子上总共有 n 个硬币 栈 。每个栈有 正整数 个带面值的硬币。 每一次操作中&#xff0c;你可以从任意一个栈的 顶部 取出 1 个硬币&#xff0c;从栈中移除…

【智能座舱】- 汽车产业的变革,电动化是上半场,而智能化则是下半场

“汽车产业的变革,电动化是上半场,而智能化则是下半场”,已成为汽车行业的普遍共识。对于制造业企业,伴随业务发展、长时间的生产经营,往往积淀着海量专业性知识,同时存在知识管理集中化与结构化困难、缺乏系统化知识体系、关键业务知识依靠传授、检索效率低下、精准度不…

STM32的BOOT1和BOOT0查找及配置-都有BOOT1引脚的

STM32 BOOT0和BOOT1引脚查找 STM32是有BOO0和BOOT1的&#xff0c;有的芯片原理图没有标注BOOT1&#xff0c;但是可以正在手册查到BOOT0和BOOT1引脚的。 STM32 BOOT配置方式 1&#xff09;主Flash 主Flash起始地址为0x08000000&#xff0c;它指的是STM32内置Flash&#xff0c;通…

共享办公:一种新型的工作方式

随着互联网技术的发展和创业文化的兴起&#xff0c;越来越多的人选择了在共享办公室工作。共享办公室是一种提供灵活、便捷和经济的工作空间的服务模式&#xff0c;它可以让不同的个人或团队在同一地点共享办公设施和资源。那么&#xff0c;共享办公室是什么&#xff1f;它有什…

TSINGSEE青犀省级高速公路视频上云联网方案:全面实现联网化、共享化、智能化

一、需求背景 随着高速铁路的建设及铁路管理的精细化&#xff0c;原有的模拟安防视频监控系统已经不能满足视频监控需求&#xff0c;越来越多站点在建设时已开始规划高清安防视频监控系统。高速公路视频监控资源非常丰富&#xff0c;需要对其进行综合管理与利用。通过构建监控…

国际腾讯云直播推流配置教程!

云直播的服务本质是一个广播的过程&#xff0c;类似于电视台的直播节目通过有线电视网发送给千家万户。为了完成这个过程&#xff0c;云直播需要有采集和推流设备&#xff08;类似摄像头&#xff09;、云直播服务&#xff08;类似电视台的有线电视网&#xff09;和播放设备&…