我有一些生成图像的(OpenCV)代码。我使用 OpenGL 显示这些。创建新图像时,我使用相同的值运行以下函数(每次)texture
名称和新的image
:
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);
}
我初始化第一张图像before glutMainLoop()
并且显示正确。它被赋予了 id1
。当我再次更新图像时,图片没有改变。 (我已经确认正在调用显示函数,并且图像是不同的。)
Edit:另一个线索,我有子窗口。如果我注释掉其他窗口,代码将按预期工作。