Ch01: Hello,SDL

我认为使用SDL的优势在于:

  • 鼻祖级的跨平台开源框架
  • 始终如一的代码,API几乎很少变动
  • sf/Git-hub数以万计的开源project,其中不乏商业案例可以借签学习
  • SDL 2.x版本加入了对Android的支持,使用NDK即可编译
  • 同样有其他语言的binding,如Pascal, Objective-C, Python, Ruby,and Java ...
  • Game,模拟器,播放器,图形库等领域都能看到它的身影

**废话不说了,let's go ** 示例代码创建一个最基本的SDL窗体。

输入图片说明

#include <SDL.h>
#include <iostream>
using namespace std;

int main(int argc, char** argv)
{
	SDL_Window* pWindow = 0;
	SDL_Renderer *pRenderer = 0;
	bool bRunning = true;
	if (SDL_Init(SDL_INIT_EVERYTHING) < 0)
	{
		cerr << "SDL_Init fail" << endl;
		return EXIT_FAILURE;
	}
	pWindow = SDL_CreateWindow("Hello,SDL",
		SDL_WINDOWPOS_CENTERED,
		SDL_WINDOWPOS_CENTERED,
		640, 480, SDL_WINDOW_SHOWN);
	if (pWindow != nullptr)
	{
		pRenderer = SDL_CreateRenderer(pWindow,
			-1, 0);
	}
	else
		return EXIT_FAILURE;
	SDL_SetRenderDrawColor(pRenderer, 0, 0, 0, 255);
	SDL_Event event;
	while (bRunning)
	{
		if (SDL_PollEvent(&event))
		{
			switch (event.type)
			{
			case SDL_QUIT:
				bRunning = false;
				break;
			default:
				break;
			}
		}
		SDL_RenderClear(pRenderer);
		SDL_RenderPresent(pRenderer);
	}
	SDL_DestroyWindow(pWindow);
	SDL_DestroyRenderer(pRenderer);
	SDL_Quit();

	return 0;
}

SDL_Init

int SDL_Init(Uint32 flags)
  • SDL_Init 其实是调用SDL_InitSubSystem() 初始化子系统,包含以下flags,
  • SDL_INIT_TIMER
  • SDL_INIT_AUDIO
  • SDL_INIT_VIDEO
  • SDL_INIT_JOYSTICK
  • SDL_INIT_HAPTIC
  • SDL_INIT_GAMECONTROLLER
  • SDL_INIT_EVENTS
  • SDL_INIT_EVERYTHING
  • SDL_INIT_NOPARACHUTE 可以使用或运算符| 同时初始化若干子系统,如
SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO);

另外也可以使用SDL_WasInit 来检查子系统是否初始化成功。

SDL_Renderer* SDL_CreateRenderer(SDL_Window* window,
                                 int         index,
                                 Uint32      flags)

index 可以理解为当前的支援渲染的显卡索引, 赋值为-1 使用第一个显卡

flags 有以下3个可供选择

  • SDL_RENDERER_SOFTWARE

  • SDL_RENDERER_ACCELERATED

  • SDL_RENDERER_PRESENTVSYNC

  • SDL_RENDERER_TARGETTEXTURE

  • SDL_Window ,SDL_Renderer 可以使用SDL_DestroyWindow(),SDL_DestroyRenderer()销毁

  • SDL_Event 循环

  • 渲染和绘制操作通常独立到单独的函数中,如

void draw (SDL_Renderder*)
{
    //draw something...
}
void render( )
{
     SDL_RenderClear(pRenderer);
     draw(pRenderer);
     SDL_RenderPresent(pRenderer);
}

本文参考Shaun Mitchell 《SDL Game Development》

转载于:https://my.oschina.net/u/3322000/blog/872939

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值