2017-05-26 15 views
0

私は、149行と210色の行列を持っています。計算をするためにシェーダに送って欲しい。マトリックスの値は9-128です。 (glslシェーダのテクスチャとしてのマトリックスへのアクセス

uniform usampler2DArray NNZ; 
vec3 getTexCoord(ivec2 indx, ivec3 tsize) 
{ 
    // ivec3 size = textureSize() 
    return vec3((indx.x+0.5)/tsize.x , (indx.y+0.5)/tsize.y , tsize.z); 
} 
. 
. 
. 
ivec3 patchedTexSize = textureSize(NNZ,0); 
vec3 texCoord = getTexCoord(ivec2(0,0), ivec3(patchedTexSize.xy,0)); 

uint iNNZ = texture(NNZ, texCoord).r; 

だから私の行列に基づいて:

m_GLTextureNNZ = new QOpenGLTexture(QOpenGLTexture::Target::Target2DArray); 
m_GLTextureNNZ->create(); 
m_GLTextureNNZ->bind(indx); 
m_GLTextureNNZ->setMinificationFilter(QOpenGLTexture::Nearest); 
m_GLTextureNNZ->setMagnificationFilter(QOpenGLTexture::Nearest); 
m_GLTextureNNZ->setLayers(1); 
m_GLTextureNNZ->setFormat(QOpenGLTexture::R8U); 
m_GLTextureNNZ->setSize(m_sizeNZ2DCoeff_r,m_sizeNZ2DCoeff_c,1); 
m_GLTextureNNZ->setWrapMode(QOpenGLTexture::ClampToEdge); 
m_GLTextureNNZ->allocateStorage(QOpenGLTexture::Red, QOpenGLTexture::UInt8); 

m_GLTextureNNZ->setData(0, 0, QOpenGLTexture::Red, QOpenGLTexture::UInt8, m_NNZ.data()); 

と、私はこのテクスチャの特定の行とCOLにアクセスするシェーダに:私はテクスチャにそれを結合するために、以下を使用しました0,0)の値は1でなければなりませんが、この値は得られません。私が紛失しているものがありますか?

EDIT:テクスチャが2^8-1であっても、テクスチャルックアップから得られるすべてのゼロ行列と値を使ってテストしました。

+0

なぜあなたの2Dマトリックスは3Dで扱われますか? – BDL

+0

@BDLテストのために私は1つの行列を使用していますが、この行列を128個配列として持つことができます。 – user3178756

+1

あなたの 'texcoord.z'は間違っているようです。なぜなら' textureSize.z'は最大のレイヤーインデックス+ 1になるからです。それとは別に、なぜ正規化されたtexcoordsルートに行き、なぜ 'texelFetch'を直接使用しないのか分かりません。 – derhass

答えて

0

問題は私のデータがintで、私は符号なしビットテクスチャを作成しようとしていたということでした。だから私はuint8_tに私のデータを変換し、それは動作します。また、ピクセルの配置が正しいことを確認するために、glPixelStorei(GL_UNPACK_ALIGNMENT, 1);を追加する必要がありました。

関連する問題