SDL介绍
- SDL(Simple DirectMedia Layer)
- 由C语言实现的跨平台的媒体开源库
- 多用于游戏、模拟器、媒体播放器等多媒体应用领域
SDL编译与安装
- 拉取源码
- 先切换分支为
SDL2 - 执行autogen.sh生成configure (可不执行)
- 生成Makefile:
configure --prefix=/usr/local - 安装
sudo make -j 8 && sudo make install
SDL使用
- 头文件
#include<SDL.h> - 初始化SDL
- 退出SDL
渲染窗口
- SDL_Init/SDL_Quit()
- SDL_CreateWindow()/ SDL_DestoryWindow()
- SDL_CreateRender()/SDL_DestoryRender()
- SDL_RenderClear
- SDL_RenderPresent
#include <SDL.h>
int main(int argc, char* argv[]) {
SDL_Init(SDL_INIT_VIDEO);
SDL_Window* window = SDL_CreateWindow("hello sdl", 200, 200, 640, 470, SDL_WINDOW_SHOWN);
SDL_Renderer* render;
SDL_Event event;
if (!window) {
printf("Failed to create window: %s\n", SDL_GetError());
goto __EXIT;
}
render = SDL_CreateRenderer(window, -1, 0);
if (!render) {
printf("Failed to create renderer: %s\n", SDL_GetError());
goto __EXIT;
}
SDL_PollEvent(&event); // 没有事件处理就不会显示窗口
SDL_SetRenderDrawColor(render, 255, 10, 0, 255); // 必须在RenderClear之前设置颜色
SDL_RenderClear(render);
SDL_RenderPresent(render); // 显示
SDL_Delay(300000);
__EXIT:
SDL_DestroyRenderer(render);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
事件基本原理
- SDL将所有事件都存放在一个队列中
- 所有对事件的操作,其实就是对队列的操作
事件种类
- SDL_WindowEvent:窗口事件
- SDL_KeyboardEvent:键盘事件
- SDL_MouseMotionEvent:鼠标事件
事件处理
- SDL_PollEvent:轮询检测队列
- SDL_WaitEvent:事件触发机制
#include <SDL.h>
int main(int argc, char* argv[]) {
SDL_Init(SDL_INIT_VIDEO);
SDL_Window* window = SDL_CreateWindow("hello sdl", 200, 200, 640, 470, SDL_WINDOW_SHOWN);
SDL_Renderer* render;
SDL_Event event;
int quit = 1;
if (!window) {
printf("Failed to create window: %s\n", SDL_GetError());
goto __EXIT;
}
render = SDL_CreateRenderer(window, -1, 0);
if (!render) {
printf("Failed to create renderer: %s\n", SDL_GetError());
goto __EXIT;
}
// SDL_PollEvent(&event); // 没有事件处理就不会显示窗口
SDL_SetRenderDrawColor(render, 255, 10, 0, 255); // 必须在RenderClear之前设置颜色
SDL_RenderClear(render);
SDL_RenderPresent(render); // 显示
do {
SDL_WaitEvent(&event);
switch (event.type)
{
case SDL_QUIT:
quit = 0;
break;
default:
SDL_Log("event type: %d", event.type);
break;
}
} while(quit);
// SDL_Delay(300000);
__EXIT:
SDL_DestroyRenderer(render);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
纹理渲染
为什么要使用纹理:假设不使用纹理显示内容,则需要将整个YUV或者RGB数据在CPU计算好,然后传给GPU显示;
而使用纹理则只需要将从哪到哪怎么显示这些信息在CPU准备好,传给GPU进行实际的计算和显示

最低0.47元/天 解锁文章
782

被折叠的 条评论
为什么被折叠?



