SDL渲染器和纹理

文章目录

      • 渲染器 (SDL_Renderer)
      • 纹理 (SDL_Texture)
      • 代码

渲染器 (SDL_Renderer)

:它是渲染内容的接口,负责将内容绘制到窗口中。通过SDL_CreateRenderer创建,可以设置渲染器的背景颜色、绘图颜色、透明度等。所有绘图操作(如绘制线条、矩形、纹理等)都通过渲染器执行。

纹理 (SDL_Texture)

:纹理是一种优化后的图像资源,存储于GPU显存中,允许快速渲染。使用SDL_CreateTextureFromSurface加载图像文件生成纹理,或者通过SDL_CreateTexture创建空白纹理。纹理加载到渲染器后可直接绘制,提升渲染效率。

使用方式:

创建渲染器:SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
加载纹理:通过SDL_CreateTextureFromSurface(renderer, surface);
渲染纹理:使用SDL_RenderCopy(renderer, texture, NULL, &rect);
显示更新:调用SDL_RenderPresent(renderer);

代码

相关的pro文件

TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qtSOURCES += \main.cINCLUDEPATH += \$$PWD/../SDL2-2.0.10/include/LIBS += \$$PWD/../SDL2-2.0.10/lib/x86/SDL2.lib

main.c文件

#include <stdio.h>
#include <SDL.h>
#undef main/** 1:渲染器和纹理的关系 一个窗口可以有多个渲染器 然后一个渲染器可以渲染多个纹理*/
int main() {int run = 1;// 窗口SDL_Window *window = NULL;// 渲染器SDL_Renderer *renderer = NULL;// 纹理SDL_Texture *texture = NULL;// 矩形SDL_Rect rect; // 长方形,原点在左上角rect.w = 50; // 方块大小rect.h = 50;SDL_Init(SDL_INIT_VIDEO); // 初始化函数,可以确定希望激活的子系统window = SDL_CreateWindow("2 Window",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,640,480,SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_MOUSE_CAPTURE); // 创建窗口if (!window) {return -1;}renderer = SDL_CreateRenderer(window, -1, 0); // 基于窗口创建渲染器if (!renderer) {return -1;}texture = SDL_CreateTexture(renderer,SDL_PIXELFORMAT_RGBA8888,SDL_TEXTUREACCESS_TARGET,640,480); // 创建纹理if (!texture) {return -1;}int show_count = 0;while (run) {// 随机化矩形的位置rect.x = rand() % 600;rect.y = rand() % 400;/*,纹理(SDL_Texture)主要用于绘制内容的临时存储。代码中,渲染器先将内容绘制到纹理上,然后再将纹理整体拷贝到窗口。这种方式的好处包括:缓冲作用:将复杂的绘制操作先绘制在纹理上,减少直接操作窗口的次数,从而避免频繁刷新窗口带来的闪烁。灵活性:在不同渲染目标之间切换,便于处理半透明效果和动态效果,比如代码中的矩形随机位置刷新。*/SDL_SetRenderTarget(renderer, texture); // 设置渲染目标为纹理SDL_SetRenderDrawColor(renderer, 255, 0, 0, 127); // 绘制颜色设置为半透明红色,用于背景。SDL_RenderClear(renderer); // 用当前颜色清屏。SDL_RenderDrawRect(renderer, &rect); // 绘制矩形的边框。SDL_SetRenderDrawColor(renderer, 0, 255, 255, 255); // 将绘制颜色设置为白色(不透明)。/*在SDL中,调用SDL_RenderFillRect不仅会填充矩形,还会绘制其边框;* 因此,如果注释掉SDL_RenderFillRect,边框也不会显示。* SDL处理矩形时,如果仅调用SDL_RenderDrawRect绘制边框而不填充,边框可能不完整或不可见,尤其是在透明背景下。* 因此,如果需要边框效果,SDL_RenderFillRect或SDL_RenderDrawRect一起使用是常见的做法。*/SDL_RenderFillRect(renderer, &rect); // 填充矩形SDL_SetRenderTarget(renderer, NULL); // 恢复默认,渲染目标为窗口 没用设置渲染目标的时候 渲染目标默认为当前窗口SDL_RenderCopy(renderer, texture, NULL, NULL); // 将纹理内容拷贝到窗口上。SDL_RenderPresent(renderer); // 刷新窗口,显示绘制的内容。SDL_Delay(500);if (show_count++ > 30) {run = 0; // 不跑了}}SDL_DestroyTexture(texture);SDL_DestroyRenderer(renderer);SDL_DestroyWindow(window); // 销毁窗口SDL_Quit();return 0;
}

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

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

相关文章

基于STM32的智能充电桩:集成RTOS、MQTT与SQLite的先进管理系统设计思路

一、项目概述 随着电动车的普及&#xff0c;充电桩作为关键基础设施&#xff0c;其智能化、网络化管理显得尤为重要。本项目旨在基于STM32微控制器开发一款智能充电桩&#xff0c;能够实现高效的充电监控与管理。项目通过物联网技术&#xff0c;提供实时数据监测、远程管理、用…

.NET中通过C#实现Excel与DataTable的数据互转

在.NET框架中&#xff0c;使用C#进行Excel数据与DataTable之间的转换是数据分析、报表生成、数据迁移等操作中的常见需求。这一过程涉及到将Excel文件中的数据读取并加载至DataTable中&#xff0c;以便于利用.NET提供的丰富数据处理功能进行操作&#xff0c;同时也包括将DataTa…

域名服务系统DNS (Domain Name System)

域名的介绍 熟悉了域名之后&#xff0c;不仅仅是应对考试&#xff0c;生活中看到一个常规的网址&#xff0c;我们也能快速想到这个网址对应的含义是什么&#xff0c;并且在记忆网址的时候也更加得心应手&#xff0c;快速了解域名中各个层级的含义&#xff0c;这是 非常有趣呢…

Kettle——CSV文件转换成excel文件输出

1.点击—文件—新建—转换 拖入两个组件&#xff1a; 按shift&#xff0b;鼠标左击建立连接&#xff0c;并点击主输出步骤&#xff0c; 点击CSV文件输入&#xff0c;选择浏览的csv文件&#xff0c;然后点击确定 同样&#xff0c;Excel也同上&#xff0c;只是要删除这个xls 并…

Select,poll,epoll和IO多路复用和NIO

Select&#xff0c;poll&#xff0c;epoll和IO多路复用和NIO IO 多路复用&#xff1a;是一种 I/O 处理机制&#xff0c;它允许单个线程同时处理多个 I/O 流&#xff08;如多个文件描述符对应的网络连接、文件操作等&#xff09;的输入输出操作&#xff0c;通过一种机制来监听这…

希尔排序(C语言)

一、步骤&#xff1a; 希尔排序的基本思想&#xff1a;先选定一个整数&#xff0c;把待排序文件中所有记录分成个组&#xff0c;所有距离为gap的记录分在同一组内&#xff0c;并对每一组内的记录进行排序。然后取重复上述分组和排序的工作。当到gap 1时&#xff0c;所有记录在…

自动驾驶为什么需要时间同步?高精度时间同步如何实现?

自动驾驶作为汽车与物联网技术、人工智能等高新技术融合的产物&#xff0c;具有新颖性、复杂性和巨大的挑战性。自动驾驶需要实时传输、处理海量数据&#xff0c;并实时做出决策&#xff0c;这不仅要求有通畅网络通信环境、强大的数据算力&#xff0c;更要求时间同步的超低时延…

【信号处理】基于联合图像表示的深度学习卷积神经网络

Combined Signal Representations for Modulation Classification Using Deep Learning: Ambiguity Function, Constellation Diagram, and Eye Diagram 信号表示 Ambiguity Function(AF) 模糊函数描述了信号的两个维度(dimensions):延迟(delay)和多普勒(Doppler)。 …

C++20 概念与约束(1)—— SFINAE

●《C20 概念与约束&#xff08;1&#xff09;—— SFINAE》 《C20 概念与约束&#xff08;2&#xff09;—— 初识概念与约束》 《C20 概念与约束&#xff08;3&#xff09;—— 约束的进阶用法》 1、从模板说起 众所周知&#xff0c;C在使用模板时&#xff0c;如果有多…

[极客大挑战 2019]PHP 1

[极客大挑战 2019]PHP 1 审题 猜测备份在www.zip中&#xff0c;输入下载文件。 知识点 反序列化 解题 查看代码 看到index.php中包含了class.php,直接看class.php中的代码 查看条件 当usernameadmin&#xff0c;password100时输出flag 构造反序列化 输入select中&#…

Kubebot:一款Google云平台下的Slackbot安全测试工具

Kubebot 今天给大家介绍的是一款名叫Kubebot的安全测试Slackbot&#xff0c;该工具基于Google 云平台搭建&#xff0c;并且提供了Kubernetes后端。 项目架构 数据流 1.API请求由Slackbot发起&#xff0c;发送至API服务器&#xff0c;API服务器以Kubernetes(K8s)集群中的Docke…

Kubernetes的基本构建块和最小可调度单元pod-0

文章目录 一&#xff0c;什么是pod1.1pod在k8s中使用方法&#xff08;1&#xff09;使用方法一&#xff08;2&#xff09;使用方法二 1.2pod中容器的进程1.3pod的网络隔离管理&#xff08;1&#xff09;pause容器的作用 1.4 Pod分类&#xff1a;&#xff08;1&#xff09;自主式…

Redis安装(Windows环境)

目录 1.下载2.双击安装后配置环境变量3.启动服务4.设置Windows服务5.启动客户端6.常用的Redis服务命令7.使用图形化界面工具查看Redis内部数据情况类似Navicat 连接数据库 1.下载 1.点击github下载地址 2.上方资源链接下载安装 2.双击安装后配置环境变量 3.启动服务 上图虽然…

windows下qt5.12.11使用ODBC远程连接mysql数据库

1、下载并安装mysql驱动,下载地址:https://dev.mysql.com/downloads/ 2、配置ODBC数据源,打开64位的ODBC数据源配置工具:

【AI写作宝-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

GFPS技术原理(四)GATT特征值

Fast Pair服务 fast pair 服务的UUID 是0xFE2C&#xff0c;然后它又包含多个特征值&#xff0c;下面一一分析&#xff1a; Model ID UUID是0x1233&#xff0c;设备在谷歌云注册的时候会分配一个24 bit的ID。 Key-based Pairing UUID是0x1234&#xff0c;这个是用来做DH密钥…

3.2 软件需求:面对过程分析模型

面对过程分析模型 1. 需求分析的模型概述1.1 面对过程分析模型-结构化分析方法1.2 结构化分析的过程 2. 功能模型&#xff1a;数据流图初步2.1 加工2.2 外部实体&#xff08;数据源点/终点&#xff09;2.3 数据流2.4 数据存储2.5 注意事项 3. 功能模型&#xff1a;数据流图进阶…

ExecStart=/usr/bin/mongod --config /etc/mongod.conf (code=exited, status=2)

mongodb 开启验证后出现这个问题 邪门的问题 居然是格式问题 要用两个空格表示缩进 而不是tab

数据分析——学习框架

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

YOLOV8应用|排球垫球计数|附带全部数据集与源码(见文末百度云盘链接)

项目简介: 该项目旨在利用YOLOv8算法实现排球垫球动作的自动识别与计数。YOLOv8作为计算机视觉领域的先进目标检测算法,具备高精度和实时性的特点,非常适合用于体育训练和测试中的自动化计数。项目将排球垫球视频作为输入,通过YOLOv8算法检测视频中的排球及垫球动作,自动…