Вывод на экран первого изображения
Это часть руководства о том, как написать Hello World в стиле SDL. Теперь, когда вы установили SDL, самое время написать простейшее графическое приложение, которое загружает и отображает изображение на экране.
//Подключить описания функция и типов данных SDL
#include
В самом верху исходного файла мы подключаем заголовочный файл SDL, для того чтобы мы могли использовать функции и типы данных SDL. Обращаю ваше внимание на то, что некоторым из вас (например тем кто использует Visual Studio) необходимо подключать заголовок SDL. Например так:
#include "SDL.h"
Так что если компилятор жалуется на то, что он не может найти <SDL/SDL.h
>, то либо вы подключаете файл по неправильному пути, либо вы забыли положить SDL.h в нужное место.
int main( int argc, char* args[] )
{
//Изображения
SDL_Surface* hello = NULL;
SDL_Surface* screen = NULL;
В начале функции main(), мы объявляем два указателя на структуры SDL_Surface. SDL_Surface это изображение, и в этом приложении мы собираемся иметь дело с двумя изображениями. Поверхность(surface) "hello" это изображение, которое мы собираемся загружать и отображать. "screen" это то, что будет видно на экране. Когда вы имеете дело с указателями, вы всегда должны их инициализировать. Также, когда вы работаете с SDL, вы должны объявлять вашу функцию main() таким же образом как в коде выше. Вы не можете использовать void main()target="_blank"
или что-то подобное.
//Инициализировать SDL
SDL_Init( SDL_INIT_EVERYTHING );
//Настроить экран
screen = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE );
//Загрузить изображение
hello = SDL_LoadBMP( "hello.bmp" );
Первая функция, которую мы вызываем в main
это SDL_Init()
. Вызов SDL_Init()
инициализирует все подсистемы SDL, поэтому мы можем начать использовать графические функции SDL. Дальше мы вызываем SDL_SetVideoMode()
, которая устанавливает ширину окна в 640 пикселей, высоту в 480 и глубину цвета в 32 бита на пиксель. Последний аргумент(SDL_SWSURFACE) располагает поверхность в программной памяти. Вызов SDL_SetVideoMode()
возвращает указатель на поверхность окна, так что мы теперь можем ее использовать. После того как окно настроено, мы загружаем наше изображений при помощи SDL_LoadBMP()
. SDL_LoadBMP()
принимает в качестве аргумента путь к растровому изображению (bitmap) и возвращает указатель на загруженную SDL_Surface
. В случае ошибки загрузки эта функци вернет NULL
.
//Вывести изображение на экран
SDL_BlitSurface( hello, NULL, screen, NULL );
//Обновить экран
SDL_Flip( screen );
//Пауза
SDL_Delay( 2000 );
Теперь, когда мы настроили наше окно и загрузили изображение, мы хотим вывести загруженное изображение на экран. Мы делаем это при помощи функции SDL_BlitSurface()
.
Первый аргумент SDL_BlitSurface()
это поверхность, которую мы хотим вывести (source, источник). Третий аргумент это поверхность, на которую мы хотим вывести наше изображение (destination, назначение). SDL_BlitSurface()
помещает поверхность источника на поверхность назначения. В нашем случае она собирается вывести наше загруженное изображение на экран. О втором аргументе будет рассказано в последующих частях руководства. Теперь, когда наше изображение расположено на экране, нам нужно обновить экран, чтобы мы могли его увидеть. Мы делаем это используя SDL_Flip()
. Если вы не вызовите SDL_Flip()
, все что вы увидете это черный не обновленный экран. Теперь когда изображение выведено на экран и сделано видимым, нам нужно сделать так, чтобы окно оставалось видимым некоторое время, а не просто моргнуло на мгновение и исчезло. Мы добьемся этого вызовом SDL_Delay()
. Здесь мы делаем задержку на 2000 миллисекунд(2 секунды). Более хороший способ заставить окно оставаться на месте мы узнаем в четвертой части руководства.
//Освободить память из-под загруженного изображения
SDL_FreeSurface( hello );
//Освободить ресурсы занятые SDL
SDL_Quit();
return 0;
}