プログラミング

OpenGL

定数バッファ(Uniform Block)について

DirectXのサンプルを見ているとC++側とHLSL側とで同じ並びの構造体を作ってデータを送っているように見えます。データのレイアウト規則は同じになるのが保証されるのか少々疑問です。一応 D3Dの関数でシェーダーリフレクションが使えるので、調査することはできますが、そこまでやってC++側の定数バッファを作成している例を見かけたことがありません。  一方、O...
OpenGL

OpenGL でテセレーションのシェーダー(TCS,TES)を使う

OpenGLの4.x世代でテセレーションのシェーダーが使えるようになり、DirectX11相当になりました。前回は簡単な三角形や四角形の再分割は作ってみたので、今回はモデル形状について適用してみたいと思います。  そして割とテセレーションのサンプルでは定番の PN Triangles の方法で OpenGLのシェーダー Tessellation Contro...
OpenGL

OpenGL 4.x でのテセレーション

描画方法についてはキューブを回すところまでできて一段落したので、しばらくは追加された機能について試していきたいと思います。今回は OpenGL 4.x で追加されたハードウェアのテセレーションについてです。DirectX 11 でいうところの、ハルシェーダーだったりドメインシェーダーだったりに相当します。OpenGL ではこれらを、テセレーションコントロール...
OpenGL

OpenGL で インスタンシング描画

OpenGL 4.x でのインスタンシング描画を試してみました。インスタンシング描画とはCPU(C++)からの描画呼び出しは1回で、同じモデルを複数回描画することを指します。このときモデル形状のデータは使い回して、別々の場所に描画するということをやってみます。これはインスタンシングの中でもハードウェアインスタンシングと呼ばれていて、古くはDirectX 9....
DirectX

Draw Indirect 系を調べてみた (OpenGL vs DirectX)

OpenGL では Draw Indirect 系が充実しているとの情報があったので、DirectXとどのように違うのかを調べてみました。 DirectX 11 では、 DrawInstancedIndirect(), DrawIndexedInstancedIndirect() の2つの関数が DrawIndirect系として使用可能です。DirectX1...
OpenGL

OpenGL DrawIndirect を試してみた

OpenGLの拡張名では GL_ARB_draw_indirect となる DrawIndirect の機能を試してみました。これはVRAM上のバッファに描画用データを格納して、その情報を元に描画を行う機能となります。通常 glDrawArrays や glDrawElements で描画の際に関数の引数として設定していたデータについて、VRAM上から該当す...
OpenGL

OpenGL 4世代での描画手順 その3

今回はテクスチャを張ってみたいと思います。また単に画面に三角形ではなく、立方体を出してみます。そのために今回は GLM というライブラリを使用することにしました。これは行列演算のために使用しています。
OpenGL

OpenGL 4世代での描画手順 その2

前回はとりあえず三角形が出せるまで、だったので今回はもう少し進めてみたいと思います。DirectX11ではシェーダー定数については定数バッファ(ConstantBuffer)というものを使って、パラメータをCPUからGPU(シェーダー)に送ります。これのOpenGL版は Uniform Buffer Object (UBO)というものに該当します。 Unif...
OpenGL

OpenGL 4世代での描画手順 その1

OpenGL も現在は 4.4 までバージョンが上がりました。自分が知っているのは 3.3 の頃までで、そのときですらジオメトリシェーダーを扱うプログラムに関して調べた程度でした。最近のものでは DirectX 11との対抗もあってか、ずいぶんと機能が増えて、また、描画の方法も従来とは変わってきたので、改めて勉強をしてみます。
プログラミング

Windowsファイル共有でのGitリポジトリ運用

前回 QNAP のファイルサーバーで Git リポジトリを扱おうとして、思うようにいかなかったので他の方法を探してみました。 ちなみに、あれから git daemon による git リポジトリを扱う方法もやってみたのですが、Windowsのmsysgitのgitからは、Write Objects の状態から進まずという(フリーズ?)という状態で停止でした。...