Olá pessoal, esta é a sexta lição sobre SDL 2 e saiu pequena, mas vale a pena prosseguir. Todas as lições estão 
aqui .
Nesta lição, desenharemos o desenho de primitivas. Vamos começar e bem-vindo à lição
Primeiro, vamos ver o que é primitivo. Uma primitiva gráfica é o objeto geométrico mais simples exibido na tela: um ponto, um segmento de linha, um retângulo, um arco, um círculo etc. No SDL 2, podemos desenhar apenas pontos, retângulos e linhas.
Vamos ao código
#include <SDL2/SDL.h> #include <iostream> using namespace std; int SCREEN_WIDTH = 640; int SCREEN_HEIGHT = 480; SDL_Window *win = NULL; SDL_Renderer *ren = NULL; 
Não vou descrever a declaração de variáveis, vamos seguir em frente.
 bool init() { bool ok = true; if (SDL_Init(SDL_INIT_VIDEO) != 0) { cout << "Can't init SDL: " << SDL_GetError() << endl; } win = SDL_CreateWindow("", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); if (win == NULL) { cout << "Can't create window: " << SDL_GetError() << endl; ok = false; } ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED); if (ren == NULL) { cout << "Can't create renderer: " << SDL_GetError() << endl; ok = false; } return ok; } 
No 
Init, inicialize o SDL 2, crie uma janela e renderize aqui também, não permaneça.
Eu não escrevo a função 
Load , pois não precisamos carregar nada.
Na função 
Quit , simplesmente removemos a janela, renderizamos e inicializamos o SDL 2.
 void quit() { SDL_DestroyWindow(win); win = NULL; SDL_DestroyRenderer(ren); ren = NULL; SDL_Quit; } 
Vou pular a chamada para a função 
Init e passar para a parte mais interessante. Para desenhar um retângulo, precisamos criar um objeto do tipo 
SDL_Rect . Suas coordenadas e dimensões são necessárias para o desenho.
Um pouco sobre 
SDL_Rect : esse tipo de dado é uma matriz de 4 números: 
x , 
y , 
weh - nessa ordem. Ou seja, este código: 
SDL_Rect rect = {1, 1, 1, 1}; - completamente correto.
Isso completa a teoria sobre 
SDL_Rect, vamos começar a escrever código.
  SDL_SetRenderDrawColor(ren, 0x00, 0x00, 0x00, 0x00); SDL_RenderClear(ren); SDL_SetRenderDrawColor(ren, 0xFF, 0xFF, 0xFF, 0xFF); SDL_Rect rect1 = {10, 10, 50, 50}; SDL_RenderFillRect(ren, &rect1); 
Aqui fomos informados ao render para pintar de preto e preenchê-los com toda a janela. Depois disso, eles disseram para pintar de branco. Em seguida, criamos um retângulo com coordenadas (10; 10) e dimensões 50x50. A função 
SDL_RenderFillRect desenha um retângulo.
Desenhar apenas o contorno do retângulo não é muito diferente.
  SDL_Rect rect2 = {70, 10, 50, 50}; SDL_RenderDrawRect(ren, &rect2); 
Criamos um retângulo e chamamos a função 
SDL_RenderDrawRect . Ela desenha apenas o contorno do retângulo na tela.
O próximo passo é desenhar uma linha.
  SDL_RenderDrawLine(ren, 10, 70, 640 - 10, 70); 
Não é necessário um retângulo para desenhar uma linha. A função 
SDL_RenderDrawLine aceita valores de renderização e quatro coordenadas. Estas são as coordenadas do ponto inicial e final. Decidi desenhar uma linha horizontal recuada das bordas por 10 pixels.
Desenhar pontos quase não é diferente de desenhar linhas. Chamamos a função 
SDL_RenderDrawPoint e passamos a renderização e as coordenadas do ponto. Mas apenas para desenhar um ponto não é interessante, vamos escrever 
para melhor, no qual através de 3 pixels vamos desenhar pontos.
  for (int i = 10; i <= 640-10; i +=4 ) { SDL_RenderDrawPoint(ren, i, 90); } 
Temos uma linha pontilhada horizontal de pontos.
Neste desenho parou. Resta apenas atualizar a tela, definir o tempo de pausa, sair e retornar 
0 .
  SDL_RenderPresent(ren); SDL_Delay(5000); quit(); return 0; } 
Isso conclui nossa lição, eis o código completo:
 #include <SDL2/SDL.h> #include <iostream> using namespace std; int SCREEN_WIDTH = 640; int SCREEN_HEIGHT = 480; SDL_Window *win = NULL; SDL_Renderer *ren = NULL; bool init() { bool ok = true; if (SDL_Init(SDL_INIT_VIDEO) != 0) { cout << "Can't init SDL: " << SDL_GetError() << endl; } win = SDL_CreateWindow("", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); if (win == NULL) { cout << "Can't create window: " << SDL_GetError() << endl; ok = false; } ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_ACCELERATED); if (ren == NULL) { cout << "Can't create renderer: " << SDL_GetError() << endl; ok = false; } return ok; } void quit() { SDL_DestroyWindow(win); win = NULL; SDL_DestroyRenderer(ren); ren = NULL; SDL_Quit; } int main (int arhc, char ** argv) { if (!init()) { quit(); system("pause"); return 1; } SDL_SetRenderDrawColor(ren, 0x00, 0x00, 0x00, 0x00); SDL_RenderClear(ren); SDL_SetRenderDrawColor(ren, 0xFF, 0xFF, 0xFF, 0xFF); SDL_Rect rect1 = {10, 10, 50, 50}; SDL_RenderFillRect(ren, &rect1); SDL_Rect rect2 = {70, 10, 50, 50}; SDL_RenderDrawRect(ren, &rect2); SDL_RenderDrawLine(ren, 10, 70, 640 - 10, 70); for (int i = 10; i <= 640-10; i +=4 ) { SDL_RenderDrawPoint(ren, i, 90); } SDL_RenderPresent(ren); SDL_Delay(5000); quit(); return 0; } 
E eu digo adeus a você, tchau a todos!
<< Lição anterior || Próxima lição 
>>