Why Use SDL_GetWindowFromID()?
Why should I use SDL_GetWindowFromID() instead of passing the SDL_Window*?
SDL_GetWindowFromID() is particularly useful in scenarios where you are managing multiple windows and only have the window ID, not the pointer. While passing a SDL_Window* directly is simpler, here's why you might prefer using SDL_GetWindowFromID():
Events Are Window ID-Based
When handling SDL events, window-related events, like SDL_WINDOWEVENT, provide only the window ID (event.window.windowID). To interact with the corresponding window, you must use SDL_GetWindowFromID() to retrieve its pointer.
Safety
Using window IDs ensures that you're accessing the correct window, especially if windows are dynamically created and destroyed. A pointer might become invalid if the window it references is destroyed.
Example Usage
Here's an example where we get a window ID from an SDL_Window*, and an SDL_Window* from a window ID:
#include <SDL.h>
#include <iostream>
int main() {
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
std::cerr << "SDL Init Error: "
<< SDL_GetError() << "\n";
return -1;
}
SDL_Window* window = SDL_CreateWindow(
"Window Example",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
400, 300,
SDL_WINDOW_SHOWN
);
if (!window) {
std::cerr << "Window Creation Error: "
<< SDL_GetError() << "\n";
SDL_Quit();
return -1;
}
Uint32 windowID = SDL_GetWindowID(window);
SDL_Window* retrieved =
SDL_GetWindowFromID(windowID);
if (retrieved == window) {
std::cout << "Successfully retrieved "
"the window from ID!\n";
}
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}Successfully retrieved the window from ID!Using IDs is safer and integrates better with SDL's event-driven architecture.
Window Opacity
Discover how to use SDL2 functions for controlling and retrieving window transparency settings.