2012-01-19 6 views
1

vec4の配列をOpenGLのフラグメントシェーダーに渡したいと思っていました。それは私がGLfloatのの配列を渡すと、シェーダでvec4sを再構築しようとしていますが、それはまだ私がvshaderに宣言しようとしたvec4(GLfloat quad)の配列をopenGLシェーダーに一様に渡す

動作しない点まで来た:

#extension GL_NV_shader_buffer_load : enable 
uniform GLfloat* points; 

とからコード、コール:

glUniform1fv(points, pointsLen*4, points); 

iは1のグループに山車を渡しています、と私はvec4sの4倍の数を持っていることを考えます。
悲しいことに、このvshaderはコンパイルをGLSLプログラムに渡しません。

どうすれば修正できますか?これを修正するか、まったく別の方法で実行してください。

+0

[uniform vec4 positions [50] '](http://www.opengl.org/wiki/GLSL_Types#Arrays)は機能しませんでしたか? – genpfault

+0

動作しますが、コンパイル時にサイズがわかりません。私は、 –

答えて

1

NVIDIAのshader_buffer_loadはこのように動作しません。 uniformポインタを宣言すると、そのポインタのデータが格納されているGPUアドレスを提供することをコンパイラに知らせることになります。そのGPUアドレスはバッファオブジェクトから来ます。

バッファオブジェクトにデータを入れて常駐させる必要があります(GPUアドレスを取得できるようにする必要があります)。あなたはそれにデータの配列へのCPUポインタを与えません。

データの配列が必要な場合は、shader_buffer_loadはまったく必要ありません。 GLSLは、均一な配列を可能にします。明示的にサイズを置くだけです。

+0

を参照してください。どうもありがとうございました ! –

関連する問題