Заняття №1 Налаштування та робота з вікнами
Заняття №1
01_hello_SDL.cpp
Буду старатися використовувати розумний менеджмент пам’яті. Тому підключаємо необхідні для цього заголовки.
Створимо структуру яка при вихоід з області видимоті автоматично викличе SDL_Quit().
Це обов’язково. А для початку треба ініціалізувати все, що нам потрібно функцією
SDL_Init(Uint32), яка проініціалізує потрібні нам системи.
SDL_INIT_TIMER | timer subsystem |
SDL_INIT_AUDIO | audio subsystem |
SDL_INIT_VIDEO | video subsystem; automatically initializes the events subsystem |
SDL_INIT_JOYSTICK | joystick subsystem; automatically initializes the events subsystem |
SDL_INIT_HAPTIC | haptic (force feedback) subsystem |
SDL_INIT_GAMECONTROLLER | controller subsystem; automatically initializes the joystick subsystem |
SDL_INIT_EVENTS | events subsystem |
SDL_INIT_EVERYTHING | all of the above subsystems |
Можна ініціалізувати всі потрібні системи одразу, або згодом при необхідності SDL_InitSubSystem(Uint32) ініціалізувати конкретну систему, або зупинити SDL_QuitSubSystem(Uint32) вже не потрібну систему. При виклику SDL_Quit() зупиняються всі системи.
Для вікна ми використаємо розумний вказівник який розглянемо трохи пізніше.
Оголосимо main функцію для різних операційних систем
Нарешті тут ініціалізуємо всі системи у “розумні структурі”
Створюємо вікно функцією SDL_CreateWindow(const char *title, int x, int y, int w, int h, Uint32 flags). Перший параметр це заголовок (назва) вікна і є собою c-string параметром. Інші параметри вказують на позицію та розміри вікна.
| - | - |
|---|---|
| - | - |
| - | - |
| - | - |
| - | - |
|---|---|
| SDL_WINDOW_FULLSCREEN | fullscreen window |
| SDL_WINDOW_OPENGL | window usable with OpenGL context |
| SDL_WINDOW_SHOWN | window is visible |
| SDL_WINDOW_HIDDEN | window is not visible |
| SDL_WINDOW_BORDERLESS | no window decoration |
| SDL_WINDOW_RESIZABLE | window can be resized |
| SDL_WINDOW_MINIMIZED | window is minimized |
| SDL_WINDOW_MAXIMIZED | window is maximized |
| SDL_WINDOW_MOUSE_GRABBED | window has grabbed mouse input |
| SDL_WINDOW_INPUT_FOCUS | window has input focus |
| SDL_WINDOW_MOUSE_FOCUS | window has mouse focus |
| SDL_WINDOW_FULLSCREEN_DESKTOP | |
| SDL_WINDOW_FOREIGN | window not created by SDL |
| SDL_WINDOW_ALLOW_HIGHDPI | window should be created in high-DPI mode if supported. On macOS NSHighResolutionCapable must be set true in the application’s Info.plist for this to have any effect. |
| SDL_WINDOW_MOUSE_CAPTURE | window has mouse captured (unrelated to MOUSE_GRABBED) |
| SDL_WINDOW_ALWAYS_ON_TOP | window should always be above others |
| SDL_WINDOW_SKIP_TASKBAR | window should not be added to the taskbar |
| SDL_WINDOW_UTILITY | window should be treated as a utility window |
| SDL_WINDOW_TOOLTIP | window should be treated as a tooltip |
| SDL_WINDOW_POPUP_MENU | window should be treated as a popup menu |
| SDL_WINDOW_KEYBOARD_GRABBED | window has grabbed keyboard input |
| SDL_WINDOW_VULKAN | window usable for Vulkan surface |
| SDL_WINDOW_METAL | window usable for Metal view |
| SDL_WINDOW_INPUT_GRABBED | equivalent to SDL_WINDOW_MOUSE_GRABBED for compatibility |
Завжди створене вікно по завершеннютреба знищувати SDL_DestroyWindow(SDL_Window*)
Переред початком роботи з вікном потрібно перевірити чи вдалося його створити.
Отримуємо вкзівник на поверхню по якій бужемо малювати
Перевіряємо чи вдалося отримати вказіник на поверхню