Заметки за 2020 год

Настройка SDL 2 в Visual Studio 2019 Community

В силу природной лени эксперименты с графическими эффектами я решил продолжить в современном окружении на C++ и использовать SDL2 для вывода графики. В этой заметке покажу процесс настройки окружения. Это будет базовый каркас для дальнейшей работы.

Для начала нужно скачать и установить Visual Studio 2019 Community. Сделать это можно по ссылке https://visualstudio.microsoft.com/ru/vs/. И при установке выбрать пакет «Разработка классических приложений на C++».

И при установке выбрать пакет «Разработка классических приложений на C++».

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

Далее необходимо скачать библиотеку SDL2.

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

Теперь запускаем Visual Studio и создаём новый пустой проект.

Теперь запускаем Visual Studio и создаём новый пустой проект.

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

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

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

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

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

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

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

В следующем окне нажимаем кнопку «Создать строку» и указываем путь до папки `include` библиотеки SDL2.

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

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

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

Там в верхнем окошке пишем `SDL2.lib; SDL2main.lib;`.

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

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

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

Здесь нажимаем кнопку «Создать строку» и указываем путь до папки `lib\\x64` библиотеки SDL2.

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

Теперь окно свойств проекта можно закрыть.

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

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

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

В окне «Свойства системы» нажимаем кнопку «Переменные среды...». Там выбираем переменную «Path» и нажимаем кнопку «Изменить...». В следующем окне нажимаем кнопку «Создать» и выбираем путь к файлу SDL2.dll.

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

Создаём новый элемент проекта.

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

Выбираем файл 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 для запуска программы без отладки.

Затем нажимаем комбинацию `Ctrl+F5` для запуска программы без отладки.

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