我有一些(OpenCV)代碼可以生成圖像。我使用OpenGL顯示這些圖像。當創建新的圖像I具有相同texture
名稱和新image
運行以下函數(每次):在OpenGL中動態更改紋理
void loadCVTexture(GLuint& texture, const cv::Mat_<Vec3f>& image){
if(texture != 0){
glBindTexture(GL_TEXTURE_2D, texture);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, image.cols, image.rows, GL_BGR, GL_FLOAT, image.data);
} else {
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(GL_TEXTURE_2D, 0, 3, image.cols, image.rows, 0, GL_BGR, GL_FLOAT, image.data);
}
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
}
我以前glutMainLoop()
初始化第一圖像並正確顯示。它的編號爲1
。當我再次更新圖像時,圖片不會改變。 (我已經確認顯示功能被調用,並且圖像不同。)
編輯:另一個線索,我有子窗口。如果我註釋掉其他窗口,代碼將按預期工作。
順便說一句,'glGetError()'返回'0'。 – Geoff 2010-07-06 22:50:39
我很困惑,看起來*只是*正確的... – Staffan 2010-07-07 09:41:09
當您嘗試重新繪製圖像時是否清除z緩衝區和顏色緩衝區?有模板操作嗎? glScissor?或者,也許glViewport被設置爲奇怪的價值?當您每幀使用glTexImage2d而不是SubImage2D時會發生什麼?我認爲它與子窗口代碼有關 - 可能是glViewport或glScissors或類似的東西。 – SigTerm 2010-07-07 13:11:04