
ビデオ ゲーム開発やクロス プラットフォーム マルチメディア アプリケーションに携わっている方であれば、おそらく SDL について聞いたことがあるでしょう。 到着 de SDL3.4このライブラリは、グラフィックス機能、プラットフォームサポート、そしてデスクトップ、Web、モバイルデバイスにおけるユーザーエクスペリエンスを向上させるツールの面で、飛躍的な進歩を遂げています。これは決して小さなアップデートではなく、2Dレンダリングエンジンや3D GPU APIから、オーディオ処理、ドライバー、ペン入力、最新のLinuxシステムなど、あらゆる機能を網羅しています。
SDL 3は進化を続けていますが、 3.4は非常に堅実なバージョンとして登場している 新規プロジェクトや進行中のプロジェクトにおいて、パフォーマンスの向上、新しいAPI、そしてEmscripten、Wayland、Vision Pro、さらにはPlayStation 2といった環境とのより優れた統合といったメリットを、特定のコンテキストにおいて活用できるよう設計されています。SDL 3.4の新機能、それがあなたの次のプロジェクトにとってなぜ重要なのか、そしてSDL 3.4を最大限に活用するために留意すべき技術的な詳細について、詳しく見ていきましょう。
SDL 3.4の最も重要な新機能
SDL 3.4の主な作業は、 3Dと2Dの相互運用性を向上させるこれは、2Dインターフェースと3Dコンテンツを融合するゲームエンジンやアプリケーションにとって重要な機能です。これまで、両レイヤーの統合には開発者の作業負担が増大していましたが、このバージョンでは、このプロセスを容易にする新しいユーティリティとプロパティが導入されています。
グラフィックに加えて、このアップデートには PNG画像のネイティブサポート入力システム(マウス、スタイラス、ジェスチャー、オンスクリーンキーボード)に顕著な改善が加えられ、Windows、macOS、Linux、Emscripten、iOS、visionOS、その他あまり一般的ではないプラットフォーム向けに多数の変更が加えられています。Steamエコシステムとそのランタイムとの統合も改良されており、これはLinuxゲームやSteam配信を目的としたクロスプラットフォーム開発にとって非常に重要です。
3D GPU APIと2Dレンダリング間の相互運用性
SDL 3.4の強みの一つは、 3Dと2Dの統合このライブラリは、GPU ベースの 2D レンダラーを作成し、GPU テクスチャと SDL によって処理されるピクセル形式間で情報を交換するための新しい関数を導入します。
- 追加します SDL_CreateGPURenderer() 基盤となる GPU API を活用する 2D レンダラーを作成します。
- とともに SDL_GetGPURendererDevice() そのレンダラーに関連付けられている GPU デバイスを取得できます。
- 彼らは参加します SDL_CreateGPURenderState()、SDL_SetGPURenderStateFragmentUniforms()、SDL_SetGPURenderState()、および SDL_DestroyGPURenderState() を使用して、2D GPU レンダリング内でフラグメント シェーダーを操作します。
- 今彼らは入院している YUVテクスチャとHDRカラースペース GPU ベースの 2D レンダラーでは、特にハイエンドのビデオやコンテンツに興味深い機能があります。
また、次のような機能も組み込まれています。 SDL_GetGPUデバイスプロパティ()これは、デバイス名、ドライバ名とバージョン、および互換性や診断の判断に関連するその他の情報を含むGPUデバイスのプロパティを返します。さらに、`SDL_GetPixelFormatFromGPUTextureFormat()` と `SDL_GetGPUTextureFormatFromPixelFormat()` は、GPUテクスチャ形式とSDLピクセル形式間の変換を容易にします。
並行して、プロパティが含まれています SDL_PROP_TEXTURE_CREATE_GPU_TEXTURE_POINTER 既存のGPUテクスチャから2Dテクスチャを作成するには、SDL_PROP_TEXTURE_GPU_TEXTURE_POINTERを使用します。また、2D GPUレンダラーを使用する場合は、2Dテクスチャに関連付けられたGPUテクスチャを取得するには、SDL_PROP_TEXTURE_GPU_TEXTURE_POINTERを使用します。このアプローチにより、GPU APIで生成されたコンテンツと従来のSDL 2Dパイプラインを混在させる際の摩擦が大幅に軽減されます。
2Dレンダリングとテクスチャ処理の改善
SDL 3.4は単なる相互運用性を超え、次のような特定の機能を追加します。 2Dレンダリングの品質と制御を微調整するたとえば、SDL_RenderTexture9GridTiled() が導入され、テクスチャをストレッチするのではなく「タイル」モードで 9 グリッド レンダリングが可能になり、インターフェイス要素やフレームの変形を回避できるようになりました。
テクスチャのスケールを管理するために、以下が追加されます SDL_GetDefaultTextureScaleMode() SDL_SetDefaultTextureScaleMode()は、新しいテクスチャのデフォルトのスケーリングモードを設定できます。これに関連するのは、SDL_GetRenderTextureAddressMode()とSDL_SetRenderTextureAddressMode()、そして定数SDL_TEXTURE_ADDRESS_WRAPです。これらは、 テクスチャラップサポート レンダラーがラッピングをサポートしていることを示す場合 (SDL_PROP_RENDERER_TEXTURE_WRAPPING_BOOLEAN)。
レトロな美学を持つゲームにとって非常に興味深い新機能は SDL_SCALEMODE_PIXELARTピクセル アート用に設計されたスケーリング アルゴリズムで、他のフィルタリング モードの典型的なぼかしを回避し、画像を大幅に拡大した場合でも明確なエッジを維持します。
協力する可能性もあります テクスチャパレットSDL_SetTexturePalette() と SDL_GetTexturePalette() を使用すると、テクスチャ内のパレットを割り当てたり照会したりできます。これは、古いグラフィック スタイルを再作成する場合や、特定のメモリと帯域幅のフローを最適化する場合に役立ちます。
サーフェスに関しては、SDL 3.4では SDL_回転サーフェス() サーフェスの回転コピーを作成するには、SDL_FLIP_HORIZONTAL_AND_VERTICAL を追加して、サーフェスを両軸で同時に反転します。さらに、SDL_PROP_SURFACE_ROTATION_NUMBER プロパティ(最終リリース候補版の変更で SDL_PROP_SURFACE_ROTATION_FLOAT に置き換えられました)を使用して、カメラ画像を正しく表示するために必要な角度を指定します。
ネイティブPNGサポートとサーフェスロード
実用性に関して最も歓迎すべき改善点の一つは、SDL 3.4に含まれる PNGのネイティブサポート...多くの場合、外部ライブラリに頼ることなく、多くの作業を簡素化できます。 小規模プロジェクト そしてプロトタイプ。
- SDL_LoadPNG() SDL_LoadPNG_IO() を使用すると、PNG 画像をサーフェスとして直接読み込むことができます。
- SDL_SavePNG() SDL_SavePNG_IO() はサーフェスを PNG 形式で保存するために使用されます。
- とともに SDL_LoadSurface() SDL_LoadSurface_IO() は、ファイルが BMP か PNG かを自動的に検出し、形式を気にすることなくサーフェスにロードします。
この統合サポートは、 依存関係と外部構成が少ないこれは、複数のプラットフォーム用にコンパイルする場合や、Emscripten などの環境内で SDL を使用する場合に特に便利です。ヘルパー ライブラリの数を減らすと、バイナリ サイズと複雑さの両方に違いが生じます。
入力: マウス、スタイラス、ジェスチャー、オンスクリーンキーボード
SDL 3.4では、以下の点が大幅に改善されました。 高度な入力デバイスマウス ドメインでは、SDL_SetRelativeMouseTransform() が導入されました。これにより、相対的なマウス入力にカスタム変換を適用できるようになり、スケーリング技術、軸反転、または特殊なマッピングに役立ちます。
鉛筆とスタイラスに関しては、 SDL_GetPenDeviceType()これにより、ペンが画面上で直接動作しているのか、別のタッチパッド上で動作しているのかを区別することができ、デバイスの種類に応じて UX を適応させるのに非常に役立つ詳細となります。
仮想キーボードを備えたデバイスでは、SDLは次のようなイベントを追加します。 SDL_EVENT_SCREEN_KEYBOARD_SHOWN SDL_EVENT_SCREEN_KEYBOARD_HIDDENは、オンスクリーンキーボードの表示/非表示を報告します。これにより、インターフェースの調整、要素の移動、テキストフィールドが隠れないようにするなどの調整が可能になります。
ジェスチャーシステムもイベントで拡張されています SDL_EVENT_PINCH_BEGIN、SDL_EVENT_PINCH_UPDATE、SDL_EVENT_PINCH_ENDピンチジェスチャを検出してズームなどの操作を行う機能が追加されました。また、Wayland環境では5つ以上のマウスボタンのサポートが修正され、X11では精密スクロールが導入され、細かいスクロールの滑らかさが向上しました。
最後に、SDL 3.4では、 SDL_Getイベント記述()は、イベントの英語の説明を取得する関数で、ログ記録とデバッグを目的としており、複数のプラットフォーム間でまれな入力動作を追跡する場合に非常に便利です。
オーディオ: より柔軟なワークフローとシステムの再処理なし
オーディオサブシステムにもかなりの改良が加えられており、特に 効率的な処理とパイプライン制御まず、検出された各オーディオ デバイスの初期化中に SDL_EVENT_AUDIO_DEVICE_ADDED も送信されるようになったため、動的イベントを待たずにデバイスの検出と一覧表示が容易になりました。
2つの新機能、 SDL_PutAudioStreamDataNoCopy() および SDL_PutAudioStreamPlanarData() は、オーディオ ストリームを操作するときに、より多くのオプションを提供します。前者は特定のケースで不要なコピーを回避し、後者はデータをインターリーブ形式ではなく平面形式で入力することを可能にします。これは、高度なストリームや高レベルのオーディオ処理ライブラリとの統合に最適です。
さらに、SDL_HINT_AUDIO_DEVICE_RAW_STREAMヒントが中心的な役割を果たします。このヒントは、オペレーティングシステムが オーディオに追加の処理を適用しないでください。 (ノイズキャンセルなど)。これは、アプリケーションやゲームが既に処理を担っており、OSによる干渉や結果の歪みを避けたい場合に重要です。また、SDL_PROP_AUDIOSTREAM_AUTO_CLEANUP_BOOLEANも導入されました。これにより、特定のストリームをオーディオサブシステムのライフサイクルを超えて存続させることが可能になり、より複雑なアーキテクチャで役立ちます。
HID コントローラーとデバイス
SDL 3.4では、コントローラとHIDデバイスのサポートが大幅に改善され、外部設定なしですぐに使用できるハードウェアの範囲が拡大しました。特に、以下の機能が追加されました。 8BitDoコントローラーのサポートが改善FlyDigi と Hand Held Legend SINput により、多くのサードパーティ製ゲームパッドがより安定して動作しやすくなります。
も組み込まれています 有線 Nintendo Switch 2 コントローラースタンド SDLがlibusbでコンパイルされている場合、ワイヤレスモードよりも直接接続を好むユーザーにとってこれは興味深い機能です。HID APIレベルでは、SDL_hid_get_properties()はSDLプロパティをHIDデバイスに関連付けるように見えます。また、SDL_PROP_HIDAPI_LIBUSB_DEVICE_HANDLE_POINTERプロパティは、libusbで開かれたSDL_hid_deviceに関連付けられたlibusbハンドルを取得できます。
これらの改善は、SDL 3.4に含まれる以下の機能に加えて、 新しいSteamコントローラのサポート これは、エントリー エコシステム内での役割や、Linux やその他のプラットフォームでのゲームへの重点と非常によく一致しています。
イベント、システム、および一般的なユーティリティ
SDL 3.4では、グラフィカル機能や入力機能以外にも、イベントシステムや一般的なユーティリティにもいくつかの変更が加えられており、知っておく価値があります。例えば、 SDL_EVENT_WINDOW_EXPOSED ライブ ウィンドウのサイズ変更中に送信されると、data1 フィールドに true が設定され、追加のコンテキストが提供されるようになりました。
追加します SDL_EVENT_DISPLAY_USABLE_BOUNDS_CHANGEDこのイベントは、使用可能なデスクトップの境界が変更されたとき(例えば、タスクバーやパネルを移動したとき)にトリガーされます。また、SDL_EVENT_SCREEN_KEYBOARD_SHOWN/SDL_EVENT_SCREEN_KEYBOARD_HIDDEN、そして前述のピンチイベントも組み込まれているため、動的なUIシナリオ向けに、より包括的なイベントエコシステムを提供します。
利益面では、 SDL_HINT_MAIN_CALLBACK_RATE 浮動小数点値として設定できるようになり、精度が向上しました。 SDL_AddAtomicU32() 32ビットの符号なし整数に対するアトミック加算のサポートが追加されます。 SDL_GetSystemPageSize() システム ページ サイズを返します。低レベルのメモリ タスクに役立ちます。
また含まれています SDL_ALIGNED()このマクロは、特定のデータが特定のアライメントを持つべきであることを示します。これは、パフォーマンス最適化とSIMD命令の使用に非常に関連しています。一方、SDL_PROP_IOSTREAM_MEMORY_FREE_FUNC_POINTERを使用すると、SDL_IOFromMem()およびSDL_IOFromConstMem()で使用されるメモリのカスタム解放関数を定義できるため、SDLを独自のアロケータと統合する際に、より詳細な制御が可能になります。
もう一つの興味深い改善点は、 詳細なログ出力 DEBUG_INVOCATION 環境変数が「1」に設定されている場合、複雑なコンテキストでのライブラリの初期化と動作の詳細なデバッグを目的としています。
Windowsの具体的な改善点
Windows版のSDL 3.4には、オーディオ、ビデオ、入力システムに影響を与える重要な変更が含まれています。注目すべき点の一つはヒント機能です。 SDL_HINT_RENDER_DIRECT3D11_WARPこれにより、WARP(D3D11のソフトウェアラスタライザ)を有効化できます。これは、互換性のあるGPUを搭載していないマシンや、直接的なアクセラレーションは利用できないもののAPIを利用したい仮想化環境で役立ちます。
WASAPIドライバは、 SDL_HINT_AUDIO_DEVICE_STREAM_ROLE オーディオストリームのカテゴリを調整します。これは、システム全体で一貫した動作(ゲームオーディオ、通信など)を実現するための重要な統合です。また、SDL_HINT_AUDIO_DEVICE_RAW_STREAM に依存して、ドライバが追加の処理を適用する必要があるかどうかを示します。
ヒントはキーボード入力側で入力します。 SDL_HINT_WINDOWS_RAW_KEYBOARD_EXCLUDE_HOTKEYSこれにより、生の入力時に特定のシステムショートカットを無効にすることができます。これは、システムの干渉なしにキーの組み合わせをキャプチャする必要があるゲームでは非常に便利です。GameInput APIレベルでは、 SDL_HINT_WINDOWS_GAMEINPUT これはデフォルトで無効になっており、明示的に構成されるまで、一部の環境での潜在的な競合が軽減されます。
また、 SDL_PROP_DISPLAY_WINDOWS_HMONITOR_POINTER 画面に関連付けられた HMONITOR を取得します。これは、SDL を従来の Win32 コードと混在させ、ウィンドウまたはモニターを調整する必要がある場合に非常に便利です。
macOS、iOS、visionOS
macOS では、SDL 3.4 に非常に実用的なヒントが含まれています。 SDL_HINT_MAC_PRESS_AND_HOLDこの設定は、キーを押し続けることでキーストロークを繰り返すか、アクセントメニューを開くかを制御します。これにより、macOSの典型的なアクセントメニューではなく、素早いキーの繰り返しを必要とするゲームやアプリケーションでのキーボードの動作を調整できます。
iOSではSDLが ウィンドウシーンをサポートこれにより、「UIKITクライアントはアップデートが必要です」という警告が解消され、ライブラリが最新のUIKitのプラクティスに準拠するようになります。SDLウィンドウ作成時にウィンドウシーンを指定するためのSDL_PROP_WINDOW_CREATE_WINDOWSCENE_POINTERプロパティが導入され、アプリをiOSのウィンドウシステムに適切に統合できるようになります。
VisionOSやApple Vision Proなどのデバイスでは、SDL 3.4がウィンドウの動作とリフレッシュレートを調整します。デフォルトのリフレッシュレートは 90 Hzに増加するよりスムーズなエクスペリエンスを提供し、SDL_SetWindowSize() は Vision Pro ヘッドセットのウィンドウ サイズを効果的に変更し、複合現実環境でのレイアウトをより細かく制御できるようになります。
Linux、Wayland、KMS/DRM、Vulkan
Linuxの世界では、SDL 3.4には多くの新機能が搭載されています。例えば、 KMSDRMのアトミックサポートカーネルのグラフィックスサブシステムと直接連携することで、安定性と同期性が向上します。これに関連して、ヒントSDL_HINT_KMSDRM_ATOMICを使用すると、KMSDRMがこのアトミック機能を使用するかどうかを制御できます。
Wayland の場合、次の内容が組み込まれています。 SDL_PROP_DISPLAY_WAYLAND_WL_OUTPUT_POINTERこの機能により、画面に関連付けられたwl_outputを取得できるようになり、コンポジターとの緊密な統合が容易になります。さらに、5ボタン以上のマウスで発生していた問題が修正され、X11環境での高精度スクロールも改善されました。これにより、スクロール操作を多用するアプリケーションにおいて、より細かな操作が可能になります。
Vulkanに関しては、SDL 3.4では レンダリングバッチ処理 VulkanなどのAPIの改良により、冗長な描画呼び出しが削減され、全体的なパフォーマンスが向上します。また、 より強力なVulkan GPU 複数の GPU を搭載したシステムでは、特に統合型 GPU と専用 GPU を搭載したハイブリッド システムやラップトップ システムで、最も適切なデバイスを自動的に選択するのに役立ちます。
さらに、GPUデバイス作成時にVulkanオプションを設定するためのSDL_PROP_GPU_DEVICE_CREATE_VULKAN_OPTIONS_POINTERプロパティと、デバイス作成時にハードウェアアクセラレーションを要求するためのSDL_PROP_GPU_DEVICE_CREATE_VULKAN_REQUIRE_HARDWARE_ACCELERATION_BOOLEANプロパティが追加されました。よりシステムレベルでは、SDLは次のような位置づけになっています。 X11ツールキット SDL 用の独自の X11 ツールキットとして X11TK が導入されました。
Emscriptenとブラウザの使用
SDL 3.4では、 Emscripten と Web ブラウザでの実行これは、ゲームやアプリを最初から書き直すことなくWebに移植したい場合に重要です。新機能の1つは、SDLウィンドウを必ずしも全画面表示にすることなく「ドキュメント全体を埋める」ことができることです。
以前のバージョンではSDL_HINT_EMSCRIPTEN_FILL_DOCUMENTが導入され、最終リリースではフラグを中心に再編成されました。 SDL_WINDOW_FILL_DOCUMENT SDL_SetWindowFillDocument() 関数と、関連するいくつかのプロパティについて説明します。注目すべき例としては、以下のものがあります。
- SDL_PROP_WINDOW_CREATE_EMSCRIPTEN_CANVAS_ID_STRING と SDL_PROP_WINDOW_EMSCRIPTEN_CANVAS_ID_STRING は、SDL が使用するキャンバスの ID を設定および照会します。
- SDL_PROP_WINDOW_CREATE_EMSCRIPTEN_FILL_DOCUMENT_BOOLEAN SDL_PROP_WINDOW_EMSCRIPTEN_FILL_DOCUMENT_BOOLEAN は、ウィンドウがドキュメント全体を占有するかどうかを示し、確認します。
- SDL_PROP_WINDOW_CREATE_EMSCRIPTEN_KEYBOARD_ELEMENT_STRING と SDL_PROP_WINDOW_EMSCRIPTEN_KEYBOARD_ELEMENT_STRING を使用して、キーボード入力がリンクされている要素を指定および照会します。
これらのオプションは、 SDL は DOM およびキャンバスとどのように統合されますか?これにより、Emscripten を使用する際にハックや中間レイヤーを回避できます。また、Web フレームワークとの SDL 互換性の確保や、キャンバスがページの一部にしか含まれないような複雑な統合も容易になります。
PlayStation 2やその他のあまり一般的ではないプラットフォーム
驚くかもしれませんが、SDL 3.4では、 PlayStation 2のようなベテランプラットフォーム表示パラメータを制御するためのヒントを追加しました: SDL_HINT_PS2_GS_WIDTH、SDL_HINT_PS2_GS_HEIGHT、SDL_HINT_PS2_GS_PROGRESSIVE、および SDL_HINT_PS2_GS_MODE。これにより、グラフィックス シンセサイザーの解像度、プログレッシブ モード、および一般設定を調整できます。
これらの詳細から、SDLが依然として非常に柔軟な選択肢であることがわかります。 自作プロジェクト、エミュレーション、または研究 最新の PC、モバイル、Web に重点を置いているほか、古いプラットフォームでも利用できます。
プロセス管理、カメラの権限、ELFメタデータ
システムレベルでは、SDL 3.4では次のプロパティが追加されました。 SDL_PROP_PROCESS_CREATE_WORKING_DIRECTORY_STRINGこれは、SDLから作成された新しいプロセスの作業ディレクトリを設定するために使用されます。これにより、オペレーティングシステムのAPIにアクセスすることなく、SDLアプリケーションからサブプロセスや外部ツールを簡単に実行できるようになります。
写真分野では、 SDL_GetCameraPermissionState() 型の値を返すようになりました SDL_カメラ権限状態 汎用の整数の代わりに、セマンティクスをより適切に調整し、モバイルおよびデスクトップ プラットフォームでの権限管理を容易にします。
Unixシステムでは、SDLにはその内容を記述するELFノートが含まれています。 任意利用の図書館施設 systemd.io/ELF_DLOPEN_METADATA に記載されているフォーマットに従うことで、ディストリビューションはこれらのノートを分析し、package-notes などのツールを使用してパッケージ依存関係を自動生成できるようになります。SDL は SDL_ELF_NOTE_DLOPEN マクロを提供しており、他のライブラリやゲームでも同様の処理が可能になり、よりクリーンな依存関係管理が可能になります。
ウィンドウの進行状況とアニメーションカーソル
ユーザーエクスペリエンスを向上させるために、SDL 3.4では、 進捗状況を表示し、インターフェースを充実させるたとえば、SDL_SetWindowProgressState()、SDL_SetWindowProgressValue()、SDL_GetWindowProgressState()、および SDL_GetWindowProgressValue() が導入され、Windows および Linux タスクバーのウィンドウ アイコンに進行状況バーが表示されるようになりました。
この機能により、ユーザーは 長時間の操作の状態 ウィンドウがフォアグラウンドにない場合でも、(ダウンロード、アップロード、内部ビルドなど)の進捗状況が表示されます。追加のHUDを設計することなく、フィードバックを提供できる、非常にエレガントな方法です。
一方、SDL_CreateAnimatedCursor()では アニメーションカラーカーソルを作成するこれにより、カーソルが状態(読み込み中、アクション実行中、アラートなど)を伝えるゲームやツールの見た目が洗練されます。新しいヒントSDL_HINT_MOUSE_DPI_SCALE_CURSORSと組み合わせることで、DPIスケール環境でカーソルのサイズが予期せず変更されるのを防ぐため、デフォルトで「0」に設定されます。これにより、ポインターの外観をより予測可能な方法で制御できるようになります。
3D/2D GPUの統合、ネイティブPNGサポート、入力とオーディオの改善、最新のLinux、Emscripten、visionOS、クラシックコンソールへの配慮など、一連の変更により、SDL 3.4は、 クロスプラットフォーム開発のための非常に完全なツールボックス外部依存関係を最小限に抑え、自分のコードとは関係のない問題のデバッグに一日中費やすことなく、反復処理できる強固な基盤を提供します。
