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であっても、テクスチャルックアップから得られるすべてのゼロ行列と値を使ってテストしました。
なぜあなたの2Dマトリックスは3Dで扱われますか? – BDL
@BDLテストのために私は1つの行列を使用していますが、この行列を128個配列として持つことができます。 – user3178756
あなたの 'texcoord.z'は間違っているようです。なぜなら' textureSize.z'は最大のレイヤーインデックス+ 1になるからです。それとは別に、なぜ正規化されたtexcoordsルートに行き、なぜ 'texelFetch'を直接使用しないのか分かりません。 – derhass