「スワップチェーン」の版間の差分
ナビゲーションに移動
検索に移動
Administrator (トーク | 投稿記録) |
Administrator (トーク | 投稿記録) |
||
(同じ利用者による、間の3版が非表示) | |||
1行目: | 1行目: | ||
− | '''スワップチェーン'''([[英語]]:Swap Chain)とは、主に[[コンピューターグラフィックス]] | + | '''スワップチェーン'''([[英語]]:Swap Chain)とは、主に[[コンピューターグラフィックス]]で用いられる「1つのフロントバッファ」と「1つ以上のバックバッファ」で構成される[[フレームバッファ]]を管理するための機構(コレクション)である。 |
− | + | == 概要 == | |
+ | フロントバッファとバックバッファがそれぞれ1つ(計2つ)という最小構成のスワップチェーンは「[[ダブルバッファ]]」と呼ばれる。 | ||
− | == | + | [[ダブルバッファ]]の場合は単純なスワップ操作であるが、トリプルバッファ以上になるとバッファの遷移が複雑なリング状になる。それをダブルバッファ同様にスワップ操作っぽい[[API]]を叩くだけでグルグル回るようにしたものを「スワップチェーン」と呼ぶことが多い。 |
− | [[ | + | |
− | + | == 垂直同期 == | |
− | + | ディスプレイが描画処理している最中にスワップチェーンの切り替えを行うと描画内容が狂う。 | |
+ | このような現象を抑制するため「[[垂直同期]]」を利用することが多い。 | ||
− | + | == 実装 == | |
+ | [[github]]に転がっている[[オープンソース]]の各種[[フレームワーク]]ではどのようにスワップチェーンを実装しているのか眺めてみた。 | ||
− | == | + | === リングバッファ === |
+ | ほとんどスワップチェーンは「[[リングバッファ]]」で実装されているようだ。 | ||
{| class="wikitable" | {| class="wikitable" | ||
|- | |- | ||
31行目: | 35行目: | ||
|} | |} | ||
− | + | === キュー === | |
+ | 一部の実装では「[[キュー]]」を用いてものもあった。 | ||
== 動画の切り出し == | == 動画の切り出し == | ||
40行目: | 45行目: | ||
== 関連項目 == | == 関連項目 == | ||
* [[ダブルバッファ]] | * [[ダブルバッファ]] | ||
+ | * [[垂直同期]] | ||
[[category: 3DCG]] | [[category: 3DCG]] |
2021年2月2日 (火) 06:32時点における最新版
スワップチェーン(英語:Swap Chain)とは、主にコンピューターグラフィックスで用いられる「1つのフロントバッファ」と「1つ以上のバックバッファ」で構成されるフレームバッファを管理するための機構(コレクション)である。
概要[編集 | ソースを編集]
フロントバッファとバックバッファがそれぞれ1つ(計2つ)という最小構成のスワップチェーンは「ダブルバッファ」と呼ばれる。
ダブルバッファの場合は単純なスワップ操作であるが、トリプルバッファ以上になるとバッファの遷移が複雑なリング状になる。それをダブルバッファ同様にスワップ操作っぽいAPIを叩くだけでグルグル回るようにしたものを「スワップチェーン」と呼ぶことが多い。
垂直同期[編集 | ソースを編集]
ディスプレイが描画処理している最中にスワップチェーンの切り替えを行うと描画内容が狂う。 このような現象を抑制するため「垂直同期」を利用することが多い。
実装[編集 | ソースを編集]
githubに転がっているオープンソースの各種フレームワークではどのようにスワップチェーンを実装しているのか眺めてみた。
リングバッファ[編集 | ソースを編集]
ほとんどスワップチェーンは「リングバッファ」で実装されているようだ。
フロントバッファ | バックバッファ1 | バックバッファ2 | |
---|---|---|---|
1フレーム目 | A | B | C |
2フレーム目 | B | C | A |
3フレーム目 | C | A | B |
キュー[編集 | ソースを編集]
一部の実装では「キュー」を用いてものもあった。
動画の切り出し[編集 | ソースを編集]
一般的に動画のデコードは非常に重たい処理であり、1フレーム単位で静止画を取得しようとするとリアルタイムでは厳しい結果になることが多い。基本的に動画はキーフレームからの差分で表現されるので、連続再生ではない場合はどうしても重くなる。
そこで巨大なスワップチェーンを生成し、別スレッドで動画から一定フレーム数を先読み的に静止画としてそこへ書き出しておく構造にすることでサクサクと静止画を取得できるようになる。ゲーム内のテレビなどに動画をテクスチャとして貼り付けるなどの用途でよく使われる。