システムウィンドウマネージャとインターフェイスするSDLソースコードをブラウズしているときに、struct SDL_VideoDevice
に奇妙なUint8 window_magic
フィールドが発生しました。この分野のドキュメントはないようです。この分野の目的は何ですか?以下の関数/マクロ(すべてSDL_video.c
で定義されています)で役割を果たします。SDLのwindow_magicのポイントは何ですか?
#define CHECK_WINDOW_MAGIC(window, retval) \
if (!_this) { \
SDL_UninitializedVideo(); \
return retval; \
} \
if (!window || window->magic != &_this->window_magic) { \
SDL_SetError("Invalid window"); \
return retval; \
}
SDL_GetWindowWMInfo(SDL_Window * window, struct SDL_SysWMinfo *info)
{
CHECK_WINDOW_MAGIC(window, SDL_FALSE);
if (!info) {
SDL_InvalidParamError("info");
return SDL_FALSE;
}
info->subsystem = SDL_SYSWM_UNKNOWN;
if (!_this->GetWindowWMInfo) {
SDL_Unsupported();
return SDL_FALSE;
}
return (_this->GetWindowWMInfo(_this, window, info));
}
SDL_Window *
SDL_CreateWindow(const char *title, int x, int y, int w, int h, Uint32 flags)
{
...
window->magic = &_this->window_magic;
...
}
_this
が初期化されるSDL_VideoDevice
、へのポインタでありますユーザCA lls SDL_Init
。ユーザーがSDL_CreateWindow
を呼び出すと、SDLはのアドレスにwindow->magic
を割り当てます。私が知る限り、_this->window_magic
は決してSDLのどこにでも初期化されていません。おそらくこの価値の役割は何か?
関連性があるかどうかわからないが、魔法を理解しているとわかっているから、どうやって説明できるのかわからないコードを説明するのに魔法が使用されているhttps://www.google.com/search?q=magic+more +魔法 – Slai