glGenerateMipmap和1.#QNAN

时间:2013-02-26 12:55:22

标签: opengl glsl opengl-4

我在我的图形引擎中实现了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));

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

1 个答案:

答案 0 :(得分:-2)

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

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