您的位置:首页 > 汽车 > 新车 > 淮北专业网站建设_运维工程师_真正永久免费的建站系统有哪些_八八网

淮北专业网站建设_运维工程师_真正永久免费的建站系统有哪些_八八网

2024/11/17 9:53:32 来源:https://blog.csdn.net/weixin_52243202/article/details/143615022  浏览:    关键词:淮北专业网站建设_运维工程师_真正永久免费的建站系统有哪些_八八网
淮北专业网站建设_运维工程师_真正永久免费的建站系统有哪些_八八网

文章目录

      • 渲染器 (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;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com