2013-02-26 2 views
2

내 그래픽 엔진에서 HDR을 구현하고 (지연 렌더링) 이미지의 평균 휘도 (RGBA16F)를 계산해야합니다. 밉맵을 생성 한 다음 가장 작은 밉맵 (1x1)을 읽습니다. glGenerateMipmap 및 1. # QNAN

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)); 

난 (I에 카메라가 이동할 때) 데이터 [0] 데이터 [1] 데이터 [2] 1. # QNAN를 함유하는 것이 종종 발견. 왜 ? 그것을 고치는 방법?

+0

glGetError를 호출하려고 했습니까? – Unick

+0

예, 오류가 발생하지 않았습니다. – Irbis

답변

-2

일부 OpenGL 드라이버는 결과가 다음 명령에 사용 가능한지 확인하기 위해 다음에 glFinish()을 호출해야합니다.

그렇지 않으면 data[]에서 초기화되지 않은 값을 읽는 경쟁 조건이 있습니다.

+1

아니요, 그렇지 않습니다. OpenGL은 반환 할 때 전달하는 모든 포인터에 대한 연산을 완료한다는 것을 보장합니다. 그래서'glGetTexImage'는 포인터가 반환 할 때 포인터로 텍스쳐를 읽은 상태 여야합니다. 만약 구현이 암묵적으로'glFinish'를 수행해야한다는 것을 의미합니다. 이제이 문제가 해결 될 수 있습니다. 하지만 그것은 드라이버 버그 *에 대한 해결 방법 일뿐입니다. –

+0

이론 상으로는 이론과 실습간에 차이가 없습니다. 그러나 실제로는 있습니다. 나는 사물의 실용적인 측면에있어. –

+1

실제로, 사람들에게 잘못된 인상을주는 것들을 말하면 안됩니다. 특히, 이것은 특정 드라이버의 버그가 아니라 함수의 예상 동작 *입니다. 그렇지 않으면, 그들은 그들이 필요로하는 잘못된 가정하에 'glFinish'를 온 장소에 집어 넣기 시작할 것입니다. 실제로 잘못된 정보는 잘못된 정보입니다. –

관련 문제