2017-01-25 9 views
-1

プログラムで計算シェーダを使用したいと思います。私はシェーダを使用するためにC#とOpenTKを使用します。 私の問題:すべてのコンピュータに0のworkGroupCountと0のworkGroupSizeがあります。私はこのOpenTKコードでこれらの値を得ています。WorkGroupSize = 0

int workGroupCount = GL.GetInteger((GetPName)All.MaxComputeWorkGroupCount); 
int workGroupSize = GL.GetInteger((GetPName)All.MaxComputeWorkGroupSize); 
int workGroupInvocations = GL.GetInteger((GetPName)All.MaxComputeWorkGroupInvocations); 

頂点、フラグメント、およびテッセレーションシェーダは、コンピュータ上で正常に動作します。 OpenGLバージョン4.3以上。なぜ私はworkGroupCountを0にしましたか? the documentation for glGetGL_MAX_COMPUTE_WORK_GROUP_COUNTGL_MAX_COMPUTE_WORK_GROUP_SIZEによれば

答えて

4

glGetIntegervglGetIntegeri_vのインデックス付きバージョンを介して取得することになっています。 glGetのインデックス付きバージョンで受け付け

GL_MAX_COMPUTE_WORK_GROUP_COUNT

。データは、計算シェーダにディスパッチできるワークグループの最大数です。指標0,1,2はそれぞれX、Y、Zの次元に対応します。

GL_MAX_COMPUTE_WORK_GROUP_SIZE

glGetの索引付けされたバージョンで受け付け。データは、計算シェーダのコンパイル時に使用されるワークグループの最大サイズです。指標0,1,2はそれぞれX、Y、Zの次元に対応します。 OpenTKで

、これは途中にインデックスパラメータでGL.GetIntegerへの過負荷として公開されているので、あなたの呼び出しは次のようになります。

int workGroupCount = GL.GetInteger((GetPName)All.MaxComputeWorkGroupCount, 0); 
int workGroupSize = GL.GetInteger((GetPName)All.MaxComputeWorkGroupSize, 0); 
int workGroupInvocations = GL.GetInteger((GetPName)All.MaxComputeWorkGroupInvocations); 

あなたはGL.GetIntegerへの各呼び出しの後GL.GetErrorをチェックした場合、最初の2つはおそらく返されますGL_INVALID_ENUM

関連する問題