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