2

我在我的图形引擎(延迟渲染)中实现了 HDR,我需要计算图像的平均亮度(RGBA16F)。我生成 mipmap,然后读取最小的 mipmap (1x1)。

glBindTexture(GL_TEXTURE_2D, hdrTex);
glGenerateMipmap(GL_TEXTURE_2D);
glGetTexImage(GL_TEXTURE_2D, level, GL_RGBA, GL_FLOAT, data);
glBindTexture(GL_TEXTURE_2D, 0);

glm::vec3 color = glm::vec3(data[0], data[1], data[2]);
float avgLum = glm::dot(color, glm::vec3(0.2125, 0.7154, 0.0721));

我注意到有时(当我移动相机时)data[0]、data[1] 和 data[2] 包含 1.#QNAN。为什么 ?如何解决?

4

1 回答 1

-2

某些 OpenGL 驱动程序要求您glFinish()在 之后调用glGetTexImage()以确保结果可用于下一条指令。

否则,您会遇到一个竞争条件,您可以从中读取未初始化的值data[]

于 2013-09-09T15:13:31.597 回答