目次 - API(機能別) - ディスプレイとウィンドウ
ディスプレイとウィンドウ
インクルードファイル: SDL_video.h
概要
これらの関数はディスプレイとウィンドウを扱うためのものである.
列挙体
- SDL_BlendMode
- SDL_GLattr
- SDL_GLcontextFlag
- SDL_GLprofile
- SDL_WindowEventID
- SDL_WindowFlags
構造体
- SDL_DisplayMode
- SDL_WindowEvent
関数
- SDL_CreateWindow
- SDL_CreateWindowAndRenderer
- SDL_CreateWindowFrom
- SDL_DestroyWindow
- SDL_DisableScreenSaver
- SDL_EnableScreenSaver
- SDL_GL_BindTexture
- SDL_GL_CreateContext
- SDL_GL_DeleteContext
- SDL_GL_ExtensionSupported
- SDL_GL_GetAttribute
- SDL_GL_GetCurrentContext
- SDL_GL_GetCurrentWindow
- SDL_GL_GetDrawableSize
- SDL_GL_GetProcAddress
- SDL_GL_GetSwapInterval
- SDL_GL_LoadLibrary
- SDL_GL_MakeCurrent
- SDL_GL_ResetAttributes
- SDL_GL_SetAttribute
- SDL_GL_SetSwapInterval
- SDL_GL_SwapWindow
- SDL_GL_UnbindTexture
- SDL_GL_UnloadLibrary
- SDL_GetClosestDisplayMode
- SDL_GetCurrentDisplayMode
- SDL_GetCurrentVideoDriver
- SDL_GetDesktopDisplayMode
- SDL_GetDisplayBounds
- SDL_GetDisplayMode
- SDL_GetDisplayName
- SDL_GetNumDisplayModes
- SDL_GetNumVideoDisplays
- SDL_GetNumVideoDrivers
- SDL_GetVideoDriver
- SDL_GetWindowBrightness
- SDL_GetWindowData
- SDL_GetWindowDisplayIndex
- SDL_GetWindowDisplayMode
- SDL_GetWindowFlags
- SDL_GetWindowFromID
- SDL_GetWindowGammaRamp
- SDL_GetWindowGrab
- SDL_GetWindowID
- SDL_GetWindowMaximumSize
- SDL_GetWindowMinimumSize
- SDL_GetWindowPixelFormat
- SDL_GetWindowPosition
- SDL_GetWindowSize
- SDL_GetWindowSurface
- SDL_GetWindowTitle
- SDL_GetWindowWMInfo
- SDL_HideWindow
- SDL_IsScreenSaverEnabled
- SDL_MaximizeWindow
- SDL_MinimizeWindow
- SDL_RaiseWindow
- SDL_RestoreWindow
- SDL_SetWindowBordered
- SDL_SetWindowBrightness
- SDL_SetWindowData
- SDL_SetWindowDisplayMode
- SDL_SetWindowFullscreen
- SDL_SetWindowGammaRamp
- SDL_SetWindowGrab
- SDL_SetWindowIcon
- SDL_SetWindowMaximumSize
- SDL_SetWindowMinimumSize
- SDL_SetWindowPosition
- SDL_SetWindowSize
- SDL_SetWindowTitle
- SDL_ShowMessageBox
- SDL_ShowSimpleMessageBox
- SDL_ShowWindow
- SDL_UpdateWindowSurface
- SDL_UpdateWindowSurfaceRects
- SDL_VideoInit
- SDL_VideoQuit
SDL Wikiへのリンク
CategoryVideo - SDL Wiki
SDL_RenderCopy()と描画操作で使われるブレンドモードの列挙体
値
SDL_BLENDMODE_NONE | ブレンドしない | dstRGBA = srcRGBA |
SDL_BLENDMODE_BLEND | アルファブレンディング | dstRGB = (srcRGB * srcA) + (dstRGB * (1 - srcA)) dstA = srcA + (dstA * (1 - srcA)) |
SDL_BLENDMODE_ADD | 加算ブレンディング | dstRGB = (srcRGB * srcA) + dstRGB dstA = dstA |
SDL_BLENDMODE_MOD | color modulate | dstRGB = srcRGB * dstRGB dstA = dstA |
関連項目(構造体)
SDL_RendererInfo
関連項目(関数)
SDL_GetRenderDrawBlendMode
SDL_GetSurfaceBlendMode
SDL_GetTextureBlendMode
SDL_RenderCopy
SDL_SetRenderDrawBlendMode
SDL_SetSurfaceBlendMode
SDL_SetTextureBlendMode
SDL Wikiへのリンク
SDL_BlendMode - SDL Wiki
OpenGLの属性の設定のための列挙体
値
SDL_GL_RED_SIZE | カラーバッファの赤色チャネルの最小ビット数. デフォルトは3 |
SDL_GL_GREEN_SIZE | カラーバッファの緑色チャネルの最小ビット数. デフォルトは3 |
SDL_GL_BLUE_SIZE | カラーバッファの青色チャネルの最小ビット数. デフォルトは2 |
SDL_GL_ALPHA_SIZE | カラーバッファのアルファチャネルの最小ビット数. デフォルトは0 |
SDL_GL_BUFFER_SIZE | フレームバッファの最小ビット数. デフォルトは0 |
SDL_GL_DOUBLEBUFFER | シングルか, ダブルバッファか. デフォルトはダブルバッファ |
SDL_GL_DEPTH_SIZE | 深度バッファのビット数. デフォルトは16 |
SDL_GL_STENCIL_SIZE | ステンシルバッファのビット数. デフォルトは0 |
SDL_GL_ACCUM_RED_SIZE | 蓄積バッファの赤色チャネルの最小ビット数. デフォルトは0 |
SDL_GL_ACCUM_GREEN_SIZE | 蓄積バッファの緑色チャネルの最小ビット数. デフォルトは0 |
SDL_GL_ACCUM_BLUE_SIZE | 蓄積バッファの青色チャネルの最小ビット数. デフォルトは0 |
SDL_GL_ACCUM_ALPHA_SIZE | 蓄積バッファのアルファチャネルの最小ビット数. デフォルトは0 |
SDL_GL_STEREO | ステレオ3Dで出力するか. デフォルトはオフ |
SDL_GL_MULTISAMPLEBUFFERS | マルチサンプル アンチエイリアスで使うバッファの数. デフォルトは0. 詳細を参照すること |
SDL_GL_MULTISAMPLESAMPLES | マルチサンプル アンチエイリアスで使うピクセルの周辺のサンプル数. デフォルトは0. 詳細を参照すること |
SDL_GL_ACCELERATED_VISUAL | 1を設定するとハードウェアアクセラレーション, 0を設定すると強制的にソフトウェアレンダリングを使う. デフォルトは両方を許可する |
SDL_GL_RETAINED_BACKING | 未使用 (廃止) |
SDL_GL_CONTEXT_MAJOR_VERSION | OpenGLコンテキストのメジャーバージョン. 詳細を参照すること |
SDL_GL_CONTEXT_MINOR_VERSION | OpenGLコンテキストのマイナーバージョン. 詳細を参照すること |
SDL_GL_CONTEXT_FLAGS | 0個以上のSDL_GLcontextFlag列挙体の要素. デフォルトは0 |
SDL_GL_CONTEXT_PROFILE_MASK | OpenGLコンテキストの種類(Core, Compatibility, ES). SDL_GLprofile列挙体を参照すること. デフォルトは環境に依存する |
SDL_GL_SHARE_WITH_CURRENT_CONTEXT | OpenGLコンテキストのシェア. デフォルトは0 |
SDL_GL_FRAMEBUFFER_SRGB_CAPABLE | sRGBの使用を要求する. デフォルトは0. (SDL 2.0.1以上) |
SDL_GL_CONTEXT_EGL | 未使用 (廃止) |
サンプルコード
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
SDL_GL_SetAttribute(SDL_DOUBLEBUFFER, 1);
SDL_GL_CreateContext(window);
詳細
通常, OpenGLのほとんどの属性は設定できるが, 上記の属性はSDLがOpenGLコンテキストを使うため, ウィンドウを生成する前にわかっている必要がある.
これらの属性はSDL_GL_SetAttribute()とSDL_GL_GetAttribute()で設定, 獲得できる.
これらの属性は最小値の要求の場合がある.
つまりGLは要求したちょうどの値を保障しない.
例えば, 16bitの深度バッファを要求して24bitの深度バッファが設定されることや, ステンシルバッファを使わないように要求したが存在する, ということはありうる.
GLが要求された最小の属性を提供できない場合はコンテキストの生成は必ず失敗する.
しかし, 設定された属性がちょうどであるかを知るためにはチェックしなければならない.
マルチサンプル アンチエイリアシングはフルスクリーンのアンチエイリアシングである.
マルチサンプル アンチエイリアシングはデフォルトではオフだが, SDL_GL_MULTISAMPLEBUFFERSを1, SDL_GL_MULTISAMPLESAMPLESを0以上にするとオンになる. よく使われる値は2と4である.
SDL_GL_CONTEXT_PROFILE_MASKは生成されたコンテキストで決まる.
SDL_GL_CONTEXT_MAJOR_VERSIONとSDL_GL_CONTEXT_MINOR_VERSIONも同じである.
これら3つの属性は最初のウィンドウが生成される前に設定する必要がある.
そして, 通常はSDL_GL_CONTEXT_PROFILE_MASKの値は, 以前の設定で生成したウィンドウを全ての閉じるまでは変更できない.
関連項目(関数)
SDL_GL_GetAttribute
SDL_GL_SetAttribute
SDL_GL_CreateContext
SDL Wikiへのリンク
SDL_GLattr - SDL Wiki
OpenGLコンテキストの設定フラグのための列挙体
値
SDL_GL_CONTEXT_DEBUG_FLAG | 詳細を参照すること |
SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG | 詳細を参照すること |
SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG | 詳細を参照すること |
SDL_GL_CONTEXT_RESET_ISOLATION_FLAG | 詳細を参照すること |
詳細
この列挙体はSDL_GL_SetAttributeでSDL_GL_CONTEXT_FLAGSと組み合わせて使う.
フラグを論理和で複数設定できる.
SDL_GL_CONTEXT_DEBUG_FLAG
このフラグは, X11のGLX_ARB_create_context拡張のGLX_CONTEXT_DEBUG_BIT_ARB, WindowsのWGL_ARB_create_context拡張のWGL_CONTEXT_DEBUG_BIT_ARBにマップされている.
他の環境では同様の機能がないため無視される.
SDL_GL_CONTEXT_FORWARD_COMPATIBLE_FLAG
このフラグは, X11のGLX_ARB_create_context拡張のGLX_CONTEXT_FORWARD_COMPATIBLE_BIT_ARB, WindowsのWGL_ARB_create_context拡張のWGL_CONTEXT_FORWARD_COMPATIBLE_BIT_ARBにマップされている.
他の環境では同様の機能がないため無視される.
SDL_GL_CONTEXT_ROBUST_ACCESS_FLAG
このフラグは, X11ではGLX_ARB_create_context_robustness拡張のGLX_CONTEXT_ROBUST_ACCESS_BIT_ARB, WindowsではWGL_ARB_create_context_robustness拡張のWGL_CONTEXT_ROBUST_ACCESS_BIT_ARBにマップされている.
他の環境では同様の機能がないため無視される.
SDL_GL_CONTEXT_RESET_ISOLATION_FLAG
このフラグは, X11ではGLX_ARB_robustness_isolation拡張のGLX_CONTEXT_RESET_ISOLATION_BIT_ARB, WindowsではWGL_ARB_create_context_robustness拡張のWGL_CONTEXT_RESET_ISOLATION_BIT_ARBにマップされている.
他の環境では同様の機能がないため無視される.
関連項目(列挙体)
SDL_GLattr
関連項目(関数)
SDL_GL_GetAttribute
SDL_GL_SetAttribute
SDL Wikiへのリンク
SDL_GLcontextFlag - SDL Wiki
OpenGLプロファイルのための列挙体
値
SDL_GL_CONTEXT_PROFILE_CORE | OpenGL コアプロファイル - 廃止された機能は無効になる |
SDL_GL_CONTEXT_PROFILE_COMPATIBILITY | Open GL 互換プロファイル - 廃止された機能は許可される |
SDL_GL_CONTEXT_PROFILE_ES | Open GL プロファイル - OpenGLのサブセット機能のみ使える |
詳細
この列挙体はSDL_GL_SetAttributeでSDL_GL_CONTEXT_PROFILE_MASKと組み合わせて使う.
SDL_GL_CONTEXT_PROFILE_MASKは論理和で複数設定できるが, プロファイルは排他的であり, SDL_GL_SetAttributeは1つしか受け付けない.
SDL_GL_CONTEXT_PROFILE_MASK属性を0にするとプロファイルはSDLが選択する.
OpenGLのプロファイルはバージョンと詳細に関連付けられているため, SDL_GL_CONTEXT_MAJOR_VERSIONとSDL_GL_CONTEXT_MINOR_VERSION属性は必ず一緒に使う必要がある.
OpenGL ES バージョン1.0と1.1のcommonとcommon liteプロファイルを区別する方法はない.
関連項目(列挙体)
SDL_GLattr
関連項目(関数)
SDL_GL_GetAttribute
SDL_GL_SetAttribute
SDL Wikiへのリンク
SDL_GLcontextFlag - SDL Wiki
ウィンドウイベントのための列挙体
値
SDL_WINDOWEVENT_NONE | (この値が使われることはない) |
SDL_WINDOWEVENT_SHOWN | ウィンドウが見えるようになった |
SDL_WINDOWEVENT_HIDDEN | ウィンドウが見えないようになった |
SDL_WINDOWEVENT_EXPOSED | ウィンドウが現れた. 再描画する必要がある |
SDL_WINDOWEVENT_MOVED | ウィンドウがdata1からdata2へ移動した |
SDL_WINDOWEVENT_RESIZED | ウィンドウの大きさがdata1×data2になった. このイベントは常にSDL_WINDOWEVENT_SIZE_CHANGEDの前に発生する |
SDL_WINDOWEVENT_SIZE_CHANGED | ウィンドウの大きさが変わった. APIの呼び出しの結果とユーザが大きさを変えた場合の両方がある. このイベントは, 大きさが外部の要因, 例えばユーザやウィンドウマネージャで変えられた場合, SDL_WINDOWEVENT_RESIZEDイベントの後に発生する. |
SDL_WINDOWEVENT_MINIMIZED | ウィンドウが最小化された |
SDL_WINDOWEVENT_MAXIMIZED | ウィンドウが最大化された |
SDL_WINDOWEVENT_RESTORED | ウィンドウが通常の大きさと位置になった |
SDL_WINDOWEVENT_ENTER | ウィンドウがマウスのフォーカスを得た |
SDL_WINDOWEVENT_LEAVE | ウィンドウがマウスのフォーカスを失った |
SDL_WINDOWEVENT_FOCUS_GAINED | ウィンドウがキーボードのフォーカスを得た |
SDL_WINDOWEVENT_FOCUS_LOST | ウィンドウがキーボードのフォーカスを失った |
SDL_WINDOWEVENT_CLOSE | ウィンドウマネージャが閉じることを要求した |
関連項目(構造体)
SDL_WindowEvent
関連項目(関数)
SDL_GetWindowID
SDL_GetWindowFromID
SDL Wikiへのリンク
SDL_WindowEventID - SDL Wiki
ウィンドウの状態のための列挙体
値
SDL_WINDOW_FULLSCREEN | フルスクリーン |
SDL_WINDOW_FULLSCREEN_DESKTOP | 現在のデスクトップの解像度でフルスクリーン |
SDL_WINDOW_OPENGL | OpenGLコンテキストで使用 |
SDL_WINDOW_SHOWN | 見えている |
SDL_WINDOW_HIDDEN | 見えていない |
SDL_WINDOW_BORDERLESS | 枠がない |
SDL_WINDOW_RESIZABLE | 大きさを変えられる |
SDL_WINDOW_MINIMIZED | 最小化されている |
SDL_WINDOW_MAXIMIZED | 最大化されている |
SDL_WINDOW_INPUT_GRABBED | 入力のフォーカスがグラブされている |
SDL_WINDOW_INPUT_FOCUS | 入力のフォーカスがある |
SDL_WINDOW_MOUSE_FOCUS | マウスのフォーカスがある |
SDL_WINDOW_FOREIGN | SDL以外によって生成された |
SDL_WINDOW_ALLOW_HIGHDPI | 高DPIモードで生成された (SDL2.0.1以上) |
詳細
SDL_WINDOW_OPENGLフラグはOpenGLを使う準備をする. しかし, ウィンドウを生成した後はOpenGLの関数を呼ぶ前にSDL_GL_CreateContext()でOpenGLコンテキストを生成する必要がある.
関連項目(関数)
SDL_CreateWindow
SDL_GetWindowFlags
SDL_HideWindow
SDL_MaximizeWindow
SDL_MinimizeWindow
SDL_SetWindowFullscreen
SDL_SetWindowGrab
SDL_ShowWindow
SDL Wikiへのリンク
SDL_WindowFlags - SDL Wiki
ディスプレイモードを含む構造体
フィールド
Uint32 | format | SDL_PixelFormatEnumの値の1つ. 詳細を参照すること |
int | w | 幅 |
int | h | 高さ |
int | refresh_rate | リフレッシュレート(Hz), 特定できない場合は0 |
void* | driverdata | ドライバ固有のデータ. 0で初期化する |
関連項目(関数)
SDL_GetClosestDisplayMode
SDL_GetCurrentDisplayMode
SDL_GetDesktopDisplayMode
SDL_GetDisplayMode
SDL_GetNumDisplayModes
SDL_GetWindowDisplayMode
SDL_SetWindowDisplayMode
SDL Wikiへのリンク
SDL_DisplayMode - SDL Wiki
ウィンドウの状態が変化した場合のイベントのデータを含む構造体
フィールド
Uint32 | type | SDL_WINDOWEVENT |
Uint32 | timestamp | イベントのタイムスタンプ |
Uint32 | windowID | 関連のあるウィンドウ |
Uint8 | event | SDL_WindowEventID |
Sint32 | data1 | イベントによって異なるデータ |
Sint32 | data2 | イベントによって異なるデータ |
詳細
SDL_WindowEventはSDL_Event共用体のメンバの1つで, イベントのtypeがSDL_WINDOWEVENTの場合に使う.
イベントのwindowフィールドを経由してアクセスする必要がある.
関連項目(列挙体)
SDL_EventType
SDL_WindowEventID
SDL Wikiへのリンク
SDL_WindowEvent - SDL Wiki
位置, 大きさ, フラグを指定してウィンドウを生成する
構文
SDL_Window* SDL_CreateWindow(const char* title, int x, int y, int w, int h, Uint32 flags)
引数
title | UTF-8でコード化されたウィンドウのタイトル |
x | ウィンドウのX座標, SDL_WINDOWPOS_CENTERED または SDL_WINDOWPOS_UNDEFINED |
y | ウィンドウのY座標, SDL_WINDOWPOS_CENTERED または SDL_WINDOWPOS_UNDEFINED |
w | ウィンドウの幅 |
h | ウィンドウの高さ |
flags | 0 または 1つ以上のSDL_WindowFlagsの論理和 |
戻り値
生成されたウィンドウを戻す.
失敗のときNULLを戻す.
そのときSDL_GetError()を呼んで詳細を知ることができる.
関連項目(関数)
SDL_DestroyWindow
SDL Wikiへのリンク
SDL_CreateWindow - SDL Wiki
ウィンドウとデフォルトのレンダラを生成する
構文
int SDL_CreateWindowAndRenderer(int width, int height, Uint32 window_flags, SDL_Window** window, SDL_Renderer** renderer)
引数
width | ウィンドウの幅 |
height | ウィンドウの高さ |
window_flags | ウィンドウを生成するときに使われるフラグ (SDL_CreateWindowを参照すること) |
window | 生成されたウィンドウを代入するポインタ, 失敗のときはNULL |
renderer | 生成されたレンダラを代入するポインタ, 失敗のときはNULL |
戻り値
正常のとき0, 失敗のとき-1を戻す.
そのときSDL_GetError()を呼んで詳細を知ることができる.
関連項目(関数)
SDL_CreateWindow
SDL_CreateRenderer
SDL Wikiへのリンク
SDL_CreateWindowAndRenderer - SDL Wiki
既にあるネイティブのウィンドウからSDLのウィンドウを生成する
構文
SDL_Window* SDL_CreateWindowFrom(const void* data)
引数
data | ドライバに依存したウィンドウ生成のためのデータ. 通常はvoid*キャストしたネイティブのウィンドウ |
戻り値
生成されたウィンドウを戻す.
失敗のときNULLを戻す.
そのときSDL_GetError()を呼んで詳細を知ることができる.
関連項目(関数)
SDL_DestroyWindow
SDL Wikiへのリンク
SDL_CreateWindowFrom - SDL Wiki
ウィンドウを破棄する
構文
void SDL_DestroyWindow(SDL_Window* window)
引数
関連項目(関数)
SDL_CreateWindow
SDL_CreateWindowFrom
SDL Wikiへのリンク
SDL_DestroyWindow - SDL Wiki
スクリーンセーバーで画面が切り替わることを防ぐ
構文
void SDL_DisableScreenSaver(void)
詳細
スクリーンセーバーを無効にしても, SDLが終了すれば自動的に再び有効になる.
関連項目(関数)
SDL_EnableScreenSaver
SDL_IsScreenSaverEnabled
SDL Wikiへのリンク
SDL_DisableScreenSaver - SDL Wiki
スクリーンセーバーで画面が切り替わることを認める
構文
void SDL_EnableScreenSaver(void)
関連項目(関数)
SDL_DisableScreenSaver
SDL_IsScreenSaverEnabled
SDL Wikiへのリンク
SDL_EnableScreenSaver - SDL Wiki
OpenGLプリミティブのレンダリングで使うためにOpenGL/ES/ES2テクスチャをカレントコンテキストにバインドする
構文
int SDL_GL_BindTexture(SDL_Texture *texture, float *texw, float *texh)
引数
texture | OpenGL/ES/ES2カレントコンテキストにバインドするテクスチャ |
texw | テクスチャの幅を代入するfloat型の変数へのポインタ, 必要ない場合はNULL |
texh | テクスチャの高さを代入するfloat型の変数へのポインタ, 必要ない場合はNULL |
戻り値
正常のとき0, 操作が対応していないときは-1
詳細
値が得られたなら, texwとtexhには得られたテクスチャに適した幅と高さが代入されている.
ほとんどの場合, 両方の値は1.0である.
しかし, the GL_ARB_texture_rectangle拡張に対応した環境では, これらの値はテクスチャの生成のために使われた実際のピクセル数の幅と高さである.
このことはOpenGLにテクスチャの座標を与える場合に考慮する必要がある.
関連項目(関数)
SDL_GL_UnbindTexture
SDL_GL_MakeCurrent
SDL Wikiへのリンク
SDL_GL_BindTexture - SDL Wiki
OpenGLウィンドウで使うためにOpenGLコンテキストを生成し, カレントコンテキストにする
構文
SDL_GLContext SDL_GL_CreateContext(SDL_Window* window)
引数
戻り値
windowに関連付けられたOpenGLコンテキスト, エラーのときNULLを戻す.
そのときSDL_GetError()を呼んで詳細を知ることができる.
詳細
新たにOpenGLを使うWindowsユーザーは, 歴史的な理由で, OpenGLバージョン1.1で追加されたGL関数はデフォルトでは使えないことに注意しなければならない.
これらの関数は, OpenGL拡張を扱うライブラリ, またはSDL_GL_GetProcAddress()とその関連の関数で実行中に読み込むことができる.
関連項目(関数)
SDL_GL_DeleteContext
SDL_GL_MakeCurrent
SDL Wikiへのリンク
SDL_GL_CreateContext - SDL Wiki
OpenGLコンテキストを削除する
構文
void SDL_GL_DeleteContext(SDL_GLContext context)
引数
関連項目(関数)
SDL_GL_CreateContext
SDL Wikiへのリンク
SDL_GL_DeleteContext - SDL Wiki
カレントコンテキストでOpenGL拡張が対応しているなら真を戻す
構文
SDL_bool SDL_GL_ExtensionSupported(const char* extension)
引数
戻り値
拡張に対応していればSDL_TRUE, していなければSDL_FALSEを戻す
詳細
この関数はカレントコンテキストで動作する.
つまり, コンテキストが生成されていて, 関数が呼ばれる前にカレントである必要がある.
生成したコンテキスト全てが同じように拡張が使える, または既に存在するコンテキストから再生成したとき同じ拡張が使えるとみなしてはならない.
また, 大きな負荷が掛かる可能性がある.
この関数O(1)ではない.
必要なときに毎回この関数を呼ぶのではなく, GLコンテキストを生成した後に取り扱う拡張をチェックしてその情報を保存するべきである.
SDL Wikiへのリンク
SDL_GL_ExtensionSupported - SDL Wiki
カレントコンテキストの属性の現在の値を得る
構文
int SDL_GL_GetAttribute(SDL_GLattr attr, int* value)
引数
attr | 問い合わせる属性 (SDL_GLattr列挙体) |
value | 現在のattrの値を代入する変数へのポインタ |
戻り値
正常のとき0, 失敗のとき負の数を戻す.
そのときSDL_GetError()を呼んで詳細を知ることができる.
関連項目(関数)
SDL_GL_ResetAttributes
SDL_GL_SetAttribute
SDL Wikiへのリンク
SDL_GL_GetAttribute - SDL Wiki
動作中のカレントコンテキストを得る
構文
SDL_GLContext SDL_GL_GetCurrentContext(void)
戻り値
動作中のカレントコンテキストを戻す. 失敗のときNULLを戻す.
そのときSDL_GetError()を呼んで詳細を知ることができる.
関連項目(関数)
SDL_GL_MakeCurrent
SDL Wikiへのリンク
SDL_GL_GetCurrentContext - SDL Wiki
動作中のOpenGLウィンドウを得る
構文
SDL_Window* SDL_GL_GetCurrentWindow(void)
戻り値
成功のとき動作中のOpenGLを, 失敗のときNULLを戻す.
そのときSDL_GetError()を呼んで詳細を知ることができる.
SDL Wikiへのリンク
SDL_GL_GetCurrentWindow - SDL Wiki
(glViewportで使うために)ウィンドウ内の描画領域のサイズを得る
構文
void SDL_GL_GetDrawableSize(SDL_Window* window, int* w, int* h)
引数
window | 描画領域のサイズを求めるウィンドウ |
w | 幅を代入する変数へのポインタ, NULLでもよい |
h | 高さを代入する変数へのポインタ, NULLでもよい |
詳細
高DPI描画領域のレンダリングの場合, 例えば高DPI(AppleではRetinaと呼ばれる)に対応した環境でSDL_WINDOW_ALLOW_HIGHDPIで生成したウィンドウでは, この関数の値とSDL_GetWindowSize()の値はおそらく異なる.
そしてSDL_HINT_VIDEO_HIGHDPI_DISABLEDでは無効にできない.
関連項目(関数)
SDL_GetWindowSize
SDL_CreateWindow
SDL Wikiへのリンク
SDL_GL_GetDrawableSize - SDL Wiki
名前でOpenGLの関数を得る
構文
void* SDL_GL_GetProcAddress(const char* proc)
引数
戻り値
その名前のOpenGL関数へのポインタを戻す.
戻されたポインタはその関数に適したシグニチャでキャストする必要がある.
詳細
GLライブラリを実行中にSDL_GL_LoadLibrary()で読み込んだならば, 全てのGL関数はこの方法で読み出さなければならない.
通常はOpenGL拡張の関数へのポインタを読み出すために使う.
OpenGLの関数を検索するのはいくつかの難点があり, アプリケーションは特に注意を要する.
それでも注意深くコーディングすれば, 環境に依存するコードなしでこれらの難点を扱うことができる.
- Windowsでは関数へのポインタはカレントコンテキストに固有である.
つまりSDL_GL_GetProcAddress()を呼ぶ前にGLコンテキストを生成しカレントにする必要がある.
コンテキストを再生成, または2つ目のコンテキストを生成したとき, 既に存在する関数へのポインタは全て使えないとみなす必要がある.
これは(現在は)Windows固有の制限だが, 実際は多くのドライバにはこの制限はない.
しかし, WGL APIのドキュメントには今でもそのように動作すると記述されていて, これを考慮しなければクラッシュすると考えるべきだ.
関数へのポインタをコピーし保存した場合, そのライフサイクルはコンテキストに従う.
- X11では, この関数が戻す関数へのポインタはあらゆるコンテキストで有効である.
そしてコンテキストを生成する前でも検索できる.
これは少なくともいくつかのOpenGLの実装で, 存在しない関数を検索したとき, 安全では*ない*NULLでない結果を得ることを意味する.
動作中のGLコンテキストで関数が実際に使えるか否かを, SDL_GL_ExtensionSupported()でその拡張の存在をチェックすることや, 使用中のバージョンのOpenGLでその関数が提供されているかを確認することで, 呼ぶ前に常に確認する必要がある.
- 全ての環境で, 対応していない関数の場合はNULLを戻すOpenGLのドライバが存在する.
しかしその動作を期待してはならない.
拡張の存在をチェックしたが, それでもNULLを得たならば, その拡張は使えないとみなすべきだ.
これはドライバのバグかもしれない. しかし, いずれにせよこの方法ならばコードは堅牢になる.
- Linux/UnixであるというだけでX11を使っているとみなしてはならない.
それと置き換わる次世代のディスプレイサーバが待ち構えている.
そしてそれは関数へのポインタも同様かもしれない.
- OpenGL関数へのポインタはサンプルコードのようにAPIENTRYで宣言する必要がある.
これは環境に従った呼出規約であることが保障されていて, (win32で)スタック破壊の問題を避けることができる.
関連項目(関数)
SDL_GL_LoadLibrary
SDL_GL_UnloadLibrary
SDL_GL_ExtensionSupported
SDL Wikiへのリンク
SDL_GL_GetProcAddress - SDL Wiki
カレントコンテキストの交換インターバルを得る
構文
int SDL_GL_GetSwapInterval(void)
詳細
垂直帰線同期が存在しないとき0, バッファ交換が垂直帰線で同期するとき1, 垂直帰線同期に対応していないとき-1を戻す.
そのときSDL_GetError()を呼んで詳細を知ることができる.
関連項目(関数)
SDL_GL_SetSwapInterval
SDL Wikiへのリンク
SDL_GL_GetSwapInterval - SDL Wiki
OpenGLライブラリを動的に読み込む
構文
int SDL_GL_LoadLibrary(const char* path)
引数
path | 環境に依存するOpenGLライブラリの名前の, NULLのときデフォルトのOpenGLライブラリを開く |
戻り値
成功のとき0, 失敗のとき負の数のエラーコードを戻す.
そのときSDL_GetError()を呼んで詳細を知ることができる.
詳細
ビデオドライバを初期化した後だがOpenGLウィンドウを生成する前に行う必要がある.
もしOpenGLライブラリが読み込めなければ最初のOpenGLウィンドウを生成する時点でデフォルトのライブラリが読み込まれる.
もしこれを行ったなら, プログラム内で使う関数は全てSDL_GL_GetProcAddressで動的リンクライブラリから獲得する必要がある.
関連項目(関数)
SDL_GL_GetProcAddress
SDL_GL_UnloadLibrary
SDL Wikiへのリンク
SDL_GL_LoadLibrary - SDL Wiki
OpenGLコンテキストをOpenGLウィンドウにレンダリングするように設定する
構文
int SDL_GL_MakeCurrent(SDL_Window* window, SDL_GLContext context)
引数
window | コンテキストに関連付けるウィンドウ |
context | ウィンドウに関連付けるOpenGLコンテキスト |
戻り値
成功のとき0, 失敗のとき負の数のエラーコードを戻す.
そのときSDL_GetError()を呼んで詳細を知ることができる.
詳細
関連項目(関数)
SDL_GL_CreateContext
SDL Wikiへのリンク
SDL_GL_MakeCurrent - SDL Wiki
OpenGLコンテキストの属性を全て元の値にリセットする
構文
void SDL_GL_ResetAttributes(void)
関連項目(関数)
SDL_GL_GetAttribute
SDL_GL_SetAttribute
SDL Wikiへのリンク
SDL_GL_ResetAttributes - SDL Wiki
ウィンドウを生成する前にOpenGLウィンドウの属性を設定する
構文
int SDL_GL_SetAttribute(SDL_GLattr attr, int value)
引数
attr | 設定するOpenGL属性 |
value | 設定する属性の値 |
戻り値
成功のとき0, 失敗のとき負の数のエラーコードを戻す.
そのときSDL_GetError()を呼んで詳細を知ることができる.
詳細
この関数はOpenGL属性attrの値をvalueに設定する.
属性はOpenGLウィンドウを生成する前に設定する必要がある.
要求した値とは異なることがありうるので, OpenGLコンテキストを生成した後にSDL_GL_GetAttribute()で値をチェックする必要がある.
attrはSDL_GLattr列挙体の値の1つである.
関連項目(関数)
SDL_GL_ResetAttributes
SDL_GL_GetAttribute
SDL Wikiへのリンク
SDL_GL_SetAttribute - SDL Wiki