示例代码
/**
* Title: 几何图形渲染
* 与新的纹理API一起,SDL将新的基本形状的渲染调用作为其渲染API的一部分
* 因此,如果您需要渲染一些基本形状, 并且不想为它们创建额外的图形,则SDL可以为您省去这方面的工作
*/
#include <SDL2/SDL.h>
#include <stdio.h>
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
#define sdlerror() { printf("error in line %d %s\n", __LINE__, SDL_GetError()); exit(-1); }
int main(int argc, char *argv[])
{
// 初始化
if(SDL_Init(SDL_INIT_VIDEO) < 0) sdlerror();
// 创建窗口和渲染器,总结:可以从图层中绘图,也可以通过渲染器绘图
SDL_Window *window = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
SDL_Renderer* render = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
//清屏
SDL_SetRenderDrawColor( render, 0xFF, 0xFF, 0xFF, 0xFF );
SDL_RenderClear( render );
// 定义矩形区域后,我们使用SDL_SetRenderDrawColor设置渲染颜色。
// 此函数接受我们正在使用的窗口的渲染器和我们想要渲染的颜色的RGBA值
// R是红色分量,G是绿色分量,B是蓝色分量,A是Alpha分量。
// Alpha控制物体的不透明程度,我们将在透明度教程中介绍这一点。这些值从0到255(或十六进制FF,如上所述)
SDL_Rect fillRect = { SCREEN_WIDTH / 4, SCREEN_HEIGHT / 4, SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2 };
SDL_SetRenderDrawColor( render, 0xFF, 0x00, 0x00, 0xFF );
SDL_RenderFillRect( render, &fillRect );
// 画绿色四边形
SDL_Rect outlineRect = { SCREEN_WIDTH / 6, SCREEN_HEIGHT / 6, SCREEN_WIDTH * 2 / 3, SCREEN_HEIGHT * 2 / 3 };
SDL_SetRenderDrawColor( render, 0x00, 0xFF, 0x00, 0xFF );
SDL_RenderDrawRect( render, &outlineRect );
// 画水平实线
SDL_SetRenderDrawColor( render, 0x00, 0x00, 0xFF, 0xFF );
SDL_RenderDrawLine( render, 0, SCREEN_HEIGHT / 2, SCREEN_WIDTH, SCREEN_HEIGHT / 2 );
// 画垂直点线
SDL_SetRenderDrawColor( render, 0xFF, 0xFF, 0x00, 0xFF );
for( int i = 0; i < SCREEN_HEIGHT; i += 4 )
{
SDL_RenderDrawPoint( render, SCREEN_WIDTH / 2, i );
}
// 更新屏幕
SDL_RenderPresent( render );
SDL_Event event;
while( SDL_PollEvent( &event ) != 0 || event.type != SDL_QUIT);
SDL_DestroyRenderer( render );
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
运行结果
运行结果.png
网友评论