Tutorial OpenGL v2.0
Finalmente chegou! Após quase 1 ano depois de meu primeiro artigo sobre OpenGL, chegou a versão 2.0. Clique e fique mais Geek.
Parte 2: Inicializando o SDL
Então, segue o primeiro exemplo de um programa usando o SDL + OpenGL:
Salve como "PrimeiraJanela.c" e compile com:
gcc -o PrimeiraJanela PrimeiraJanela.c -lSDL -lGL -lGLU
E vocês deverão ter uma janela como esta:
Bom, se leram os 2 primeiros artigos, não terão muitas dificuldades em entender esse código. Porém, existem novas funções tipo o SDL_GL_SetAttribute, e que no SetVideoMode a 'flag' é SDL_OPENGL, isso indica que o programa deve se preparar para receber a presença do OpenGL.
NOTA: não é tão importante utilizar o SDL_GL_SetAttribute, pois ele já vem com valores pré-definidos, utilizando isso, sobrescrevemos o valor pré-definido. Mas eu recomendo bastante utilizar!
// Inclui a biblioteca SDL
#include <SDL/SDL.h>
// Inclui a biblioteca do SDL que tem o OpenGL
#include <SDL/SDL_opengl.h>
// Função Principal
int main(int argc,char *argv[]){
// Se a inicialização do e o Subsistema de video falhar ...
if(SDL_Init(SDL_INIT_VIDEO) < 0){
// ... imprima a mensagem de erro e ...
printf("Erro : %s
",SDL_GetError());
// ... encerre o programa com 'erro'
return -1;
}
//Define alguns atributos do OpenGL, tais como ...
// Numero minimo de bits da cor Vermelha ;
SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 8 );
// Numero minimo de bits da cor Verde ;
SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 8 );
// Numero minimo de bits da cor Azul ;
SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 8 );
// Tamanho do pixels da cor Alfa ;
SDL_GL_SetAttribute( SDL_GL_ALPHA_SIZE, 8 );
// E o Buffer duplo ( 1 ligado , 0 desligado )
SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
// Cria a Janela
SDL_Surface * tela = SDL_SetVideoMode(400,400,32,SDL_OPENGL);
// Se algum erro acontecer com na criação da Janela...
if(tela == NULL){
// ... imprima o erro ...
printf("Erro : %s
",SDL_GetError());
// ... feche o SDL e ...
SDL_Quit();
// ... encerre o programa com 'erro'
return -1;
}
// Define o título da janela
SDL_WM_SetCaption("Exemplo Básico SDL + OpenGL",NULL);
// Variável para os eventos
SDL_Event evento;
// Controle do Loop
int estaRodando = 1;
// Loop Principal
while(estaRodando){
// Lê a fila de eventos e põe o evento mais antigo em "evento"
while(SDL_PollEvent(&evento)){
// Entre nos tipos de eventos ...
switch(evento.type){
// ... caso o 'X' da janela foi apertado ...
case SDL_QUIT:
// ... então saia do Loop Principal.
estaRodando = 0;
break;
// Outros eventos ....
default:
break;
}
}
// Espera 30 milissegundos para não forçar uso do processador
SDL_Delay(30);
}
// Encerra o SDL
SDL_Quit();
// Nenhum erro ocorrido =D
return 0;
}
Salve como "PrimeiraJanela.c" e compile com:
gcc -o PrimeiraJanela PrimeiraJanela.c -lSDL -lGL -lGLU
E vocês deverão ter uma janela como esta:

NOTA: não é tão importante utilizar o SDL_GL_SetAttribute, pois ele já vem com valores pré-definidos, utilizando isso, sobrescrevemos o valor pré-definido. Mas eu recomendo bastante utilizar!