Você está na página 1de 48

SDL Passo-a-Passo

Guedes, Maurilio - Comunidade PDJ billguedes@terra.com.br Criado em 14 de julho de 2007 Atualizado em 1 de dezembro de 2007

SDL Passo-a-Passo
Guedes, Maurilio 1 de dezembro de 2007

1 SDL Passo-a-Passo Distribuda na forma de GFDL (http://www.gnu.org/copyleft/fdl.html). Copyright c 2007 - Guedes, Maurilio. Este livro um livro texto (TextBook), voc pode distribu-lo e/ou modic-lo sob os termos da LICENA PBLICA DE DOCUMENTOS DA GNU (GFDL), conforme publicada pela FREE SOFTWARE FOUNDATION verso 1.2 da licena como qualquer outra verso mais nova. Preservando as sees "no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts". Uma cpia da licena est localizada no captulo LICENA PBLICA DE DOCUMENTOS. Este livro foi desenvolvido para auxiliar no aprendizado da biblioteca grca SDL para o grupo de estudo da comunidade PDJ (www.pdj.com.br).

Guedes, Maurilio

SDL Passo-a-Passo

Dedicatria
Dedico esse livro a minha querida e amada esposa e minhas duas lhas, minha lua e minhas estrelas que iluminam todos os dias minha escurido interna. Aos meus pais que me apoiaram e nanciaram meus estudos. Aos colegas de comunidades que me ajudarm durantes esses longos anos. Aos adeptos da losoa livre.

Agradecimentos
A todos os desenvolvedores que trabalham com fontes abertas, programadores de comportamento tico e defensores da total divulgao, sem os quais a evoluo do conhecimento nunca poderia ser realmente alcanada. A comunidade PDJ pelo grande contedo de informaes totalmente livre, onde adquiri muitos conhecimentos. Ao google por ser uma tima ferramente de procura, sem o qual esse livro seria muito mais difcil de ser feito.

Sobre o autor
Guedes, Maurilio formado em processamento de dados, atualmente desenvolve aplicativos comerciais e industriais multi-plataforma. Ele tem 14 (Quatorze) anos de experincia em desenvolvimento de aplicativos. Um defensor do cdigo fonte aberto, ele acredita que o Gnu/Linux estvel, seguro e bonito porque aberto e grtis.

Guedes, Maurilio

SDL Passo-a-Passo

SUMRIO

Sumrio
1 Introduo 1.1 Ao leitor . . . . . . . . . . . . . . . . . . 1.2 Sobre o livro . . . . . . . . . . . . . . . . 1.3 Como ler o livro . . . . . . . . . . . . . . 1.4 Pr Requesito . . . . . . . . . . . . . . . 1.5 O que no ser ensinado . . . . . . . . . 1.6 Perguntas Frequentes . . . . . . . . . . . 1.6.1 O que SDL? . . . . . . . . . . . 1.6.2 Para que ela utilizada? . . . . . 1.6.3 Em qual plataforma ela funciona? 1.6.4 Em qual linguagem ela trabalha? . 1.6.5 Qual a licena? . . . . . . . . . 7 7 7 7 8 8 8 8 9 9 9 9 10 10 14 20 23 29 32 34 35 35 41

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

Vdeo Bsico 2.1 Inicializando o vdeo do sdl . . . . . . . . . . . . 2.2 Entendendo a inicializao do vdeo . . . . . . . 2.3 Inicializando a tela de vdeo . . . . . . . . . . . 2.4 Entendendo a inicializao da tela de vdeo . . . 2.5 Vericando se um modo de resoluo suportado 2.6 Exerccio . . . . . . . . . . . . . . . . . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

. . . . . .

A Aplicativos Utilizados para Fazer o Livro B Licena Pblica de Documentos B.1 Licena de Documento Livre GNU . . . . . . . . . . . . . . . . . . . . . . . . B.2 GNU Free Documentation License . . . . . . . . . . . . . . . . . . . . . . . .

Guedes, Maurilio

SDL Passo-a-Passo

LISTA DE FIGURAS

Lista de Figuras
2.1 2.2 2.3 2.4 2.5 Inicializando o vdeo do sdl . . . . . . . . . . . . Entendendo a inicializao do vdeo . . . . . . . Inicializando a tela de vdeo . . . . . . . . . . . Entendendo a inicializao da tela de vdeo . . . Vericando se um modo de resoluo suportado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 19 23 28 32

Guedes, Maurilio

SDL Passo-a-Passo

LISTA DE TABELAS

Lista de Tabelas
2.1 2.2 Parmetros das funes SDL_Init() e/ou SDL_InitSubSystem() . . . . . . . . . Parmetro da funo SDL_SetVideoMode() . . . . . . . . . . . . . . . . . . . 14 24 34

A.1 Aplicativos utilizados para fazer o livro . . . . . . . . . . . . . . . . . . . . .

Guedes, Maurilio

SDL Passo-a-Passo

LISTINGS

Listings
2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 Dica - Funo SDL_WasInit() . . . . . . . . . . Inicializando o vdeo do sdl . . . . . . . . . . . . Dica - Inicializando vrios sub-sistemas . . . . . Entendendo a inicializao do vdeo . . . . . . . Inicializando a tela de vdeo . . . . . . . . . . . Falha - Tipo de Varivel SDL_Surface . . . . . . Entendendo a inicializao da tela de vdeo . . . Vericando se um modo de resoluo suportado . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 11 14 15 20 24 25 29

Guedes, Maurilio

SDL Passo-a-Passo

CAPTULO 1. INTRODUO

Captulo 1 Introduo
Antes de demonstrar a biblioteca multimdia SDL precisamos saber algumas coisas antes, esse captulo fundamental para o aproveitamento deste livro.

1.1

Ao leitor

Depois de muitos anos jogando jogos eletrnicos, voc sentiu desejo em aprender como desenvolver um jogo eletrnico. Como faz-lo? Qual linguagem usar? Qual biblioteca multimdia usar? Foram suas perguntas iniciais, depois de muito pesquisa e estudo, voc j conhece as respostas para essas perguntas, e agora, voc precisa aprender como utilizar a biblioteca multimdia SDL com C/C++. Voc ir aprender as principais funes da biblioteca multimdia SDL de uma maneira fcil e eciente, com exemplos teis, dicas de cdigo, cuidados no cdigo para evitar possveis falhas, informaes para melhorar seu cdigo para ter uma melhor performace e entre outras coisas mais.

1.2

Sobre o livro

Este livro foi desenvolvido com o objetivo de reunir os vrios conhecimentos de programao utilizando a biblioteca multimdia SDL, e servir de base para um curso autodidata para a comunidade PDJ. O objetivo passar ao estudante, as noes de programao eciente da biblioteca multimdia SDL de uma forma rpida e direta, sendo desejvel o acompanhamento dos estudos por programador com experincia atravs do FORUM (http://www.pdj.com.br/forum/viewforum.php?f=19). Ao longo da apresentao dos temas, so includos exemplos e exerccios. O aluno deve ler todos os tpicos e vericar o funcionamento com os exemplos. muito importante compilar os exemplos e vericar o seu funcionamento.

1.3

Como ler o livro

Para facilitar a leitura do livro, foram criadas algumas indicaes: Dica: Ao longo dos captulos so apresentadas algumas dicas. Guedes, Maurilio SDL Passo-a-Passo

CAPTULO 1. INTRODUO Performance: So dicas de como aumentar o desempenho de seus jogos. Falha: Cuidados para evitar a presena de falhas em seus cdigos. Prottipo: Dene a sintaxe de determinado comando, aparece em MonoEspaado.

Exemplo informativo: No so cdigos completos, so apenas pedaos de cdigo, para ilustrar e determinar a caracterstica. Exemplo: So cdigos completos, que ilustram vrios comandos para realizar um determinado objetivo. Compilao: So linhas de comando para compilar o cdigo completo no compilador GCC. Figura: Imagem da tela de como ser o resultado nal. Termo em ingls: Ser feito uma verso em portugus, com o termo original em itlico e entre "()"(Parnteses).

1.4

Pr Requesito

O pr requesito para aproveitar todo o potencial do livro : Conhecimento de lgica de programao; Conhecimento da losoa orientado a objeto; Conhecimento da linguagem de programao C++; Conhecimento de programao multi-plataforma; Ser autodidata.

1.5

O que no ser ensinado

No ser ensinado lgica de programao, conceito orientado a objeto, programao multiplataforma, a linguagem de programao C++ e a biblioteca tridimensional (3D) OpenGL.

1.6

Perguntas Frequentes

Nessa seo respondido as peguntas mais frequentes.

1.6.1

O que SDL?

uma biblioteca multimdia e multi-plataforma, designada em acessar em nvel baixo o udio, teclado, rato (mouse), manete (joystick), acelerao 3D via mquina (3D Hardware) atravs do OpenGL, e quadro de memria 2D (2D Video FrameBuffer). Guedes, Maurilio SDL Passo-a-Passo

CAPTULO 1. INTRODUO

1.6.2

Para que ela utilizada?

utilizada em vrios programas de tocadores de MPEG (vdeo e udio), emuladores e em vrios jogos populares, incluindo o vencedor do prmio portabilidade para Linux (Linux port) o "Civilization: Call To Power".

1.6.3

Em qual plataforma ela funciona?

Ela funciona em Gnu/Linux, Windowsm Windows CE, BeOS, MacOS, Mac OS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX e QNX.

1.6.4

Em qual linguagem ela trabalha?

Ela escrita em C, mas trabalha nativamente em C++, e tem amarrao com vrias outras linguagens, incluindo Ada, C#, Eiffel, Erlang, Euphoria, Guile, Haskell, Java, Lisp, Lua, ML, Objective C, Pascal, Perl, PHP, Pike, Pliant, Python, Ruby e Smalltalk.

1.6.5

Qual a licena?

Ela distribuda sob a Licena Pblica Geral Menor GNU verso 2 (GNU LGPL version 2). Essa licena permite que voc use a SDL livremente em programas comerciais contanto que voc aponte (link) para a biblioteca dinmica (dynamic library). Para mais informaes acesse http://www.gnu.org/copyleft/lesser.html

Guedes, Maurilio

SDL Passo-a-Passo

CAPTULO 2. VDEO BSICO

10

Captulo 2 Vdeo Bsico


Esse captulo tem o objetivo de ensinar as manipulaes bsicas do vdeo.

2.1

Inicializando o vdeo do sdl

A biblioteca SDL composta por oito sub-sistemas, tais como, udio, unidade de CD (cdrom), manipulao de evento (event handling), entrada e sada de arquivo (le I/O), manipulao de manete (joystick handling), encadeamento (threading), cronmetro (timers) e vdeo. Antes de voc poder usar alguns desses sub-sistemas necessrio inicializ-los chamando a funo SDL_Init() ou SDL_InitSubSystem(). A SDL_Init() deve ser chamado antes de qualquer outra funo SDL. Ela inicializa automaticamente a manipulao de evento (event handling), entrada e sada de arquivo (le I/O) e o sub-sistema encadeamento (threading). Para inicializar o sub-sistema padro e o sub-sistema vdeo voc deve chamar: SDL_Init(SDL_INIT_VIDEO) Para inicializar o sub-sistema padro, o vdeo e o cronmetro (timers) voc deve chamar: SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) A SDL_Init() complementada pela SDL_Quit() ou SDL_QuitSubSystem(). A SDL_Quit() desliga todos os sub-sistemas, incluindo o padro. Voc sempre deve cham-la antes de sair da aplicao SDL. Com SDL_Init() e SDL_Quit() rmemente embutido em seu cdigo voc pode escrever seu primeiro e a maior parte bsica de uma aplicao SDL. Por outro lado, ns devemos nos preparar para os cabealhos de erros (handle erros). Muitas funes SDL retornam um valor e indicam se uma funo foi bem sucedida ou falhou, SDL_Init(), por exemplo, retorna -1 (menos um) se ela no puder inicializar o sub-sistema. O SDL fornece um facilitador til que permite voc determinar exatamente qual problema ocorreu, a qualquer momento pode ocorrer um erro dentro do SDL e uma mensagem armazenada para que voc possa peg-la usando a funo SDL_GetError(). Use-a freqentemente, voc nunca pode saber quando ocorrer um erro. Dica: Antes de inicializar algum sub-sistema utilize a funo SDL_WasInit() para vericar se a mesma j est inicializada, como por exemplo: Guedes, Maurilio SDL Passo-a-Passo

CAPTULO 2. VDEO BSICO


... if ( SDL_WasInit ( SDL_INIT_TIMER ) == 0 ) { SDL_InitSubSystem ( SDL_INIT_TIMER ) ; } ...

11

Listing 2.1: Dica - Funo SDL_WasInit()


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46

/ SDL P a s s o aP a s s o C o p y r i g h t ( C ) 2007 Guedes , M a u r i l i o E s t e a r q u i v o p a r t e do l i v r o SDL P a s s o aP a s s o O mesmo s o f t w a r e l i v r e ; v o c pode r e d i s t r i b u l a e / ou m o d i f i c l a s o b o s t e r m o s da L i c e n a P b l i c a G e r a l Menor do GNU conforme p u b l i c a d a p e l a Free Software Foundation ; t a n t o a v e r s o 2 . 1 da L i c e n a , ou ( a s e u c r i t r i o ) q u a l q u e r v e r s o p o s t e r i o r . E s t e a r q u i v o d i s t r i b u d o na e x p e c t a t i v a de que s e j a t i l , porm , SEM NENHUMA GARANTIA ; nem mesmo a g a r a n t i a i m p l c i t a de COMERCIABILIDADE OU ADEQUAO A UMA FINALIDADE ESPECFICA . C o n s u l t e a L i c e n a P b l i c a G e r a l Menor do GNU p a r a m a i s d e t a l h e s . Voc d e v e t e r r e c e b i d o uma c p i a da L i c e n a P b l i c a G e r a l Menor do GNU j u n t o com e s t a b i b l i o t e c a ; s e no , e s c r e v a p a r a a F r e e S o f t w a r e F o u n d a t i o n , I n c . , no e n d e r e o 59 Temple S t r e e t , S u i t e 3 3 0 , Boston , MA 02111 1307 USA . b i l l g u e d e s @ t e r r a . com . b r / #include < i o s t r e a m > #ifdef WIN32 / / Caso s e j a Windows #include "SDL.h" #include "windows.h" #else / / Caso s e j a n i x #include <SDL / SDL . h> #endif using namespace std ; #define DEBUG / / A t i v a a d e p u r a o class Sdl { public : Sdl ( ) ; / / I n i c a l i z a o p a d r o virtual ~Sdl ( ) ; / / D e s t r u i d o r p a d r o void InicializarVideo ( ) ; / / I n i c i a l i z a o v d e o private : / / E x e c u t a um mensagem de e x e c e o void ExecutarExcecao ( const string& mensagem ) ; } ; / / Fim S d l

Sdl : : Sdl ( ) { 47 #ifdef DEBUG 48 cout << "Inicializando o SDL." << endl ; 49 #endif

Guedes, Maurilio

SDL Passo-a-Passo

CAPTULO 2. VDEO BSICO


50 51 52 53 54

12

} / / Fim S d l

Sdl : : ~ Sdl ( ) { #ifdef DEBUG 55 cout << "Finalizando o SDL." << endl ; 56 #endif
57 58 59 60 61 62

SDL_Quit ( ) ; } / / Fim ~ S d l

/ / D e s l i g a t o d o s o s subs i s t e m a s

void Sdl : : ExecutarExcecao ( const string& mensagem ) { 63 throw mensagem ; 64 } / / Fim E x e c u t a r E x c e c a o


65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107

void Sdl : : InicializarVideo ( ) { / / Caso o v d e o j e s t e j a i n i c i a l i z a d o if ( SDL_WasInit ( SDL_INIT_VIDEO ) ! = 0 ) { return ; / / R e t o r n e } if ( ( SDL_Init ( SDL_INIT_VIDEO ) == 1)) { ExecutarExcecao ( "Erro ao inicializar o vdeo: " + ( string ) SDL_GetError ( ) ) ; } else { #ifdef DEBUG cout << "Vdeo inicializado com sucesso!" << endl ; #endif } } / / Fim I n i c i a l i z a r V i d e o

#ifdef WIN32 / / Caso s e j a Windows INT WINAPI WinMain ( HINSTANCE hInst , HINSTANCE , LPSTR strCmdLine , INT ) #else / / Caso s e j a n i x int main ( int qtd_argumento , char argumentos [ ] ) #endif { try { Sdl mJogo ; mJogo . InicializarVideo ( ) ; } catch ( const string& mensagem ) { cerr << mensagem << endl ; exit ( 1 ) ; / / S a i ao s i s t e m a o p e r a c i o n a l com e r r o } exit ( 0 ) ; } / / S a i ao s i s t e m a o p e r a c i o n a l sem e r r o

Guedes, Maurilio

SDL Passo-a-Passo

CAPTULO 2. VDEO BSICO

13

Listing 2.2: Inicializando o vdeo do sdl Compilao: Linux: g++ -o rodar exemplo.cpp -lSDL Windows: gcc -o rodar exemplo.cpp -lSDLmain -lSDL

Figura 2.1: Inicializando o vdeo do sdl

Guedes, Maurilio

SDL Passo-a-Passo

CAPTULO 2. VDEO BSICO

14

2.2

Entendendo a inicializao do vdeo

Como citado na seo acima, para inicializar o vdeo voc deve usar SDL_Init() ou a funo SDL_InitSubSystem(). Normalmente SDL_Init() usada quando voc precisa inicializar apenas um sub-sistema em todo aplicativo ou inicializar vrios sub-sistemas de uma nica vez. Por outro lado a SDL_InitSubSystem() usada quando voc precisa inicializar vrios sub-sistemas em diferentes momentos. Como por exemplo um jogogador que est jogando seu jogo preferido durante 2 (duas) horas, ele cansa de ouvir a msica do jogo e revolve colocar seu cd de udio preferido, o jogador pausa o jogo, entra nas conguraes e habilita o suporte para msica direta da unidade de cd. Nesse caso, o jogo inicializa o vdeo inicialmente, e num segundo momento inicializa a unidade de cdrom. Prottipo - SDL_Init() int SDL_Init(Uint32 flags) Prottipo - SDL_InitSubSystem() int SDL_InitSubSystem(Uint32 flags) As funes SDL_Init() e SDL_InitSubSystem() tem o parmetro bandeiras (ags) onde pode ser: SDL_INIT_TIMER SDL_INIT_AUDIO SDL_INIT_VIDEO SDL_INIT_CDROM SDL_INIT_JOYSTICK SDL_INIT_EVERYTHING Inicializa o sub-sistema cronmetro (timer). Inicializa o sub-sistema udio. Inicializa o sub-sistema vdeo. Inicializa o sub-sistema unidade de cdrom (CDRom). Inicializa o sub-sistema manete (joystick). Inicializa todos os sub-sistema citados acima.

Tabela 2.1: Parmetros das funes SDL_Init() e/ou SDL_InitSubSystem() O tipo de varivel prprio da SDL Uint32 um inteiro (int) de 32 (trinta e duas) posies (bits) sem sinal (unsigned), ou seja, apenas valor positivo. Com valor vlido de 0 (zero) at 4.294.967.295 (quadro bilhes, duzentos e noventa e quadro milhes, novecentos e sessenta e sete mil e duzentos e noventa e cinco). O retorno ser -1 (menos um) para erro ou 0 (zero) para sucesso. Dica: Para inicializar vrios sub-sistemas ao mesmo tempo, use o carecter "|"(more), como por exemplo:
... if ( SDL_Init ( SDL_INIT_VIDEO | SDL_INIT_JOYSTICK | SDL_INIT_CDROM == 1) { std : : cerr << "Erro ao inicializar sub-sistema" << std : : endl ; } ...

Listing 2.3: Dica - Inicializando vrios sub-sistemas

Guedes, Maurilio

SDL Passo-a-Passo

CAPTULO 2. VDEO BSICO

15

Em muitos casos muito til vericar antes se um sub-sistema j est inicializado, nesse caso, voc deve usar a funo SDL_WasInit(). Prottipo - SDL_WasInit() Uint32 SDL_WasInit(Uint32 flags) A funo SDL_WasInit() tem o parmetro bandeiras (ags) onde pode ser os mesmos da SDL_Init(). O retorno ser 0 (zero) para no inicializado ou a combinao das inicializaes dos subsistemas.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

/ SDL P a s s o aP a s s o C o p y r i g h t ( C ) 2007 Guedes , M a u r i l i o E s t e a r q u i v o p a r t e do l i v r o SDL P a s s o aP a s s o O mesmo s o f t w a r e l i v r e ; v o c pode r e d i s t r i b u l a e / ou m o d i f i c l a s o b o s t e r m o s da L i c e n a P b l i c a G e r a l Menor do GNU conforme p u b l i c a d a p e l a Free Software Foundation ; t a n t o a v e r s o 2 . 1 da L i c e n a , ou ( a s e u c r i t r i o ) q u a l q u e r v e r s o p o s t e r i o r . E s t e a r q u i v o d i s t r i b u d o na e x p e c t a t i v a de que s e j a t i l , porm , SEM NENHUMA GARANTIA ; nem mesmo a g a r a n t i a i m p l c i t a de COMERCIABILIDADE OU ADEQUAO A UMA FINALIDADE ESPECFICA . C o n s u l t e a L i c e n a P b l i c a G e r a l Menor do GNU p a r a m a i s d e t a l h e s . Voc d e v e t e r r e c e b i d o uma c p i a da L i c e n a P b l i c a G e r a l Menor do GNU j u n t o com e s t a b i b l i o t e c a ; s e no , e s c r e v a p a r a a F r e e S o f t w a r e F o u n d a t i o n , I n c . , no e n d e r e o 59 Temple S t r e e t , S u i t e 3 3 0 , Boston , MA 02111 1307 USA . b i l l g u e d e s @ t e r r a . com . b r / #include < i o s t r e a m >

#ifdef WIN32 / / Caso s e j a Windows #include "SDL.h" #include "windows.h" 26 #else / / Caso s e j a n i x 27 #include <SDL / SDL . h> 28 #endif
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45

using namespace std ; #define DEBUG / / A t i v a a d e p u r a o class Sdl { public : Sdl ( ) ; / / I n i c a l i z a o p a d r o virtual ~Sdl ( ) ; / / D e s t r u i d o r p a d r o void InicializarVideo ( ) ; / / I n i c i a l i z a o v d e o void InicializarCronometro ( ) ; / / I n i c i a l i z a o c r o n m e t r o void InicializarAudio ( ) ; / / I n i c i a l i z a o u d i o void InicializarCdRom ( ) ; / / I n i c i a l i z a a u n i d a d e de cdrom void InicializarManete ( ) ; / / I n i c i a l i z a o m a n e t e void InicializarTudo ( ) ; / / I n i c i a l i z a t o d o s a c i m a private :

Guedes, Maurilio

SDL Passo-a-Passo

CAPTULO 2. VDEO BSICO


46 47 48 49 50 51 52 53 54 55 56 57 58

16

/ / E x e c u t a um mensagem de e x e c e o void ExecutarExcecao ( const string& mensagem ) ; } ; / / Fim S d l Sdl : : Sdl ( ) { #ifdef DEBUG cout << "Inicializando o SDL." << endl ; #endif } / / Fim S d l

Sdl : : ~ Sdl ( ) { 59 #ifdef DEBUG 60 cout << "Finalizando o SDL." << endl ; 61 #endif
62 63 64 65 66 67

SDL_Quit ( ) ; } / / Fim ~ S d l

/ / D e s l i g a t o d o s o s subs i s t e m a s

void Sdl : : ExecutarExcecao ( const string& mensagem ) { 68 throw mensagem ; 69 } / / Fim E x e c u t a r E x c e c a o


70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103

void Sdl : : InicializarVideo ( ) { / / Caso o v d e o j e s t e j a i n i c i a l i z a d o if ( SDL_WasInit ( SDL_INIT_VIDEO ) ! = 0 ) { #ifdef DEBUG cout << "Vdeo j est inicializado!" << endl ; #endif return ; / / R e t o r n e } if ( ( SDL_InitSubSystem ( SDL_INIT_VIDEO ) == 1)) { ExecutarExcecao ( "Erro ao inicializar o vdeo: " + ( string ) SDL_GetError ( ) ) ; } else { #ifdef DEBUG cout << "Vdeo inicializado com sucesso!" << endl ; #endif } } / / Fim I n i c i a l i z a r V i d e o void Sdl : : InicializarCronometro ( ) { / / Caso o c r o n m e t r o j e s t e j a i n i c i a l i z a d o if ( SDL_WasInit ( SDL_INIT_TIMER ) ! = 0 ) { #ifdef DEBUG cout << "Cronmetro j est inicializado!" << endl ; #endif

Guedes, Maurilio

SDL Passo-a-Passo

CAPTULO 2. VDEO BSICO


104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161

17

return ; / / R e t o r n e } if ( ( SDL_InitSubSystem ( SDL_INIT_TIMER ) == 1)) { ExecutarExcecao ( "Erro ao inicializar o cronmetro: " + ( string ) SDL_GetError ( ) ) ; } else { #ifdef DEBUG cout << "Cronmetro inicializado com sucesso!" << endl ; #endif } } / / Fim I n i c i a l i z a r C r o n o m e t r o void Sdl : : InicializarAudio ( ) { / / Caso o u d i o j e s t e j a i n i c i a l i z a d o if ( SDL_WasInit ( SDL_INIT_AUDIO ) ! = 0 ) { #ifdef DEBUG cout << "udio j est inicializado!" << endl ; #endif return ; / / R e t o r n e } if ( ( SDL_InitSubSystem ( SDL_INIT_AUDIO ) == 1)) { ExecutarExcecao ( "Erro ao inicializar o udio: " + ( string ) SDL_GetError ( ) ) ; } else { #ifdef DEBUG cout << "udio inicializado com sucesso!" << endl ; #endif } } / / Fim I n i c i a l i z a r A u d i o void Sdl : : InicializarCdRom ( ) { / / Caso a u n i d a d e de cd j e s t e j a i n i c i a l i z a d o if ( SDL_WasInit ( SDL_INIT_CDROM ) ! = 0 ) { #ifdef DEBUG cout << "Unidade de cd j est inicializado!" << endl ; #endif return ; / / R e t o r n e } if ( ( SDL_InitSubSystem ( SDL_INIT_CDROM ) == 1)) { ExecutarExcecao ( "Erro ao inicializar a unidade de cd: " + ( string ) SDL_GetError ( ) ) ;

Guedes, Maurilio

SDL Passo-a-Passo

CAPTULO 2. VDEO BSICO


162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219

18

} else { #ifdef DEBUG cout << "Unidade de cd inicializado com sucesso!" << endl ; #endif } } / / Fim I n i c i a l i z a r C d R o m void Sdl : : InicializarManete ( ) { / / Caso o m a n e t e j e s t e j a i n i c i a l i z a d o if ( SDL_WasInit ( SDL_INIT_JOYSTICK ) ! = 0 ) { #ifdef DEBUG cout << "Manete j est inicializado!" << endl ; #endif return ; / / R e t o r n e } if ( ( SDL_InitSubSystem ( SDL_INIT_JOYSTICK ) == 1)) { ExecutarExcecao ( "Erro ao inicializar o manete: " + ( string ) SDL_GetError ( ) ) ; } else { #ifdef DEBUG cout << "Manete inicializado com sucesso!" << endl ; #endif } } / / Fim I n i c i a l i z a r M a n e t e void Sdl : : InicializarTudo ( ) { / / Caso t u d o j e s t e j a i n i c i a l i z a d o if ( SDL_WasInit ( SDL_INIT_EVERYTHING ) ! = 0 ) { #ifdef DEBUG cout << "Tudo (vdeo|cronmetro|udio|unidade de cdrom|" "manete) j est inicializado!" << endl ; #endif return ; / / R e t o r n e } if ( ( SDL_InitSubSystem ( SDL_INIT_EVERYTHING ) == 1)) { ExecutarExcecao ( "Erro ao inicializar o tudo (vdeo|" "cronmetro|udio|unidade de cdrom|manete): " + ( string ) SDL_GetError ( ) ) ; } else { #ifdef DEBUG cout << "Tudo (vdeo|cronmetro|udio|unidade de cdrom|" "manete)inicializado com sucesso!" << endl ;

Guedes, Maurilio

SDL Passo-a-Passo

CAPTULO 2. VDEO BSICO


220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249

19

#endif } } / / Fim I n i c i a l i z a r T u d o

#ifdef WIN32 / / Caso s e j a Windows INT WINAPI WinMain ( HINSTANCE hInst , HINSTANCE , LPSTR strCmdLine , INT ) #else / / Caso s e j a n i x int main ( int qtd_argumento , char argumentos [ ] ) #endif { try { Sdl mJogo ; mJogo . InicializarVideo ( ) ; mJogo . InicializarCronometro ( ) ; mJogo . InicializarAudio ( ) ; mJogo . InicializarCdRom ( ) ; mJogo . InicializarManete ( ) ; mJogo . InicializarTudo ( ) ; } catch ( const string& mensagem ) { cerr << mensagem << endl ; exit ( 1 ) ; / / S a i ao s i s t e m a o p e r a c i o n a l com e r r o } exit ( 0 ) ; } / / S a i ao s i s t e m a o p e r a c i o n a l sem e r r o

Listing 2.4: Entendendo a inicializao do vdeo Compilao: Linux: g++ -o rodar exemplo.cpp -lSDL Windows: gcc -o rodar exemplo.cpp -lSDLmain -lSDL

Figura 2.2: Entendendo a inicializao do vdeo Guedes, Maurilio SDL Passo-a-Passo

CAPTULO 2. VDEO BSICO

20

2.3

Inicializando a tela de vdeo

A tela de vdeo provavelmente a coisa mais comum que o SDL usa. Aqui tem um pequeno exemplo para demonstrar o bsico.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

/ SDL P a s s o aP a s s o C o p y r i g h t ( C ) 2007 Guedes , M a u r i l i o E s t e a r q u i v o p a r t e do l i v r o SDL P a s s o aP a s s o O mesmo s o f t w a r e l i v r e ; v o c pode r e d i s t r i b u l a e / ou m o d i f i c l a s o b o s t e r m o s da L i c e n a P b l i c a G e r a l Menor do GNU conforme p u b l i c a d a p e l a Free Software Foundation ; t a n t o a v e r s o 2 . 1 da L i c e n a , ou ( a s e u c r i t r i o ) q u a l q u e r v e r s o p o s t e r i o r . E s t e a r q u i v o d i s t r i b u d o na e x p e c t a t i v a de que s e j a t i l , porm , SEM NENHUMA GARANTIA ; nem mesmo a g a r a n t i a i m p l c i t a de COMERCIABILIDADE OU ADEQUAO A UMA FINALIDADE ESPECFICA . C o n s u l t e a L i c e n a P b l i c a G e r a l Menor do GNU p a r a m a i s d e t a l h e s . Voc d e v e t e r r e c e b i d o uma c p i a da L i c e n a P b l i c a G e r a l Menor do GNU j u n t o com e s t a b i b l i o t e c a ; s e no , e s c r e v a p a r a a F r e e S o f t w a r e F o u n d a t i o n , I n c . , no e n d e r e o 59 Temple S t r e e t , S u i t e 3 3 0 , Boston , MA 02111 1307 USA . b i l l g u e d e s @ t e r r a . com . b r / #include < i o s t r e a m >

#ifdef WIN32 / / Caso s e j a Windows #include "SDL.h" #include "windows.h" 26 #else / / Caso s e j a n i x 27 #include <SDL / SDL . h> 28 #endif
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52

using namespace std ; #define DEBUG / / A t i v a a d e p u r a o class Sdl { public : Sdl ( ) ; / / I n i c a l i z a o p a d r o virtual ~Sdl ( ) ; / / D e s t r u i d o r p a d r o void InicializarVideo ( ) ; / / I n i c i a l i z a o v d e o void MudarTela ( const int& largura , const int& altura , const int& cor ) ; / / Muda a r e s o l u o da t e l a void Pausar ( ) ; / / Aguarda o u s u r i o p r e s s i o n a r uma t e c l a private : SDL_Surface tela ; / / S u p e r f c i e da t e l a / / E x e c u t a um mensagem de e x e c e o void ExecutarExcecao ( const string& mensagem ) ; } ; / / Fim S d l

Guedes, Maurilio

SDL Passo-a-Passo

CAPTULO 2. VDEO BSICO


Sdl : : Sdl ( ) { #ifdef DEBUG 56 cout << "Inicializando o SDL." << endl ; 57 #endif
53 54 55 58 59 60 61 62 63 64 65 66 67 68 69 70 71

21

tela= NULL ; atexit ( SDL_Quit ) ; } / / Fim S d l

/ / Ao s a i r chamar a f u n o SDL_Quit ( )

Sdl : : ~ Sdl ( ) { #ifdef DEBUG cout << "Finalizando o SDL." << endl ; #endif } / / Fim ~ S d l

void Sdl : : ExecutarExcecao ( const string& mensagem ) { 72 throw mensagem ; 73 } / / Fim E x e c u t a r E x c e c a o


74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110

void Sdl : : InicializarVideo ( ) { / / Caso o v d e o j e s t e j a i n i c i a l i z a d o if ( SDL_WasInit ( SDL_INIT_VIDEO ) ! = 0 ) { return ; / / R e t o r n e } if ( ( SDL_Init ( SDL_INIT_VIDEO ) == 1)) { ExecutarExcecao ( "Erro ao inicializar o vdeo: " + ( string ) SDL_GetError ( ) ) ; } else { #ifdef DEBUG cout << "Vdeo inicializado com sucesso!" << endl ; #endif } } / / Fim I n i c i a l i z a r V i d e o void Sdl : : MudarTela ( const int& largura , const int& altura , const int& cor ) { #ifdef DEBUG cout << "Largura: " << largura << " " << "Altura: " << altura << " " << "Cor: " << cor << "" << endl ; #endif if ( ( tela= SDL_SetVideoMode ( largura , altura , cor , SDL_SWSURFACE | SDL_ANYFORMAT ) ) == NULL ) {

Guedes, Maurilio

SDL Passo-a-Passo

CAPTULO 2. VDEO BSICO


111 112 113 114 115 116 117 118 119 120 121 122 123 125

22

ExecutarExcecao ( "Erro ao mudar a tela de vdeo: " + ( string ) SDL_GetError ( ) ) ; } else { #ifdef DEBUG cout << "Tela de vdeo inicializado com sucesso!" << endl ; #endif } } / / Fim MudarTela

void Sdl : : Pausar ( ) { 124 cout << "Pressione a tecla ENTER para continuar..." << endl ; #ifdef WIN32 system ( "pause" ) ; #else 129 system ( "read" ) ; 130 #endif 131 } / / Fim P a u s a r
126 127 128 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155

#ifdef WIN32 / / Caso s e j a Windows INT WINAPI WinMain ( HINSTANCE hInst , HINSTANCE , LPSTR strCmdLine , INT ) #else / / Caso s e j a n i x int main ( int qtd_argumento , char argumentos [ ] ) #endif { try { Sdl mJogo ; mJogo . InicializarVideo ( ) ; mJogo . MudarTela ( 2 0 0 , 3 0 0 , 8 ) ; mJogo . Pausar ( ) ; } catch ( const string& mensagem ) { cerr << mensagem << endl ; exit ( 1 ) ; / / S a i ao s i s t e m a o p e r a c i o n a l com e r r o } exit ( 0 ) ; } / / S a i ao s i s t e m a o p e r a c i o n a l sem e r r o

Listing 2.5: Inicializando a tela de vdeo Compilao: Linux: g++ -o rodar exemplo.cpp -lSDL Windows: gcc -o rodar exemplo.cpp -lSDLmain -lSDL

Guedes, Maurilio

SDL Passo-a-Passo

CAPTULO 2. VDEO BSICO

23

Figura 2.3: Inicializando a tela de vdeo

2.4

Entendendo a inicializao da tela de vdeo

A tela de vdeo mudada com a funo SDL_SetVideoMode(), logo, possvel mudar a congurao da tela a qualquer momento. Prottipo - SDL_SetVideoMode() SDL_Surface *SDL_SetVideoMode(int width, int height, int bpp, Uint32 flags) A funo SDL_SetVideoMode() tem os parmetros altura (width), altura (height), quantidade de cor da resoluo (bpp) e bandeiras (ags) onde bandeiras pode ser: SDL_SWSURFACE SDL_HWSURFACE SDL_ASYNCBLIT SDL_ANYFORMAT Cria a tela de vdeo na memria do computador. Cria a tela de vdeo na memria da placa de vdeo. Habilita o uso da atualizao assncrono da tela de vdeo. Isso geralmente usado para desenhar em computador lento. Normalmente, se a tela de vdeo requerer uma resoluo de cor no suportada, o SDL emular uma tela mascarada (shadow). Passando SDL_ANYFORMAT predomina ela mesma e obriga o SDL a us-la na tela de vdeo, apesar de ter denido uma resoluo de cor (bpp). A biblioteca SDL entrega exclusivamente o acesso a paleta. Sem essa bandeira (ag) voc no deve pegar as cores com as funes SDL_SetColors() ou SDL_SetPalette().

SDL_HWPALETTE

Guedes, Maurilio

SDL Passo-a-Passo

CAPTULO 2. VDEO BSICO

24

Habilita a memria dupla em mquina (hardware double buffering), somente vlido com a denio SDL_HWSURFACE, Chamando SDL_Flip() atualizar a memria intermediria (buffer) e atualizar a tela de vdeo, desenhando tudo que pegou na superfcie da tela que ainda no foi mostrada at o momento. Se a memria dupla (double buffering) no puder ser habilitada, ento o SDL_Flip() ter a mesma performance ao SDL_UpdateRect() sobre a tela inteira. SDL_FULLSCREEN A biblioteca SDL tentar usar o modo tela cheia (fullscreen). Se uma mudana de resoluo de vdeo no for possvel, a prxima resoluo ser usada e a tela ser centralizada sobre um fundo preto. SDL_OPENGL Cria um contexto renderizado em OpenGL. Voc deve mudar antes o atributo de vdeo do OpenGL com a funo SDL_GL_SetAtrribute(). SDL_OPENGLBLIT Cria um contexto renderizado em OpenGL, como acima, mas aceita normalmente a cpia de memria (blitting). A tela bidimencional (2D) deve ser um canal alfa (alpha channel), e a funo SDL_UpdateRects() deve ser usado para atualizar as mudanas na tela. SDL_RESIZABLE Cria uma tela redimensionvel. Quando a tela redimensionada pelo usurio o evento SDL_VIDEORESIZE executado e a funo SDL_VideoMode() pode ser chamada novamente com o novo tamanho. SDL_NOFRAME Se possvel, a biblioteca SDL cria uma janela sem o ttulo e/ou a decorao de quadro (frame decoration). Em modo tela cheia (fullscreen) essa bandeira (ag) chamada automaticamente. Tabela 2.2: Parmetro da funo SDL_SetVideoMode() SDL_DOUBLEBUF

O retorno ser um ponteiro de superfcie (surface) ou NULL se falhar. Uma superfcie (surface) o elemento bsico para construir o grco. A superfcie (surface) geralmente retangular, porm, pode ser quadrada. Frequentemente usamos superfcie (surface) quadrada quando desenhamos o cenrio usando azulejo (tile). Antes de usar a funo SDL_SetVideoMode() voc deve declarar uma varivel ponteiro com o tipo SDL_Surface, como: SDL_Surface* tela Falha: Para evitar acesso a lixo de memria, sempre atribuir a varivel do tipo SDL_Surface o valor NULL na declaro se possvel ou na inicializao da classe como tambm na destruio, como por exemplo.
... SDL_Surface tela= NULL ; ...

Guedes, Maurilio

SDL Passo-a-Passo

CAPTULO 2. VDEO BSICO


MeuJogo : : MeuJogo ( ) { ... tela= NULL ; ... } ... MeuJogo : : ~ MeuJogo ( ) { ... tela= NULL ; ... }

25

Listing 2.6: Falha - Tipo de Varivel SDL_Surface


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43

/ SDL P a s s o aP a s s o C o p y r i g h t ( C ) 2007 Guedes , M a u r i l i o E s t e a r q u i v o p a r t e do l i v r o SDL P a s s o aP a s s o O mesmo s o f t w a r e l i v r e ; v o c pode r e d i s t r i b u l a e / ou m o d i f i c l a s o b o s t e r m o s da L i c e n a P b l i c a G e r a l Menor do GNU conforme p u b l i c a d a p e l a Free Software Foundation ; t a n t o a v e r s o 2 . 1 da L i c e n a , ou ( a s e u c r i t r i o ) q u a l q u e r v e r s o p o s t e r i o r . E s t e a r q u i v o d i s t r i b u d o na e x p e c t a t i v a de que s e j a t i l , porm , SEM NENHUMA GARANTIA ; nem mesmo a g a r a n t i a i m p l c i t a de COMERCIABILIDADE OU ADEQUAO A UMA FINALIDADE ESPECFICA . C o n s u l t e a L i c e n a P b l i c a G e r a l Menor do GNU p a r a m a i s d e t a l h e s . Voc d e v e t e r r e c e b i d o uma c p i a da L i c e n a P b l i c a G e r a l Menor do GNU j u n t o com e s t a b i b l i o t e c a ; s e no , e s c r e v a p a r a a F r e e S o f t w a r e F o u n d a t i o n , I n c . , no e n d e r e o 59 Temple S t r e e t , S u i t e 3 3 0 , Boston , MA 02111 1307 USA . b i l l g u e d e s @ t e r r a . com . b r / #include < i o s t r e a m > #ifdef WIN32 / / Caso s e j a Windows #include "SDL.h" #include "windows.h" #else / / Caso s e j a n i x #include <SDL / SDL . h> #endif using namespace std ; #define DEBUG / / A t i v a a d e p u r a o class Sdl { public : Sdl ( ) ; / / I n i c a l i z a o p a d r o virtual ~Sdl ( ) ; / / D e s t r u i d o r p a d r o void InicializarVideo ( ) ; / / I n i c i a l i z a o v d e o void MudarTela ( const int& largura , const int& altura , const int& cor

Guedes, Maurilio

SDL Passo-a-Passo

CAPTULO 2. VDEO BSICO


44 45 46 47 48 49 50

26

) ; / / Muda a r e s o l u o da t e l a void Pausar ( ) ; / / Aguarda o u s u r i o p r e s s i o n a r uma t e c l a private : SDL_Surface tela ; / / S u p e r f c i e da t e l a

/ / E x e c u t a um mensagem de e x e c e o void ExecutarExcecao ( const string& mensagem ) ; 51 } ; / / Fim S d l


52 53 54 55

Sdl : : Sdl ( ) { #ifdef DEBUG 56 cout << "Inicializando o SDL." << endl ; 57 #endif
58

tela= NULL ; atexit ( SDL_Quit ) ; 61 } / / Fim S d l


59 60 62 63 64 65

/ / Ao s a i r chamar a f u n o SDL_Quit ( )

Sdl : : ~ Sdl ( ) { #ifdef DEBUG 66 cout << "Finalizando o SDL." << endl ; 67 #endif 68 } / / Fim ~ S d l
69 70 71

void Sdl : : ExecutarExcecao ( const string& mensagem ) { 72 throw mensagem ; 73 } / / Fim E x e c u t a r E x c e c a o


74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101

void Sdl : : InicializarVideo ( ) { / / Caso o v d e o j e s t e j a i n i c i a l i z a d o if ( SDL_WasInit ( SDL_INIT_VIDEO ) ! = 0 ) { return ; / / R e t o r n e } if ( ( SDL_Init ( SDL_INIT_VIDEO ) == 1)) { ExecutarExcecao ( "Erro ao inicializar o vdeo: " + ( string ) SDL_GetError ( ) ) ; } else { #ifdef DEBUG cout << "Vdeo inicializado com sucesso!" << endl ; #endif } } / / Fim I n i c i a l i z a r V i d e o void Sdl : : MudarTela ( const int& largura , const int& altura , const int& cor ) {

Guedes, Maurilio

SDL Passo-a-Passo

CAPTULO 2. VDEO BSICO


102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155

27

#ifdef DEBUG cout << "Largura: " << largura << " " << "Altura: " << altura << " " << "Cor: " << cor << "" << endl ; #endif if ( ( tela= SDL_SetVideoMode ( largura , altura , cor , SDL_SWSURFACE | SDL_ANYFORMAT | SDL_RESIZABLE ) ) == NULL ) { ExecutarExcecao ( "Erro ao mudar a tela de vdeo: " + ( string ) SDL_GetError ( ) ) ; } else { #ifdef DEBUG cout << "Tela de vdeo inicializado com sucesso!" << endl ; #endif } } / / Fim MudarTela

void Sdl : : Pausar ( ) { 124 cout << "Pressione a tecla ENTER para continuar..." << endl ; #ifdef WIN32 system ( "pause" ) ; #else system ( "read" ) ; #endif } / / Fim P a u s a r

#ifdef WIN32 / / Caso s e j a Windows INT WINAPI WinMain ( HINSTANCE hInst , HINSTANCE , LPSTR strCmdLine , INT ) #else / / Caso s e j a n i x int main ( int qtd_argumento , char argumentos [ ] ) #endif { try { Sdl mJogo ; mJogo . InicializarVideo ( ) ; mJogo . MudarTela ( 2 0 0 , 3 0 0 , 8 ) ; mJogo . Pausar ( ) ; } catch ( const string& mensagem ) { cerr << mensagem << endl ; exit ( 1 ) ; / / S a i ao s i s t e m a o p e r a c i o n a l com e r r o } exit ( 0 ) ; } / / S a i ao s i s t e m a o p e r a c i o n a l sem e r r o

Listing 2.7: Entendendo a inicializao da tela de vdeo Compilao: Guedes, Maurilio SDL Passo-a-Passo

CAPTULO 2. VDEO BSICO Linux: g++ -o rodar exemplo.cpp -lSDL Windows: gcc -o rodar exemplo.cpp -lSDLmain -lSDL

28

Figura 2.4: Entendendo a inicializao da tela de vdeo

Guedes, Maurilio

SDL Passo-a-Passo

CAPTULO 2. VDEO BSICO

29

2.5

Vericando se um modo de resoluo suportado

Em alguns casos precisamos vericar se um modo de resoluo suportado antes de fazermos a alterao da tela de vdeo, como por exemplo, um jogador que est na terceira fase de um jogo, ele resolve mudar a resoluo da tela, ento, ele pausa o jogo, entra na tela de congurao de vdeo, escolhe o modo de resoluo 1280x1024 em tela cheia e manda aplicar a mudana. Caso o computador no suporte essa congurao e o desenvolvedor do jogo tenha vericado se o modo de resoluo de vdeo suportada, ser exibido uma mensagem dizendo que a resoluo escolhida no suportada, por outro lado, se no tiver uma vericao o jogo ser encerrado. Para vericar se um modo particular de resoluo suportado pelo computador utilize a funo SDL_VideoModeOK(). Prottipo - SDL_VideoModeOK() int SDL_VideoModeOK(int width, int height, int bpp, Uint32 flags) A funo SDL_VideoModeOK() tem os mesmos parmetros de SDL_SetVideoMode(). O retorno ser 0 (zero) se o modo de resoluo no suportada.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

/ SDL P a s s o aP a s s o C o p y r i g h t ( C ) 2007 Guedes , M a u r i l i o E s t e a r q u i v o p a r t e do l i v r o SDL P a s s o aP a s s o O mesmo s o f t w a r e l i v r e ; v o c pode r e d i s t r i b u l a e / ou m o d i f i c l a s o b o s t e r m o s da L i c e n a P b l i c a G e r a l Menor do GNU conforme p u b l i c a d a p e l a Free Software Foundation ; t a n t o a v e r s o 2 . 1 da L i c e n a , ou ( a s e u c r i t r i o ) q u a l q u e r v e r s o p o s t e r i o r . E s t e a r q u i v o d i s t r i b u d o na e x p e c t a t i v a de que s e j a t i l , porm , SEM NENHUMA GARANTIA ; nem mesmo a g a r a n t i a i m p l c i t a de COMERCIABILIDADE OU ADEQUAO A UMA FINALIDADE ESPECFICA . C o n s u l t e a L i c e n a P b l i c a G e r a l Menor do GNU p a r a m a i s d e t a l h e s . Voc d e v e t e r r e c e b i d o uma c p i a da L i c e n a P b l i c a G e r a l Menor do GNU j u n t o com e s t a b i b l i o t e c a ; s e no , e s c r e v a p a r a a F r e e S o f t w a r e F o u n d a t i o n , I n c . , no e n d e r e o 59 Temple S t r e e t , S u i t e 3 3 0 , Boston , MA 02111 1307 USA . b i l l g u e d e s @ t e r r a . com . b r / #include < i o s t r e a m >

#ifdef WIN32 / / Caso s e j a Windows #include "SDL.h" #include "windows.h" 26 #else / / Caso s e j a n i x 27 #include <SDL / SDL . h> 28 #endif
29 30 31 32 33 34 35

using namespace std ; #define DEBUG / / A t i v a a d e p u r a o class Sdl {

Guedes, Maurilio

SDL Passo-a-Passo

CAPTULO 2. VDEO BSICO


36 37 38 39 40 41 42 43 44 45 46 47 48 49 50

30

public : Sdl ( ) ; / / I n i c a l i z a o p a d r o virtual ~Sdl ( ) ; / / D e s t r u i d o r p a d r o void InicializarVideo ( ) ; / / I n i c i a l i z a o v d e o void MudarTela ( const int& largura , const int& altura , const int& cor ) ; / / Muda a r e s o l u o da t e l a void Pausar ( ) ; / / Aguarda o u s u r i o p r e s s i o n a r uma t e c l a private : SDL_Surface tela ; / / S u p e r f c i e da t e l a

/ / E x e c u t a um mensagem de e x e c e o void ExecutarExcecao ( const string& mensagem ) ; 51 } ; / / Fim S d l


52 53 54

Sdl : : Sdl ( ) { 55 #ifdef DEBUG 56 cout << "Inicializando o SDL." << endl ; 57 #endif tela= NULL ; atexit ( SDL_Quit ) ; 61 } / / Fim S d l
60 62 63 64 65 66 67 68 69 70 71 72 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 58 59

/ / Ao s a i r chamar a f u n o SDL_Quit ( )

Sdl : : ~ Sdl ( ) { #ifdef DEBUG cout << "Finalizando o SDL." << endl ; #endif } / / Fim ~ S d l

void Sdl : : ExecutarExcecao ( const string& mensagem ) { throw mensagem ; 73 } / / Fim E x e c u t a r E x c e c a o void Sdl : : InicializarVideo ( ) { / / Caso o v d e o j e s t e j a i n i c i a l i z a d o if ( SDL_WasInit ( SDL_INIT_VIDEO ) ! = 0 ) { return ; / / R e t o r n e } if ( ( SDL_Init ( SDL_INIT_VIDEO ) == 1)) { ExecutarExcecao ( "Erro ao inicializar o vdeo: " + ( string ) SDL_GetError ( ) ) ; } else { #ifdef DEBUG cout << "Vdeo inicializado com sucesso!" << endl ; #endif }

Guedes, Maurilio

SDL Passo-a-Passo

CAPTULO 2. VDEO BSICO


94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149

31

} / / Fim I n i c i a l i z a r V i d e o void Sdl : : MudarTela ( const int& largura , const int& altura , const int& cor ) { #ifdef DEBUG cout << "Largura: " << largura << " " << "Altura: " << altura << " " << "Cor: " << cor << "" << endl ; #endif if ( SDL_VideoModeOK ( largura , altura , cor , SDL_HWSURFACE | SDL_DOUBLEBUF ) == 0 ) { cout << "Modo de resoluo de vdeo no suportado!" << endl ; return ; / / R e t o r n e } else { #ifdef DEBUG cout << "Modo de resoluo de vdeo suportado!" << endl ; #endif } if ( ( tela= SDL_SetVideoMode ( largura , altura , cor , SDL_HWSURFACE | SDL_DOUBLEBUF ) ) == NULL ) { ExecutarExcecao ( "Erro ao mudar a tela de vdeo: " + ( string ) SDL_GetError ( ) ) ; } else { #ifdef DEBUG cout << "Tela de vdeo inicializado com sucesso!" << endl ; #endif } } / / Fim MudarTela void Sdl : : Pausar ( ) { cout << "Pressione a tecla ENTER para continuar..." << endl ; #ifdef WIN32 system ( "pause" ) ; #else system ( "read" ) ; #endif } / / Fim P a u s a r

#ifdef WIN32 / / Caso s e j a Windows INT WINAPI WinMain ( HINSTANCE hInst , HINSTANCE , LPSTR strCmdLine , INT ) 150 #else / / Caso s e j a n i x 151 int main ( int qtd_argumento , char argumentos [ ] )

Guedes, Maurilio

SDL Passo-a-Passo

CAPTULO 2. VDEO BSICO


#endif { try 155 {
152 153 154 156 157 158 159 160 161 162 163 164 165 166 167 168

32

Sdl mJogo ; mJogo . InicializarVideo ( ) ; mJogo . MudarTela ( 2 0 0 , 3 0 0 , 3 2 ) ; mJogo . Pausar ( ) ; } catch ( const string& mensagem ) { cerr << mensagem << endl ; exit ( 1 ) ; / / S a i ao s i s t e m a o p e r a c i o n a l com e r r o } exit ( 0 ) ; } / / S a i ao s i s t e m a o p e r a c i o n a l sem e r r o

Listing 2.8: Vericando se um modo de resoluo suportado Compilao: Linux: g++ -o rodar exemplo.cpp -lSDL Windows: gcc -o rodar exemplo.cpp -lSDLmain -lSDL

Figura 2.5: Vericando se um modo de resoluo suportado

2.6

Exerccio

Para xar e melhorar o aprendizado da biblioteca multimdia SDL, necessrio praticar muito e fazer os exerccios. Os exerccios devem ser feitos em C++ e multi-plataforma. Dica: Desenvolva vrios aplicativos ou mesmo bibliotecas de apoio por conta prpria para adquirir mais conhecimento sobre as funes da biblioteca multimdia SDL. Guedes, Maurilio SDL Passo-a-Passo

CAPTULO 2. VDEO BSICO

33

Nota: Exerccios feitos em C e/ou no multi-plataforma sero automaticamente considerados errados. 1. Crie um aplicativo interativo com o usurio que solicite ao mesmo quais sub-sistemas sero inicializados. 2. Crie um aplicativo interativo com o usurio que solicite ao mesmo quais bandeiras (ags) de tela do vdeo sero incluidas na tela e inicialize a tela de vdeo com largura= 200, altura= 300 e cor= 16. 3. Crie um aplictavio interativo com o usurio que solicite ao mesmo a resoluo de tela do vdeo a ser usada. Esse aplicativo deve car em lao sempre solicitando uma nova resoluo at o usurio escolher sair. 4. Crie um quadro de trabalho (framework) para o programador inicializar os sub-sistemas e a tela de vdeo. Tire suas dvidas no forum da comunidade PDJ acessando o endereo: http://www.pdj.com.br/forum/viewforum.php?f=19

Guedes, Maurilio

SDL Passo-a-Passo

APNDICE A. APLICATIVOS UTILIZADOS PARA FAZER O LIVRO

34

Apndice A Aplicativos Utilizados para Fazer o Livro


Para fazer o livro foram utilizados vrios aplicativos e bibliotecas, abaixo segue a lista completa: Ubuntu Sistema operacional. Code::Blocks Editor para C++. Kile Editor para Latex. Firefox Nagevador para internet. GCC Compilador para C++. OpenOfce Aplicativos para escritrio. xCHM Visualizador de arquivo CHM. Evince Visualizador de arquivo PDF. Latex Biblioteca de criao de documento. Wine Emulador de windows. Tabela A.1: Aplicativos utilizados para fazer o livro

Guedes, Maurilio

SDL Passo-a-Passo

APNDICE B. LICENA PBLICA DE DOCUMENTOS

35

Apndice B Licena Pblica de Documentos


Nessa seo descrito a licena do livro, texto em portugus e ingls.

B.1

Licena de Documento Livre GNU

Esta uma traduo no ocial da Licena de Documentao Livre GNU em Portugus do Brasil. Ela no publicada pela Free Software Foundation, e no se aplica legalmente distribuio de documentos que usem a GNU LDL apenas o texto original em Ingls da GNU FDL se aplica. Contudo, esperamos que esta traduo ajude os falantes desta lngua a entender melhor a GNU GFL. Licena de Documentao Livre GNU Verso 1.2, Novembro de 2002 Copyright c 2000, 2001, 2002 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. permitido a qualquer um copiar e distribuir cpias exatas deste documento de licena, embora no seja permitido alter-lo. 0. PREMBULO O propsito desta Licena fazer com que um manual, livro-texto, ou outro documento funcional e til seja livre, garantindo a todos a liberdade efetiva de copi-lo e redistribui-lo, com ou sem modicaes, tanto comercialmente como no comercialmente. Em segundo lugar, esta Licena fornece ao autor e ao editor um meio de obter crdito pelo seu trabalho, no sendo, ao mesmo tempo, considerados responsveis por modicaes feitas por outros. Esta licena um tipo de "esquerdo de cpia"(copyleft), o que signica que trabalhos derivados do documentos devem, por sua vez, ser livres no mesmo sentido. Ela complementa a Licena Pblica Geral GNU, a qual uma licena de esquerdo de cpia criada para programas livres. Criamos esta Licena para que seja usada em manuais para programas livres, porque programas livres precisam de documentao livre: um programa livre deveria vir com manuais que ofeream as mesmas liberdades que o programa oferece. Mas esta Licena no est limitada a manuais de programas de computador; ela pode ser usada para qualquer trabalho de texto, independentemente do assunto ou se publicado como um livro impresso. Ns recomendamos esta Licena principalmente para trabalhos cujo propsito instruo ou referncia. 1. APLICABILIDADE E DEFINIES Guedes, Maurilio SDL Passo-a-Passo

APNDICE B. LICENA PBLICA DE DOCUMENTOS

36

Esta licena se aplica a qualquer manual ou outro trabalho, em qualquer meio, que contenha uma nota introduzida pelo detentor dos direitos autorais dizendo que o documento pode ser distribudo sob os termos desta. Tal nota garante uma licena mundial, livre de royalties, de durao ilimitada, para usar este trabalho sob as condies aqui colocadas. O "Documento", abaixo, se refere a qualquer tal manual ou trabalho. Qualquer membro do pblico um licenciado, e ser tratado por "voc". Voc aceita a licena se copiar, modicar ou distribuir o trabalho de um modo que necessite de permisso de acordo com a lei de direitos autorais. Uma "Verso Modicada"do Documento se refere a qualquer trabalho contendo o Documento ou uma parte deste, quer seja copiado sem modicaes, quer com modicaes e/ou traduzido para outra lngua. Uma "Seo Secundria" um apndice com nome ou uma seo inicial do Documento que trata exclusivamente da relao dos editores ou autores do Documento com seu assunto geral (ou temas relacionados) e no contm nada que possa estar diretamente dentro do assunto geral. Assim, se o Documento em parte um livro- texto de matemtica, uma Seo Secundria no pode explicar nada de matemtica. Tal relao pode ser uma conexo histrica com o assunto ou com temas relacionados, ou tratar de questes legais, comerciais, loscas, ticas ou polticas com relao a eles. "Sees Invariantes"so certas Sees Secundrias cujos ttulos so designados como sendo de Sees invariantes na nota que arma que o Documento publicado sob esta Licena. Se uma seo no se encaixa na denio acima de Secundria, ento no se permite que seja designada como Invariante. O Documento pode no conter nenhuma Seo Invariante. Se o documento no identicar quaisquer Sees Invariantes, ento no h nenhuma. "Textos de Capa"so certas passagens de texto que so listada como Textos de Capa Frontal ou Texto de Quarta Capa, na nota que arma que o Documento publicado sob esta Licena. Um Texto de Capa Frontal pode ter no mximo 5 palavras, e um Texto de Quarta Capa pode ter no mximo 25 palavras. Uma cpia "Transparente"do Documento signica uma cpia que pode ser lida pelo computador, representada em um formato cuja especicao esteja disponvel ao pblico geral, que seja apropriada para a imediata reviso do documento usando-se editores de texto genricos ou (para imagens compostas de pixeis) programas grcos genricos ou (para desenhos) algum editor de desenhos amplamente disponvel, e que seja apropriado para incluso em formatadores de texto ou para traduo automtica para uma variedade de formatos apropriados para incluso em formatadores de texto. Uma cpia feita em outro formato de arquivo Transparente cuja marcao, ou ausncia desta, foi manipulada para impedir ou desencorajar modicao subseqente pelos leitores no Transparente. Um formato de imagem no Transparente se usado em lugar de qualquer quantidade substancial de texto. Uma cpia que no "Transparente" chamada "Opaca". Exemplos de formatos apropriados para cpias Transparentes incluem ASCII puro sem marcao, formato de entrada Texinfo, LaTex, SGML ou XML usando um DTD publicamente disponvel, e HTML padro simples, PostScript ou PDF projetados para modicao por humanos. Exemplos de formatos de imagem transparentes incluem PNG, XCF e JPG. Formatos Opacos incluem formatos proprietrios que podem ser lidos e editados somente por processadores de texto proprietrios, SGML ou XML para os quais o DTD e/ou ferramentas de processamento no so largamente disponibilizadas, e HTML, Postscript ou PDF gerados automaticamente com propsito apenas de sada por alguns processadores de texto. "Pgina de Ttulo"signica, para um livro impresso, a prpria pgina do ttulo, alm das pginas subseqentes necessrias para conter, de forma legvel, o material que esta Licena requer que aparea na pgina do ttulo. Para trabalhos em formatos que no tm uma pgina Guedes, Maurilio SDL Passo-a-Passo

APNDICE B. LICENA PBLICA DE DOCUMENTOS

37

de ttulo assim, "Pgina de Ttulo"signica o texto prximo ocorrncia mais proeminente do ttulo do trabalho, precedendo o incio do corpo do texto. Uma seo "Intitulada XYZ"signica uma sub-unidade com nome do Documento cujo ttulo ou precisamente XYZ ou contm XYZ em parnteses seguindo o texto que traduz XYZ em outra lngua. (Aqui XYZ representa o nome de uma seo especca mencionado acima, tal como "Agradecimentos", "Dedicatria", "Apoio", ou "Histrico".) "Preservar o Ttulo"de uma seo assim quando voc modica o Documento signica que ela continua sendo uma seo "Intitulada XYZ"de acordo com esta denio. O Documento pode incluir Notas de Garantia em seguida nota que arma que esta Licena se aplica ao Documento. Estas Notas de Garantia so tidas como inclusas por referncia nesta Licena, mas somente com relao s notas de garantia: qualquer outra implicao que estas Notas de Garantia possam ter anulada e no tem efeito algum no contedo desta Licena. 2. CPIAS LITERAIS Voc pode copiar e distribuir o Documento em qualquer meio, comercialmente ou nocomercialmente, desde que esta licena, as notas de direitos autorais (copyright), e a nota de licena armando que esta Licena se aplica ao Documento sejam reproduzidas em todas as cpias, e que voc no inclua outras condies, quaisquer que sejam, s condies desta Licena. Voc no pode usar de medidas tcnicas para obstruir ou controlar a leitura ou cpia futura das cpias que voc zer ou distribuir. Contudo, voc pode aceitar compensao em troca das cpias. Se voc distribuir um nmero sucientemente grande de cpias, voc deve tambm respeitar as condies na seo 3. Voc pode tambm emprestar cpias, sob as mesmas condies acima mencionadas, e voc tambm as pode mostrar publicamente. 3. COPIANDO EM QUANTIDADE Se voc publicar cpias impressas (ou cpias em um meio que normalmente tem capas impressas) do documento, em nmero maior que 100, e a nota de licena do Documento requer Textos de Capa, voc deve encadernar as cpias em capas que carreguem, de forma clara e legvel, todos estes Textos de Capa: Textos de Capa Frontal na capa frontal, e Textos de Quarta Capa na quarta capa. Ambas as capas devem tambm identicar, de forma clara e legvel, voc como o editor das cpias. A capa frontal deve apresentar o ttulo completo com todas as palavras deste igualmente proeminentes e visveis. Voc pode adicionar outro material nas capas. Cpias com mudanas limitadas s capas, desde que preservando o ttulo do Documento e satisfazendo estas condies, podem ser tratadas como cpias literais em outros aspectos. Se os textos necessrios a qualquer uma das capas so demasiado volumosos para serem includos de forma legvel, voc deve colocar os primeiros listados (quantos couberem razoavelmente) na prpria capa, e continuar o resto nas pginas adjacentes. Se voc publicar ou distribuir cpias Opacas do Documento em nmero maior que 100, voc deve ou incluir uma cpia Transparente legvel por computador juntamente com cada cpia Opaca, ou dizer em, ou juntamente com, cada cpia Opaca um endereo de rede a partir do qual o pblico geral possa acessar e obter, usando protocolos de rede pblicos padro, uma cpia Transparente completa do Documento, livre de material adicionado. Se voc decidir pela segunda opo, voc deve seguir passos razoavelmente prudentes, quando comear a distribuir as cpias Opacas em quantidade, para garantir que esta cpia transparente permanecer acessvel no local indicado por pelo menos um ano aps a ltima vez que voc distribuir uma cpia Opaca (diretamente ou atravs de seus agentes ou distribuidor) desta edio ao pblico. solicitado, mas no exigido, que voc contate os autores do Documento muito antes de Guedes, Maurilio SDL Passo-a-Passo

APNDICE B. LICENA PBLICA DE DOCUMENTOS

38

redistribuir qualquer nmero grande de cpias, para dar a eles uma chance de lhe fornecer uma verso atualizada do Documento. 4. MODIFICAES Voc pode copiar e distribuir uma Verso Modicada do Documento sob as condies das sees 2 e 3 acima, desde que voc fornea a Verso Modicada estritamente sob esta Licena, com a Verso Modicada no papel de Documento, permitindo assim a distribuio e modicao da Verso Modicada a quem quer que possua uma cpia desta. Alm disso, voc deve executar os seguintes procedimentos na Verso Modicada: * A. Use na Pgina de Ttulo (e nas capas, se alguma) um ttulo distinto do ttulo do Documento, e dos de verses anteriores (os quais devem, se houver algum, ser listados na seo "Histrico"do Documento). Voc pode usar o mesmo ttulo que uma verso prvia se o editor original daquela verso assim o permitir. * B. Liste na Pgina de Ttulo, como autores, uma ou mais pessoas ou entidades responsveis pela autoria ou modicaes na Verso Modicada, juntamente com pelo menos cinco dos autores principais do Documento (todos seus autores principais, se houver menos que cinco), a menos que estes lhe desobriguem desta exigncia. * C. Mencione na Pgina de Ttulo o nome do editor da Verso Modicada, como seu editor. * D. Preserve todas as notas de direitos autorais (copyright) do Documento. * E. Adicione uma nota apropriada de direitos autorais para suas modicaes, adjacente s outras notas de direitos autorais. * F. Inclua, imediatamente aps as notas de direitos autorais, uma nota de licena dando ao pblico permisso para usar a Verso Modicada sob os termos desta Licena, na forma mostrada no Adendo abaixo. * G. Preserve naquela nota de licena a lista completa de Sees Invariantes e Textos de Capa requeridos dados na nota de licena do Documento. * H. Inclua uma cpia inalterada desta Licena. * I. Preserve a seo intitulada "Histrico", preserve seu ttulo, e adicione a esta um item mencionando pelo menos o ttulo, ano, novos autores, e editor da Verso Modicada conforme includo na Pgina de Ttulo. Se no houver uma seo intitulada "Histrico"no Documento, crie uma mencionando o ttulo, ano, autores e editor do Documento como mostrado na Pgina de Ttulo, em seguida adicione um item descrevendo a Verso Modicada como mencionado na sentena anterior. * J. Preserve o endereo de rede, se algum, dado no Documento para acesso pblico a uma cpia Transparente deste e, da mesma maneira, os endereos de rede dados no Documento para verses prvias nas quais este se baseia. Estes podem ser colocados na seo "Histrico". Voc pode omitir um endereo de rede para um trabalho que foi publicado pelo menos quatro anos antes do Documento em si, ou se o editor original da verso qual o endereo se refere der permisso. * K. Para qualquer seo intitulada "Agradecimentos"ou "Dedicatria", preserve o ttulo da seo, e preserve dentro da seo toda a substncia e tom de cada um dos agradecimentos e/ou dedicatrias l mencionados. * L. Preserve todas as Sees Invariantes do Documento, inalteradas no seu texto e ttulos. Nmeros de seo ou o equivalente no so considerados parte dos ttulos das sees. * M. Apague qualquer seo intitulada "Apoio". Tal seo no ser includa na Verso Modicada. * N. No modique o ttulo de qualquer seo a ser intitulada "Apoio"ou que resulte em conito com ttulo de qualquer Seo Invariante. Guedes, Maurilio SDL Passo-a-Passo

APNDICE B. LICENA PBLICA DE DOCUMENTOS

39

* O. Preserve quaisquer notas de garantia. Se a Verso Modicada incluir novas sees iniciais ou apndices que sejam qualicados como Sees Secundrias, e no contiver material copiado do Documento, voc pode, a seu critrio, tornar algumas dessas ou todas essas sees em invariantes. Para fazer isso, adicione seus ttulos lista de Sees Invariantes na nota de licena da Verso Modicada. Estes ttulos devem ser distintos de quaisquer outros ttulos de sees. Voc pode incluir uma seo intitulada "Apoio", dado que ela contenha nada alm de apoio recebido para sua Verso Modicada por vrias fontes por exemplo, notas do revisor ou de que o texto foi aprovado por uma organizao como a denio autoritativa de um padro. Voc pode adicionar uma passagem de at cinco palavras como Texto de Capa Frontal, e uma passagem de at 25 palavras como Texto de Quarta Capa, ao m da lista de Textos de Capa na Verso Modicada. Somente uma passagem de Texto de Capa Frontal e uma de Texto de Quarta Capa pode ser adicionado por (ou atravs de arranjos feitos por) uma entidade qualquer. Se o Documento j incluir um texto de capa para a mesma capa, previamente includo por voc ou por arranjo feito pela mesma entidade em cujo nome voc est agindo, voc no pode adicionar outro; mas voc pode substituir o antigo, com permisso explcita do editor anterior, que o incluiu. O(s) autor(es) e editor(es) do Documento, por esta Licena, no do permisso para seus nomes serem usados para publicidade ou defesa ou apoio implcito para qualquer Verso Modicada. 5. COMBINANDO DOCUMENTOS Voc pode combinar o documento com outros documentos publicados sob esta Licena, sob os termos denidos na seo 4 acima para verses modicadas, desde que voc inclua na combinao todas as Sees Invariantes de todos os documentos originais, sem modicaes, e as liste como Sees Invariantes de seu trabalho combinado, na sua nota de licena, e que voc preserve todas as Notas de Garantia. O trabalho combinado somente precisa conter uma cpia desta Licena, e mltiplas Sees Invariantes idnticas podem ser substitudas por uma nica cpia. Se houver mltiplas Sees Invariantes com o mesmo nome, porm com contedos diferentes, torne o ttulo de cada uma destas sees nico, adicionando ao m dele, entre parnteses, o nome do autor ou editor original desta seo, se conhecido, ou ento um nmero nico. Faa o mesmo ajuste nos ttulos de seo na lista de Sees Invariantes na nota de licena do trabalho combinado. Na combinao, voc deve combinar quaisquer sees intituladas "Histrico"nos vrios documentos originais, formando uma seo intitulada "Histrico"; do mesmo modo, combine quaisquer sees intituladas "Agradecimentos", e quaisquer sees intituladas "Dedicatria". Voc deve apagar todas as sees intituladas "Apoio". 6. COLEES DE DOCUMENTOS Voc pode fazer uma coleo consistindo do Documento e outros documentos publicados sob esta Licena, e substituir as cpias individuais desta Licena, nos vrios documentos, por uma nica cpia a ser includa na coleo, desde que voc siga as regras desta Licena para cpias literais de cada documento em todos os outros aspectos. Voc pode extrair um nico documento desta coleo, e distribu-lo individualmente sob esta Licena, desde que voc insira uma cpia desta Licena no documento extrado, e siga esta Licena em todos os outros aspectos com relao cpia literal do documento. 7. AGREGAO A TRABALHOS INDEPENDENTES Guedes, Maurilio SDL Passo-a-Passo

APNDICE B. LICENA PBLICA DE DOCUMENTOS

40

Uma compilao do Documento ou seus derivados com outros documentos ou trabalhos separados e independentes, dentro de ou junto a um volume de um meio de armazenagem ou distribuio, congura um "agregado"se os direitos autorais resultantes da compilao no forem usados para limitar os direitos legais dos usurios desta alm do que os trabalhos individuais permitem. Quando o Documento includo em um agregado, esta Licena no se aplica aos outros trabalhos no agregado que no forem, por sua vez, derivados do Documento. Se o requerimento do Texto de Capa da seo 3 for aplicvel a estas cpias do documento, ento, se o Documento for menor que metade do agregado inteiro, os Textos de Capa do Documento podem ser colocados em capas que encerrem o Documento dentro do agregado, ou o equivalente eletrnico das capas se o Documento estiver em formato eletrnico. Do contrrio, eles devem aparecer como capas impressas que envolvam o agregado inteiro. 8. TRADUES Uma traduo considerada como sendo um tipo de modicao, ento voc pode distribuir tradues do Documento sob os termos da seo 4. A substituio de Sees Invariantes por tradues requer permisso especial dos detentores dos direitos autorais, embora voc possa incluir tradues de algumas ou todas as Sees Invariantes juntamente s verses originais destas. Voc pode incluir uma traduo desta Licena, e todas as notas de licena no Documento, e qualquer Nota de Garantia, desde que voc tambm inclua a verso original em Ingls desta Licena e as verses originais das notas de licena e garantia. Em caso de discordncia entre a traduo e a verso original desta Licena ou nota de licena ou garantia, a verso original prevalecer. Se uma seo no Documento for intitulada "Agradecimentos", "Dedicatria", ou "Histrico", o requerimento (seo 4) de Preservar seu Ttulo (seo 1) tipicamente exigir a mudana do ttulo em si. 9. TRMINO Voc no pode copiar, modica, sub-licenciar, ou distribuir o Documento exceo do modo expressamente provido por esta Licena. Qualquer outra tentativa de copiar, modicar, sub-licenciar ou distribuir o Documento anulada, e implicar em trmino automtico de seus direitos sob esta Licena. Contudo, as partes que receberam cpias, ou direitos, de voc sob esta Licena no tero suas licenas terminadas enquanto tais partes permanecerem em total acordo com a Licena. 10. REVISES FUTURAS DESTA LICENA A Free Software Foundation pode publicar novas verses revisadas da Licena de Documentao Livre GNU de tempos em tempos. Tais verses sero similares em esprito verso presente, embora possam diferir em detalhes para abordar novos problemas ou questes. Veja http://www.gnu.org/copyleft/. A cada verso da Licena dado um nmero de verso distinto. Se o Documento especicar que um nmero de verso particular desta Licena "ou qualquer verso posterior"se aplica a ele, voc tem a opo de seguir os termos e condies ou da verso especicada ou de qualquer verso posterior que tenha sido publicada (no como rascunho) pela Free Software Foundation. Se o documento no especicar um nmero de verso desta Licena, voc pode escolher qualquer verso j publicada (no como rascunho) pela Free Software Foundation.

Guedes, Maurilio

SDL Passo-a-Passo

APNDICE B. LICENA PBLICA DE DOCUMENTOS

41

B.2

GNU Free Documentation License

Version 1.2, November 2002 Copyright (C) 2000,2001,2002 Free Software Foundation, Inc. 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document "free"in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A "Modied Version"of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modications and/or translated into another language. A "Secondary Section"is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Documents overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections"are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not t the above denition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The "Cover Texts"are certain short passages of text that are listed, as Front-Cover Texts or Guedes, Maurilio SDL Passo-a-Passo

APNDICE B. LICENA PBLICA DE DOCUMENTOS

42

Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A "Transparent"copy of the Document means a machine-readable copy, represented in a format whose specication is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent le format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modication by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent"is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modication. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machinegenerated HTML, PostScript or PDF produced by some word processors for output purposes only. The "Title Page"means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page"means the text near the most prominent appearance of the works title, preceding the beginning of the body of the text. A section "Entitled XYZ"means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specic section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title"of such a section when you modify the Document means that it remains a section "Entitled XYZ"according to this denition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY

Guedes, Maurilio

SDL Passo-a-Passo

APNDICE B. LICENA PBLICA DE DOCUMENTOS

43

If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Documents license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to t legibly, you should put the rst ones listed (as many as t reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modied Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modied Version under precisely this License, with the Modied Version lling the role of the Document, thus licensing distribution and modication of the Modied Version to whoever possesses a copy of it. In addition, you must do these things in the Modied Version: * A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. * B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modications in the Modied Version, together with at least ve of the principal authors of the Document (all of its principal authors, if it has fewer than ve), unless they release you from this requirement. * C. State on the Title page the name of the publisher of the Modied Version, as the publisher. * D. Preserve all the copyright notices of the Document. * E. Add an appropriate copyright notice for your modications adjacent to the other copyright notices. * F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modied Version under the terms of this License, in the form shown in the Addendum below. * G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Documents license notice. * H. Include an unaltered copy of this License. * I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modied Version as given on the Title Page. If there is no section Guedes, Maurilio SDL Passo-a-Passo

APNDICE B. LICENA PBLICA DE DOCUMENTOS

44

Entitled "History"in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modied Version as stated in the previous sentence. * J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History"section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. * K. For any section Entitled "Acknowledgements"or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. * L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. * M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modied Version. * N. Do not retitle any existing section to be Entitled "Endorsements"or to conict in title with any Invariant Section. * O. Preserve any Warranty Disclaimers. If the Modied Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modied Versions license notice. These titles must be distinct from any other section titles. You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modied Version by various partiesfor example, statements of peer review or that the text has been approved by an organization as the authoritative denition of a standard. You may add a passage of up to ve words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modied Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modied Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms dened in section 4 above for modied versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodied, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled "History"in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled Guedes, Maurilio SDL Passo-a-Passo

APNDICE B. LICENA PBLICA DE DOCUMENTOS

45

"Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements." 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate"if the copyright resulting from the compilation is not used to limit the legal rights of the compilations users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Documents Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. 8. TRANSLATION Translation is considered a kind of modication, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided for under this License. Any other attempt to copy, modify, sublicense or distribute the Document is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their Guedes, Maurilio SDL Passo-a-Passo

APNDICE B. LICENA PBLICA DE DOCUMENTOS licenses terminated so long as such parties remain in full compliance. 10. FUTURE REVISIONS OF THIS LICENSE

46

The Free Software Foundation may publish new, revised versions of the GNU Free Documentation License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. See http://www.gnu.org/copyleft/. Each version of the License is given a distinguishing version number. If the Document species that a particular numbered version of this License "or any later version"applies to it, you have the option of following the terms and conditions either of that specied version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation.

Guedes, Maurilio

SDL Passo-a-Passo

Você também pode gostar