我有一些(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