目次 - SDL 3.0 API(機能別) - プロパティ - SDL_EnumerateProperties

SDL_EnumerateProperties

プロパティグループのプロパティを列挙する

ヘッダ

SDL3/SDL_properties.h

構文

bool SDL_EnumerateProperties(SDL_PropertiesID props, SDL_EnumeratePropertiesCallback callback, void *userdata);

引数

SDL_PropertiesIDprops問い合わせるプロパティグループ
SDL_EnumeratePropertiesCallbackcallbackそれぞれのプロパティに対して呼ばれる関数
void *userdatacallbackに渡すポインタ

戻り値

(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;
}

SDL Wikiへのリンク

SDL_EnumerateProperties - SDL Wiki