这里用 SDL 渲染一个矩形。
#include <stdio.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_rect.h>
#undef main
int main(int argc, char* argv[]) {
SDL_Window* window = NULL; // 窗口
SDL_Renderer* render = NULL; // 渲染器
SDL_Texture* texture = NULL; // 纹理
SDL_Rect rect; // default pos (x, y) is (0, 0)
rect.w = 50;
rect.h = 50;
SDL_Init(SDL_INIT_VIDEO);
window = SDL_CreateWindow("SDL Rectangle",
SDL_WINDOWPOS_UNDEFINED, // 默认屏幕中心
SDL_WINDOWPOS_UNDEFINED,
600,
400,
SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);
if (!window) {
printf("create window failed\n");
return -1;
}
render = SDL_CreateRenderer(window, -1 , SDL_RENDERER_ACCELERATED); // 创建渲染器
if (!render) {
printf("create renderer failed\n");
return -1;
}
// 创建纹理 8通道ARGB 可以被作为渲染目标
texture = SDL_CreateTexture(render, SDL_PIXELFORMAT_ABGR8888, SDL_TEXTUREACCESS_TARGET, 600, 400);
if (!texture) {
printf("create texture failed\n");
return -1;
}
int run = 1;
int run_count = 0;
while(run) {
rect.x = rand() % 550;
rect.y = rand() % 350;
SDL_SetRenderTarget(render, texture); // 设置渲染器目标为纹理
SDL_SetRenderDrawColor(render, 0, 0, 0, 0); // 设置渲染器颜色
SDL_RenderClear(render); // 清屏 清除上一次的rect
SDL_RenderDrawRect(render, &rect); // 渲染矩形
SDL_SetRenderDrawColor(render, 255, 0, 0, 0); // 设置颜色
SDL_RenderFillRect(render, &rect); // 渲染(填充)矩形
SDL_SetRenderTarget(render, NULL); // 将渲染器目标设置为默认:窗口
SDL_RenderCopy(render, texture, NULL, NULL); // 将纹理拷贝到CPU
SDL_RenderPresent(render); // 执行渲染
SDL_Delay(2000);
run_count++;
if (run_count == 5) {
run = 0;
}
}
SDL_DestroyWindow(window);
SDL_DestroyRenderer(render);
SDL_DestroyTexture(texture);
SDL_Quit();
return 0;
}
注释已经写在代码里了。
评论