Заметки за 2020 год
Настройка SDL 2 в Visual Studio 2019 Community
В силу природной лени эксперименты с графическими эффектами я решил продолжить в современном окружении на C++ и использовать SDL2 для вывода графики. В этой заметке покажу процесс настройки окружения. Это будет базовый каркас для дальнейшей работы.
Для начала нужно скачать и установить Visual Studio 2019 Community. Сделать это можно по ссылке https://visualstudio.microsoft.com/ru/vs/. И при установке выбрать пакет «Разработка классических приложений на C++».

Далее необходимо скачать библиотеку SDL2 по ссылке http://libsdl.org/download-2.0.php.

В архиве находятся заголовочные и бинарные файлы библиотеки. Распаковать архив можно в любое место, но лучше если это будет общее хранилище библиотек. Например у меня это c:\Users\Vladimir\source\vclib\SDL2-2.0.14\. Дальнейшие настройки будут учитывать этот путь. У вас он наверняка будет отличаться.
Теперь запускаем Visual Studio и создаём новый пустой проект.

Выбираем 64-битную платформу для сборки.

Переходим в настройки свойств проекта.

Выбираем «Каталоги VC++» затем «Включаемые каталоги» и нажав справа кнопку выбираем «Изменить…»

В следующем окне нажимаем кнопку «Создать строку» и указываем путь до папки include библиотеки SDL2. У меня это C:\Users\Vladimir\source\vclib\SDL2-2.0.14\include. И подтверждаем выбор нажатием на «OK».

Теперь переходим в «Компоновщик» → «Ввод» → «Дополнительные зависимости». Нажав справа кнопку выбираем «Изменить…».

Там в верхнем окошке пишем SDL2.lib; SDL2main.lib;. И подтверждаем выбор нажатием на «OK».

Теперь возвращаемся в «Каталоги VC++» и выбираем «Каталоги библиотек». Нажав справа кнопку выбираем «Изменить…».

Здесь нажимаем кнопку «Создать строку» и указываем путь до папки lib\x64 библиотеки SDL2. У меня это C:\Users\Vladimir\source\vclib\SDL2-2.0.14\lib\x64. И подтверждаем выбор нажатием на «OK».

Ещё, чтобы не открывалось консольное окно при запуске, необходимо сменить подсистему для сборки проекта с «Консоль (/SUBSYSTEM:CONSOLE)» на «Windows (/SUBSYSTEM:WINDOWS)». Для этого переходим в «Компоновщик» → «Система» → «Подсистема» и выбираем подсистему Windows.

Теперь окно свойств проекта можно закрыть.
Осталось добавить путь к бинарнику библиотеки SDL2.dll в переменную PATH Windows. Для открытия окна «Свойств системы» нужно нажать комбинацию клавиш «Win + Pause». А в нём выбрать «Дополнительные параметры системы».

В окне «Свойства системы» нажимаем кнопку «Переменные среды…». Там выбираем переменную «Path» и нажимаем кнопку «Изменить…». В следующем окне нажимаем кнопку «Создать» и выбираем путь к файлу SDL2.dll. У меня это c:\Users\Vladimir\source\vclib\SDL2-2.0.14\lib\x64\. И подтверждаем выбор нажатием на «OK».

Настройка завершена. Теперь настало время кода. Создаём новый элемент проекта.

Выбираем файл C++ (.cpp).

Ниже представлен листинг базовой программы, которая будет инициализировать окно и обрабатывать события.
1#include <stdio.h>
2#include <SDL.h>
3
4#define SCR_MULT 1
5#define TEX_SIZE 512
6#define TEX_DIMENSION TEX_SIZE * TEX_SIZE
7
8SDL_Window* window;
9SDL_Renderer* renderer;
10SDL_Texture* texture;
11SDL_Event event;
12
13void* pixels;
14
15void init(void)
16{
17}
18
19void update(void)
20{
21}
22
23void render(void)
24{
25}
26
27int main(int argc, char* argv[])
28{
29 bool run = true;
30 int pitch;
31
32 window = SDL_CreateWindow("SDL2", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, TEX_SIZE * SCR_MULT, TEX_SIZE * SCR_MULT, 0);
33 renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE | SDL_RENDERER_PRESENTVSYNC);
34 texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA32, SDL_TEXTUREACCESS_STREAMING, TEX_SIZE, TEX_SIZE);
35
36 init();
37
38 while (run)
39 {
40 SDL_LockTexture(texture, NULL, &pixels, &pitch);
41
42 update();
43 render();
44
45 SDL_UnlockTexture(texture);
46
47 SDL_RenderClear(renderer);
48 SDL_RenderCopy(renderer, texture, NULL, NULL);
49 SDL_RenderPresent(renderer);
50
51 while (SDL_PollEvent(&event) != 0)
52 {
53 if (event.type == SDL_QUIT)
54 {
55 run = false;
56 }
57 }
58 }
59
60 SDL_DestroyTexture(texture);
61 SDL_DestroyRenderer(renderer);
62 SDL_DestroyWindow(window);
63 SDL_Quit();
64
65 return 0;
66}Нажимаем F7 для сборки проекта. Если всё было сделано правильно, то ошибок быть не должно. Затем нажимаем комбинацию Ctrl+F5 для запуска программы без отладки.

В последующих заметках на эту тему я буду добавлять всякое в методы init(), update() и render(). Рисовать дичь в текстуру и выводить её в окно. Будет весело.