Форум программистов, компьютерный форум, киберфорум
Rem_
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

Hello SDL: Ваше первое окно

Запись от Rem_ размещена 24.08.2015 в 02:00
Показов 5252 Комментарии 0

Вольный перевод всеми известного урока от http://lazyfoo.net/tutorials/S... index2.php

После настройки SDL создадим простое окно для будущей программы.
Сейчас все функции находятся внутри main, но в следующих туторах они будут вынесены.
Код сразу пихаю целиком и полностью. Не надо ничего качать. Просто копипастите и пробуйте собирать.
Кликните здесь для просмотра всего текста
C
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
47
48
49
50
51
52
53
54
55
56
57
/*This source code copyrighted by Lazy Foo' Productions (2004-2015)
and may not be redistributed without written permission.
Спасибо, Лейзи, извини.*/
 
//Using SDL and standard IO
#include <SDL.h>
#include <stdio.h>
 
//Screen dimension constants
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
 
int main( int argc, char* args[] )
{
    //The window we'll be rendering to
    SDL_Window* window = NULL;
 
    //The surface contained by the window
    SDL_Surface* screenSurface = NULL;
 
    //Initialize SDL
    if( SDL_Init( SDL_INIT_VIDEO ) < 0 )
    {
        printf( "SDL could not initialize! SDL_Error: %s\n", SDL_GetError() );
    }
    else
    {
        //Create window
        window = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
        if( window == NULL )
        {
            printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() );
        }
        else
        {
            //Get window surface
            screenSurface = SDL_GetWindowSurface( window );
 
            //Fill the surface white
            SDL_FillRect( screenSurface, NULL, SDL_MapRGB( screenSurface->format, 0xFF, 0xFF, 0xFF ) );
 
            //Update the surface
            SDL_UpdateWindowSurface( window );
 
            //Wait two seconds
            SDL_Delay( 2000 );
        }
    }
 
    //Destroy window
    SDL_DestroyWindow( window );
 
    //Quit SDL subsystems
    SDL_Quit();
 
    return 0;
}

А теперь описание.
В первых строчках мы подключаем сам SDL и стандартную библиотеку ввода вывода. Вдруг будут ошибки, они напечатаются в консоли. Си плюсовики могут использовать iostream.
Глобально объявляем размеры нашего будущего окна. 640*480

Объявлять main нужно строго с аргументами для совместимости платформ - int main( int argc, char* args[] )
Затем мы объявляем окно и поверхность. В SDL_Surface может быть загружено 2d изображение из файла и показано внутри окна.

После объявления переменных инициализируем SDL. Без этого не будет работать ни одна функция. Инициализировать можно несколько подсистем, но сейчас нам нужна только SDL_INIT_VIDEO. (В будущем могут понадобиться системы для аудио, для таймера, для джойстика и геймпада, а можно сразу все системы запустить флагом SDL_INIT_EVERYTHING)
Если произойдёт ошибка, то вернётся значение -1 и в консоль напишется ошибка.
Если вы никогда не использовали printf раньше.... ( В общем это из чистого си. Знак %s обозначает, что должна напечататься какая-то строка, а SDL_GetError() эту самую ошибку возвращает в виде строки). Очень полезная функция. Сразу видно где и какая произошла неполадка.

После инициализации можно создавать окно SDL_CreateWindow. Первый параметр - заголовок окна. Второй и третий - позиция окна. Так как нам без разницы, то пишем SDL_WINDOWPOS_UNDEFINED, хотя можно поставить 50, 50. Следующие два аргумента - ширина и высота окна. Последний флаг SDL_WINDOW_SHOWN отображает окно после создания. Если произойдёт ошибка, она напечатается в консоль.

Когда окно успешно создано, мы должны получить поверхность окна, чтоб рисовать на нём. SDL_GetWindowSurface делает это.
Самое простое что мы можем сделать это залить всё окно белым прямоугольником используя SDL_FillRect.
Важно знать про рендеринг. Пока вы рисуете что-нибудь на поверхности, вы этого не увидите. Только после всех операций рисования вы должны обновить окно, чтоб всё отобразилось. Вызовите SDL_UpdateWindowSurface чтоб сделать это.

Мы создали окно, залили его белым, обновили показали. Всё что мы увидим, это мельком показанное окно и оно сразу закроется. Используем SDL_Delay для задержки. Задержка измеряется в миллисекундах, поэтому SDL_Delay( 2000 ) будет держать окно в течение двух секунд.
Важно. Во время использования SDL_Delay невозможно принимать данные с клавиатуры или с мышки. В этом примере не используются ни клава ни мышь, поэтому пусть так будет.

После задержки мы закрываем окно, высвобождаем его из памяти. Так же оно освободит и поверхность. Затем мы выходим из SDL и возвращаем значение 0 для завершения программы.
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru