SDL环境搭建(Windows)

243 阅读1分钟

SDL介绍

SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。目前SDL多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。

下载SDL

下载地址github.com/libsdl-org/…

image.png

使用SDL

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

#undef main
int main()
{
    int run = 1;

    SDL_Window *window = NULL;
    SDL_Renderer *renderer = NULL;   // SDL_Renderer代表了一个渲染器
    SDL_Texture *texture = NULL;     // SDL_Texture代表了一个纹理
    SDL_Rect rect;                   // 一个简单的矩形结构
    rect.w = 50;
    rect.h = 50;


    SDL_Init(SDL_INIT_VIDEO);  // 初始化SDL系统

    window = SDL_CreateWindow("Basic Window", 0, 0, 640, 480, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE); // 创建窗口SDL_Window

    if (!window) {
        printf("Can not print window: %s", SDL_GetError());
        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_SetRenderTarget(renderer, texture);  // 设置渲染目标为纹理
        SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); // 纹理背景为黑色
        SDL_RenderClear(renderer);  // 清屏


        SDL_RenderDrawRect(renderer, &rect);  // 绘制一个长方形
        SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255); // 长方形为白色
        SDL_RenderFillRect(renderer, &rect);

        SDL_SetRenderTarget(renderer, NULL);  // 恢复默认, 渲染目标为窗口
        SDL_RenderCopy(renderer, texture, NULL, NULL);  // 拷贝纹理到CPU

        SDL_RenderPresent(renderer); // 输出到目标窗口上

        SDL_Delay(300);

        if (show_count > 30) {
            run = 0;  // 不跑了
        }
    }

    //SDL_Delay(5000);   // 工具函数,用于延时

    SDL_DestroyTexture(texture);
    SDL_DestroyRenderer(renderer);

    SDL_DestroyWindow(window);  // 销毁窗口

    SDL_Quit();  // 退出SDL系统

    return 0;
}