bool SDL_EnumerateProperties(SDL_PropertiesID props, SDL_EnumeratePropertiesCallback callback, void *userdata);
| SDL_PropertiesID | props | 問い合わせるプロパティグループ |
| SDL_EnumeratePropertiesCallback | callback | それぞれのプロパティに対して呼ばれる関数 |
| void * | userdata | callbackに渡すポインタ |
(bool) 成功のとき真, 失敗のとき偽を戻す. SDL_GetError()を呼んで詳細を知ることができる.
コールバック関数はプロパティグループのそれぞれのプロパティに対して呼ばれる. 列挙の最中はプロパティグループはロックされる.
この関数はどのスレッドからも安全に呼べる.
SDL 3.2.0以降
// プログラム例
// SDL3で全てのディスプレイのプロパティを列挙する
#include <SDL3/SDL_log.h>
#include <SDL3/SDL_main.h>
#include <SDL3/SDL_video.h>
static void
my_enumerate_properties_callback(void *userdata, SDL_PropertiesID props, const char *name)
{
SDL_PropertyType prop_type = SDL_GetPropertyType(props, name);
switch (prop_type) {
case SDL_PROPERTY_TYPE_POINTER:
SDL_Log("%sはポインタプロパティ", name);
break;
case SDL_PROPERTY_TYPE_STRING:
SDL_Log("%sは文字列型プロパティで値は%s", name, SDL_GetStringProperty(props, name, ""));
break;
case SDL_PROPERTY_TYPE_NUMBER:
SDL_Log("%sは整数型プロパティで値は%"SDL_PRIs64, name, SDL_GetNumberProperty(props, name, 0));
break;
case SDL_PROPERTY_TYPE_FLOAT:
SDL_Log("%sは浮動小数点型プロパティで値は%f", name, SDL_GetFloatProperty(props, name, 0.0f));
break;
case SDL_PROPERTY_TYPE_BOOLEAN:
SDL_Log("%sはブール型プロパティで値は%d", name, SDL_GetBooleanProperty(props, name, false));
break;
case SDL_PROPERTY_TYPE_INVALID:
default:
SDL_Log("%sは無効なプロパティ", name);
break;
}
}
int
main(int argc, char** argv)
{
if (!SDL_Init(SDL_INIT_VIDEO)) {
SDL_Log("SDLを初期化できなかった: %s", SDL_GetError());
return 0;
}
SDL_Log("SDLを初期化");
int num_displays;
SDL_DisplayID *displays = SDL_GetDisplays(&num_displays);
SDL_Log("%d台のディスプレイを検知した", num_displays);
for(int i = 0; i < num_displays; i++) {
SDL_PropertiesID prop_id = SDL_GetDisplayProperties(displays[i]);
SDL_Log("ディスプレイ%dのプロパティIDは%d", i, prop_id);
if(!SDL_EnumerateProperties(prop_id, my_enumerate_properties_callback, NULL)) {
SDL_Log("プロパティの列挙でエラーが発生した: %s.", SDL_GetError());
}
}
SDL_free(displays);
return 0;
}