我有一些生成图片的 (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);
}
在glutMainLoop()
之前,我初始化了第一张图片,并且它正确地显示出来了。它的id为1
。当我再次更新图片时,图片不会改变。(我已经确认显示函数被调用,并且图片是不同的。)
编辑:另一个线索是,我有子窗口。如果我注释掉其他窗口,代码就可以按预期工作。
glGetError()
返回了0
。 - Geoff