2017-01-22 6 views
0

私はグラフィックプログラミングには比較的新しいので、私は非常に基本的なものから始めたいと思います。私はOpenGL API自体にバインディングを提供するPyOpenGlのようなライブラリがあることを知っています。今、私は本当にPyOpenGlのようなものを自分で作成したいので、どのようにプロセス内で動作するのか理解できます。独自のOpenGLバインディングやライブラリを作成するには

PyOpenGlやGLFWのようなライブラリを作成することはできますか?もしそうなら、何をすべきかの一般的なヒントを教えてください。

私は自分のバインディングを作成できない理由を私に説明してください。上記の私の質問が不条理な場合は謝ります。

+4

あなたがグラフィックスプログラミングに慣れていない場合は、おそらく独自のバインディングを作成しようとするのは良い考えではありません。 – byxor

+0

私はそう思っていますが、私は本当に本当にそれをしたいです。あなたが知っているなら、ちょうど私にいくつかのポインタを与えることができますか? – Wowzer

+2

私はあなたのためのリンクがありません、申し訳ありませんが、私は追加する必要があります...低レベルのものは、非常に具体的な方法で書かれていますかなり厳密に定義されたより高いレベルの使用をサポートします。 OpenGLの動作を理解していないと、ハードウェアとのやりとりが非常に難しいことがわかります。 – Basic

答えて

1

PyOpenGLは、ほとんどの場合、Pythonの関数呼び出しを同じ名前のネイティブマシンコード関数の呼び出しに変えるかなり薄いラッパーです。ミックスのコーリング規約のようないくつかの細部はありますが、実際は退屈なものです。事実、(OpenGLに関しては)PyOpenGLを使ってPythonで書いたソースコードは、Cで書いたソースコードとほとんど同じに見えます。PyOpenGLはいくつかの手段を提供しています。データポインタパラメータを取るOpenGL呼び出しへのNumPy配列のインタフェースですが、これは単なるハウスキーピングです。

OpenGLをC言語で呼び出すときや、さらに極端なアセンブリ言語(完全に可能な場合)は、OpenGLを使って行くことができる最低レベルです。自分のGPUデバイスドライバを書くのに手間がかかります。また、GPUデバイスドライバを書くことは非常に難しい作業です。文字通り何百万行ものCコードが必要です(NVidiaのOpenGL実装は約40M LoC、AMDおよびIntel GPUのオープンソースドライバ、それぞれにMLoCがあります)。

いくつかの中間地に興味がある場合は、Vulkan APIをご覧ください。グラフィックス用のより高いレベルのラッパーを書くことがあなたのことであるならば、Vulkanのためのより高いレベルのAPI /レンダラーを実装し、それをPythonにインターフェイスすることをお勧めします。これは、学習経験(IMHO)として、はるかに報われる可能性が高いです。

0

OpenGL APIはグラフィックスカードのドライバに存在します。すべてのOpenGL関数があります。あなたはそれらを得る方法を知る必要があります。 Spektreが述べたように、処理は次のとおりです。

  1. OpenGLコンテキストを作成します。これはOSの仕事です。各OSには の方法とその問題点があります。 Read https://www.khronos.org/opengl/wiki/Load_OpenGL_Functions
  2. 関数ポインタをglext.hと定義してから、ドライバを から抽出します。標準のOpenGL関数とは別に、ベンダーは独自の のものを追加します。これは「拡張機能」と呼ばれます。 GLEWがこの仕事をどのようにしているかを見ることができます。 をすべての機能と拡張機能に設定する場合は、約1,000個あるため、glext.hを使用するスクリプトを作成します。

あなたはGLFWが必要となるようなものをやってhttps://www.opengl.org/registry/

からglext.hをダウンロードすることができ、ウィンドウを作成し、キーボードとマウスのためにそのメッセージを処理する方法を知って、前の二つの点に加えます。これもまたOSに依存します。 Windows上には方法があります。 Linuxでは、使用されるウィンドウマネージャ、たとえばGTK +に依存します。またはX11を直接。または...

私の最高のアドバイスは、GLEWとGLFWのしくみを読んでコードを調べることです。しかし、はそれに多くの時間を失うことはありません。 OpenGLの経験を得ることを好み、後でそのような "diggins"を許可してください。

関連する問題