「スワップチェーン」の版間の差分

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

そこで巨大なスワップチェーンを生成し、別スレッドで動画から一定フレーム数を先読み的に静止画としてそこへ書き出しておく構造にすることでサクサクと静止画を取得できるようになる。ゲーム内のテレビなどに動画をテクスチャとして貼り付けるなどの用途でよく使われる。

関連項目[編集 | ソースを編集]