【发布时间】:2014-06-08 04:55:00
【问题描述】:
我希望使用 glsl 处理图像。例如 - 对于每个像素,输出其平方值: (r,g,b)-->(r^2,g^2,b^2)。然后我想使用 glReadPixels 将结果读入 cpu 内存。
这应该很简单。但是,我发现的大多数 glsl 示例都解释了用于图像后处理的着色器;因此,它们的输出值已经位于 [0,255]。但是,在我的示例中,我想获得 [0^2,255^2] 范围内的输出值;而且我不希望它们标准化为 [0,255]。
我的代码的主要部分是(经过一些试验和排列):
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F, width, height, 0, GL_BGR, GL_FLOAT, NULL);
glReadPixels(0, 0, width, height, GL_RGB, GL_FLOAT, data_float);
我没有发布我的整个代码,因为我认为这两行是我的问题所在。
编辑
遵循@Arttu 的建议,并遵循this post 和this post my 的代码现在如下所示:
glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, GL_RGBA32F_ARB, width, height, 0, GL_RGBA, GL_FLOAT, NULL);
glReadPixels(0, 0, width, height, GL_RGB, GL_FLOAT, data_float);
不过,这并不能解决我的问题。如果我理解正确 - 无论如何,当我插入它们时,我的输入值都会缩放到 [0,1]。以后乘以 255 或 255^2 由我决定...
【问题讨论】:
标签: opengl textures glsl gpgpu