0
我有一個有149行210列的矩陣。我想將它發送到着色器做一些計算。矩陣的值在9-128之間。我用以下爲它綁定到紋理:在glsl着色器中訪問作爲紋理的矩陣
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:
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;
因此,基於我的矩陣( 0,0)應該有1的值,但我沒有得到這個值。有什麼我失蹤了嗎?
編輯:所以我測試了全零矩陣和我從紋理查找中得到的值,不管texcoords是2^8-1。
爲什麼你的2D矩陣是用3D編址的? – BDL
@BDL現在測試我只使用一個矩陣,但是我可以將這個矩陣的128個作爲一個數組。 – user3178756
你的'texcoord.z'似乎是錯誤的,因爲'textureSize.z'將是最大層索引加1。除此之外,我不明白爲什麼你甚至會使用正常化的texcoords路由,而不是直接使用'texelFetch'。 – derhass