文档章节

Ch01: Hello,SDL

Mousa
 Mousa
发布于 2017/04/04 11:24
字数 580
阅读 110
收藏 1
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》

© 著作权归作者所有

共有 人打赏支持
Mousa
粉丝 16
博文 7
码字总数 8690
作品 0
商丘
程序员
私信 提问
加载中

评论(2)

Mousa
Mousa
是的
B
BlitBu
这个是SDL2吗
SDL Simple DirectMedia Layer

一、简介 SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是相似的代码 就可以开...

理性编程
2016/06/17
5
0
Android原生(Native)C开发

转载: Android原生(Native)C开发之一 环境搭建篇 转载: Android原生(Native)C开发之二 framebuffer篇 转载: Android原生(Native)C开发之三 鼠标事件篇(捕鼠记) 转载: Android原生(Native)C开...

垂盆草
2012/11/13
0
0
Hi3519V101移植SDL+FreeType+SDL_ttf

目录 目录 前言 源码下载 SDLFreeTypeSDL_ttf库编译过程 测试 总结 番外 前言 刚开始接触海思的时候要实现的功能就是OSD显示,虽然功能简单,但是要花了很长的时间,主要是对海思平台不够了解...

simonforfuture
2017/11/25
0
0
Metal入门资料001-Metal framework介绍

写在前面: 对Metal技术感兴趣的同学,可以关注我的专题:Metal专辑 也可以关注我个人的简书账号:张芳涛 所有的代码存储的Github地址是:Metal Metal framework介绍 在WWDC 2014 iOS和上发布...

张芳涛
2018/06/05
0
0
在Linux上用FFmpeg得到视频的每一帧了,我想把每一帧在屏幕上显示出来

#include "libavutil/imgutils.h" #include "libavutil/opt.h" #include "libavcodec/avcodec.h" #include "libavutil/mathematics.h" #include "libavutil/samplefmt.h" #include "libswsca......

你是我的残梦
2014/05/22
3.6K
0

没有更多内容

加载失败,请刷新页面

加载更多

C++ vector和list的区别

1.vector数据结构 vector和数组类似,拥有一段连续的内存空间,并且起始地址不变。 因此能高效的进行随机存取,时间复杂度为o(1); 但因为内存空间是连续的,所以在进行插入和删除操作时,会造...

shzwork
今天
3
0
Spring之invokeBeanFactoryPostProcessors详解

Spring的refresh的invokeBeanFactoryPostProcessors,就是调用所有注册的、原始的BeanFactoryPostProcessor。 相关源码 public static void invokeBeanFactoryPostProcessors(Configu......

cregu
昨天
4
0
ibmcom/db2express-c_docker官方使用文档

(DEPRECIATED) Please check DB2 Developer-C Edition for the replacement. What is IBM DB2 Express-C ? ``IBM DB2 Express-C``` is the no-charge community edition of DB2 server, a si......

BG2KNT
昨天
3
0
Ubuntu 18.04.2 LTS nvidia-docker2 : 依赖: docker-ce (= 5:18.09.0~3-0~ubuntu-bionic)

平台:Ubuntu 18.04.2 LTS nvidia-docker2 版本:2.0.3 错误描述:在安装nvidia-docker2的时候报dpkg依赖错误 nvidia-docker2 : 依赖: docker-ce (= 5:18.09.0~3-0~ubuntu-bionic) 先看一下依......

Pulsar-V
昨天
4
0
学习笔记1-goland结构体(struct)

写在前面:若有侵权,请发邮件by.su@qq.com告知。 转载者告知:如果本文被转载,但凡涉及到侵权相关事宜,转载者需负责。请知悉! 本文永久更新地址:https://my.oschina.net/bysu/blog/3036...

不最醉不龟归
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部