質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

GLFW

GLFWは、OpenGLを使用してアプリ開発を行うためのフレームワークです。Macにも対応しているマルチプラットフォームであることが特徴。ウィンドウ管理、解像度切り替え、入力管理などの機能を持ちます。

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

1回答

9364閲覧

OpenGLにおけるCPUとGPUの動作の違いについて

Tololololo

総合スコア118

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

GLFW

GLFWは、OpenGLを使用してアプリ開発を行うためのフレームワークです。Macにも対応しているマルチプラットフォームであることが特徴。ウィンドウ管理、解像度切り替え、入力管理などの機能を持ちます。

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2018/09/19 04:15

編集2022/01/12 10:55

GLFWライブラリを介してOpenGLを使用しているのですが、
OpenGLの動きに関連してCPUとGPUのどちらがどのタイミングで使われているかを知りたいです。

現在私はウィンドウを作成し、シェーダープログラムを実行する環境を整えたところまでしかわかりません。(図形描画を実際に行なっていないということです。)

その上で質問ですが、

  1. GLFW(OpenGL)にてCPU, GLSLにてGPUを司っているのか?

少し語弊があるかと思いますが、ウィンドウ作成やダブルバッファリングのバッファ入れ替えをCPUで司り、シェーダー等をGPUで処理しているのかということです。

  1. また、もし1.が正しかった場合、ダブルバッファリングのバッファ入れ替えと各バッファへの描画をそれぞれCPUとGPUで分けているからこそスムーズな処理が可能であり、CPUの他にGPUを必要としている理由なのか?

まだ始めたばかりなので自分の中でだいぶフワフワしています。
この質問である程度はっきりさせておきたいです。

回答お願いします。( ͡° ͜ʖ ͡°)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

OpenGL について詳しくないため、誤りがあったらすみません。

GLFW(OpenGL)にてCPU, GLSLにてGPUを司っているのか?

OpenGL は、ライブラリではなくAPI仕様を規定しているだけなので、「OpenGL を使う」といった場合は実際はその仕様にしたがって実装されたライブラリを使っていることになります。

  • Ubuntu: Mesa3D
  • Windows: Nvidia などグラフィックベンダーが提供するドライバ

それらのライブラリが GPU が利用できる部分は GPU で行うようになっており、ライブラリの利用者側ではどの処理が GPU で行えわれるかを意識する必要はないはずです。

少し語弊があるかと思いますが、ウィンドウ作成やダブルバッファリングのバッファ入れ替えをCPUで司り、シェーダー等をGPUで処理しているのかということです。

OpenGL は主に描画に関する API しか提供していないため、ウィンドウ作成やダブルバッファなど OpenGL の担当外の部分は、GLFW や Qt などのライブラリを合わせて使うことになります。

また、もし1.が正しかった場合、ダブルバッファリングのバッファ入れ替えと各バッファへの描画をそれぞれCPUとGPUで分けているからこそスムーズな処理が可能であり、CPUの他にGPUを必要としている理由なのか?

さきほど説明したとおり、レンダリングをすべて CPU で行うことも可能ではありますが、最近のコンピューターグラフィックスでは何百万というポリゴンを扱うことが当たり前なので、並列に大量のデータを計算する必要がある場合、GPU が有利です。
そのため、最近ではコンピューターグラフィックスの他、Deep Learning の計算などにも GPU が使われるようになっています。

まとめると

  • OpenGL でどの処理を GPU/CPU で行うか決められているわけではない。
  • GLFW はウィンドウ管理などを行うライブラリ。CPU で実行される。
  • GPU が必要なのは、CPU でも同じ処理を行えるが、GPU を使ったほうが圧倒的に高速であるため。

追記 (Windows の場合)

Windows の場合は、グラフィックベンダーが提供するドライバを基本的には使うようです。

How Does It Work On Windows?

Windows の場合、

  • OpenGL を使うアプリケーションをコンパイルするには、opengl32.dll をリンクする。
  • opengl32.dll は、グラフィックベンダーのドライバを探して、ロードする。(例: Nvidia なら nvoglv32.dll)
  • opengl32.dll 自体はソフトウェア実装の OpenGL 1.1 のみ提供する。ドライバが見つからないときは、この OpenGL 1.1 しか使えない。
  • それより新しいバージョンの OpenGL を使いたい場合は、ドライバが必須

投稿2018/09/19 08:23

編集2018/09/19 11:25
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/09/19 10:52

WindowsのOpenGLの実装はIntel・nVidia・AMD等の各GPUベンダーが実装したドライバじゃないですかね?
tiitoi

2018/09/19 11:26

ご指摘ありがとうございます。 調べたところ、GPU ベンダーのドライバが使われるようですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問