OpenGL は「ハードウェア (やドライバ) が状態を持っていて、 API はその状態を変化させるもの」というモデルなんだけど、まあ言ってみればグローバル変数をあちこちから弄るようなものなので、並列プログラミングしづらいとか、状態が別所で変化させられている可能性があるので管理が面倒とか、そういう嫌な面があって近年では好まれていない
Conversation
Notices
-
らりお・ザ・何らかの🈗然㊌ソムリエ (lo48576@mastodon.cardina1.red)'s status on Thursday, 25-Aug-2022 23:12:48 JST らりお・ザ・何らかの🈗然㊌ソムリエ - B̅ repeated this.
-
らりお・ザ・何らかの🈗然㊌ソムリエ (lo48576@mastodon.cardina1.red)'s status on Thursday, 25-Aug-2022 23:12:51 JST らりお・ザ・何らかの🈗然㊌ソムリエ で、これは私の中途半端な理解なので正しさは保証しないけど、 Vulkan (あるいは新しめの DirectX とかも? 知らんけど) は「ハードウェアごとに機能に多様性があるしそれに合わせて最適化したい」とか「並列実行したい」とか「GPU 側でも汎用計算をすることがある」とか諸々の要件を前提に、「GPU というある種の計算機にコマンドを投げて、その結果を待つ」みたいな非同期かつ IPC 的なモデルになっている。
グローバル変数を設定して関数を同期実行して……みたいなモデルから脱却して、処理ごとの文脈なり依存リソースなり処理の内容なりを全部コマンドに同梱してパッケージとして投げるようになった。すると、ドライバ側がいい感じに効率的に状態を管理できるようになったり、「他の誰かが状態を変更していたらどうしよう」みたいな悩みから開放されたり、パッケージを通信で送れればいいから複数スレッドから同時にコマンドを投げても安全にできたりとか、いろいろ恩恵がある