在像素GLSL中存储(并读取)大数字

时间:2013-08-01 13:38:34

标签: c++ opengl glsl sfml

我正在使用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位)?或者如何在像素中以良好的精度存储和读取浮点数?

1 个答案:

答案 0 :(得分:1)

要存储浮点值,只需将其渲染为float32纹理。

稍后您可以将纹理数据传输到CPU。

为什么GLSL是您的目标,您尝试归档的是什么?也许openCL实现是您的问题的解决方案,因为您滥用着色器进行通用目的计算?