我有一个存储在
中的nr x nc浮点值矩阵std::vector<float> data;
如何将此矩阵作为2D纹理传递给片段着色器?
我应该使用哪种内部格式和格式作为glTexImage2D()的参数?
我需要设置
吗?glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glPixelStorei(GL_PACK_ALIGNMENT, 1);
?
BTW:我不明白GL_UNPACK_ALIGNMENT和GL_PACK_ALIGNMENT之间的区别。 我的数据紧凑(alignment = 1)。一个命令应该足以告诉OpenGL这个。
答案 0 :(得分:1)
对于具有任意浮点数的通用矩阵,以及需要32位精度的地方,我建议使用单通道32位浮点格式作为内部格式。你没有指定你所针对的OpenGL版本,所以我假设#34;相当现代&#34;,所以内部格式应该设置为GL_R32F
。作为格式,您希望显然使用GL_FLOAT
,因为该参数描述了客户端数据所在的格式。
在这种情况下,你可以将GL_UNPACK_ALIGNMENT
设置为任何有效值&lt; = 4(这也是默认值),因为float总是4个字节,因此每行浮点数总是4的倍数
GL_PACK_ALIGNMENT
完全不相关。它定义了回读(&#34;打包&#34;)像素数据的对齐方式。