2017-09-30 10 views
1

非常に基本的なOpenGL C++プログラム(Linux 64ビット)を作成しています。ビデオカードがない場合OpenGLシェーダを実行する人

  • 主C++プログラム
  • 頂点シェーダ
  • フラグメントシェーダ

2つのシェーダを実行時にコンパイルされる:

は、実際に、私は、3つのプログラムを有しています。私は、このプログラムは、GPUによってビデオカード上で並行して実行されていると思います。

私のコンピュータにGPUのない非常に基本的なビデオカードが含まれているとどうなりますか?

「3dアクセラレーション」を無効にしてプログラムを実行すると、VirtualBoxでプログラムを実行しようとしました。

GPUがない場合、OpenGLがビデオカードを検出し、CPU上でシェーダを自動的に実行することを意味しますか?

+0

おそらく関連する[OpenGLソフトウェアレンダリングの代替](https://stackoverflow.com/questions/10431591/opengl-software-rendering-alternatives)。 – VTT

答えて

1

OpenGLは単なる標準であり、その標準にはさまざまな実装があります。通常は、グラフィックスドライバが提供する実装に依存しています。これは明らかにGPUを使用する予定です。

しかし、ほとんどのデスクトップLinuxディストリビューションには、OpenGLをサポートするビデオドライバがインストールされていない場合に使用される、Mesaと呼ばれるOpenGLのソフトウェア実装も含まれています。 (最近、CPU上のビデオハードウェア、OpenGLシェーダをサポートしていない統合ビデオも見つけることは非常にまれですが、Linuxドライバでは問題が発生する可能性があります。 )

あなたのシェーダはCPU上で動くことができますが、それは起こるかもしれないし、そうでないかもしれませんし、自動でもそうでなくてもかまいません、ビデオドライバ(または他のOpenGL実装)インストールされています。

+0

そして、GPUメモリ(または計算リソース)の制限をどのように見ることができますか?たとえば、多くの頂点を必要とするプログラムのいくつかのインスタンスを実行するとどうなりますか? – Bob5421

+0

残念ながら、OpenGLは利用可能なGPUメモリを照会する方法を提供していません。ビデオRAMの限界に遭遇したときに正確に何が起こるかは、頂点をロードする方法に依存します。ビデオRAMがいっぱいになるとGPUに通常のRAMから自動的にページングをさせることは可能ですが、それはそれ自体の個別の議論です。 – matthewscottgordon

+0

さまざまな実装パラメータを照会する関数があります。例えば、glGetIntegerv(GL_MAX_VERTEX_ATTRIBS、...)は、実装で各頂点が持つことができる属性の数を示します。残念ながら、これらのパラメータは、実装が可能なことを伝えるだけであり、特定の制限内にとどまったり、物事を一定の方法で構築したりすると、実装がより大量に**よりよく実行されます。異なるハードウェアでのテストは、OpenGLプログラムがどのように動作するかを知る唯一の確実な方法です。 – matthewscottgordon

0

最新のパーソナルコンピュータには、GPUがあります。 NVidiaやAMDのようなベンダーの専用GPUカードを持っていない場合は、Intelまたは他のコンピュータハードウェアメーカーが「オンボード」またはintegrated video chipを持っている可能性があります。良いことは、今日のオンボードGPUでさえも(インテルは最終的に良い仕事を始めた)、あなたのPC上のそのようなハードウェアがすでに最新のプログラム可能なOpenGLバージョンをサポートしている可能性が高いということです。さて、最新のものではないかもしれませんが、私の個人的な経験から、2〜3年前のインテルのオンボードGPUの大半は、OpenGL 4.1/4.2までをサポートするはずです。 gpuアクセラレーションAPIにフルアクセスする必要があります。そうでなければ、OpenGL APIのソフトウェア(GPU非加速化)実装に付属するMesa libraryがあります。

関連する問題