0

我正在使用 GLSL 着色器来比较纹理。在我的算法步骤之一中,我想总结像素值(使用着色器)或计算它们的平均值,然后将其读入 CPU。它可能看起来像(着色器在 1x1 测试上运行,仅针对 R 通道进行计算,纹理 2 大小为 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 位)?或者如何以像素为单位以高精度存储和读取浮点数?

4

1 回答 1

1

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

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

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

于 2013-08-01T13:55:03.510 回答