我正在使用GLSL着色器来比较纹理。在我的一个alghoritm的步骤中,我想总结像素值(使用着色器)或计算它们的平均值,然后将其读取到CPU。它可能看起来像(着色器在1x1测试中运行,仅针对R通道计算,texture2大小为1x500):
uniform sampler2D texture2;
void main()
{
float sumR = 0.0;
float step = 1.f / 500.f;
for(int i = 0; i<500; i++)
{
vec2 pos = gl_TexCoord[0].st;
sumR += (texture2D(texture2, vec2(pos.x, i * step))).r;
}
gl_FragColor.r = sumR;
}
我的问题是:如何在一个像素中存储如此大的数字,即32位(仅限一个通道为8位)?或者如何在像素中以良好的精度存储和读取浮点数?
答案 0 :(得分:1)
要存储浮点值,只需将其渲染为float32纹理。
稍后您可以将纹理数据传输到CPU。
为什么GLSL是您的目标,您尝试归档的是什么?也许openCL实现是您的问题的解决方案,因为您滥用着色器进行通用目的计算?