OpenGL

OpenGL

OpenGL の ComputeShader

今回はようやくOpenGLでのComputeShaderを扱ってみます。意外とOpenGLでのComputeShaderって話題になっていないようで、ワクワクしています。 手順 VertexShader, FragmentShader などを生成するように、ComputeShader を生成します。ComputeShaderもまたGLSLで記述するので、今ま...
OpenGL

OpenGLでComputeShaderを使う前に

OpenGLでComputeShader を使う前に実は知っておくべきことが意外とある、ということで今回はその内容についてです。 ComputeShader は演算のためのシェーダーです。その演算内容をどこかに書き出さなければなりません。OpenGLでは、2種類ほどあるようでそれが以下の物に該当するようです。 Shader Image load store ...
OpenGL

GLSLのシェーダーリフレクション (2)

OpenGL (GLSL) のユニフォームブロックでのシェーダーリフレクションを試してみました。 ここで使った vertexShader, fragment shaderは以下のようなものです。 // vertex shader #version 410 core layout( location=0 ) in vec3 inPosition; layout...
OpenGL

GLSLのシェーダーリフレクション

GLSLいじりの過程で、シェーダーリフレクションっぽいことをやってみたのでその調査結果です。 OpenGLでは別に他のライブラリに依存することなく、シェーダーリフレクションの機能を持っています。普段ではuniform変数のロケーション情報を名前から取得しているかと思いますが、その延長上でいろいろな情報をとれるようになっています。 そこで次のようなシェーダープ...
OpenGL

最近のGLSLでは色々廃止になってる…

最近のGLSLでは結構廃止になっている部分が多い。ちょっと踏んだところをメモとして残しておきます。 varying, attribute 廃止 これは割と定番ですが、最近のGLSLでは廃止になってます。 代わりに in/out を使用して、シェーダーに対する入力、出力を記述していきます。 その割に、頂点入力としては glGetAttribLocation 使...
OpenGL

Texture Buffer Object (TBO)について

どうやらこれはTextureBuffer-Objectではなく、Texture-BufferObject という意味であるとのことです。そしてこれは、VBO(Vertex buffer object)のバッファデータをテクスチャとして利用するための仕組みであるとのことです。 テクスチャのデータは glTexImage系の関数で準備をしますが、TBOについては...
DirectX

OpenGLとDirectX11で、あと何が足りてないか

ここ1ヶ月ほどは主に最近のOpenGLについて勉強しているわけですが、DirectX11と比べてまだ何が足りていないかまとめてみます。 やったこと テクスチャ配列 (DX10だけど) ジオメトリシェーダーでストリームアウト&ポイントスプライト (DX10だけど) ハードウェアでのインスタンシング描画 テセレーションのシェーダーについて(TCS, TES) シ...
OpenGL

OpenGL Shader subroutine を試してみた

GLSLシェーダープログラムの関数を切り替える拡張である GL_ARB_shader_subroutine を試してみました。使ってみた感想としては C言語プログラムの関数ポインタを設定して実行先を切り替える、そんなものとずいぶん近い気がします。 シェーダープログラムでは、切り替える関数の宣言、切り替えに使う変数を先に宣言しておきます。 今回はLambert...
OpenGL

テクスチャ配列の活用について (OpenGL)

テクスチャ配列の活用について考えてみました。昔はマテリアルに付随する各マップ(ディフューズ、スペキュラ、ノーマル)などを1つにまとめて使うのかなと思っていましたが、また別の使い道もあることがわかってきました。 その活用法というのが、テクスチャアトラスとして使うというものです。テクスチャアトラスとは複数の小さいテクスチャをまとめあげて大きなテクスチャを作成して...
OpenGL

OpenGL でテクスチャ配列を使う

OpenGLでもテクスチャ配列が使用可能になっています。以前DirectX10のテクスチャ配列を使うには、という項目で記事を書いたのですが、あれっきりOpenGLではどうやるのかを放置してしまいました。今回は OpenGL でテクスチャ配列を使うコードを説明したいと思います。 結果 4つの2Dテクスチャをテクスチャ配列としてセットして、UV値によって参照先を...