在OpenGL中动态更改纹理

Geo*_*off 5 opengl opencv

我有一些(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);
}
Run Code Online (Sandbox Code Playgroud)

之前 初始化第一张图片glutMainLoop()并正确显示.它给了id 1.当我再次更新图像时,图片不会改变.(我已经确认正在调用显示功能,并且图像不同.)

编辑:另一个线索,我有子窗口.如果我注释掉我的其他窗口代码按预期工作.

Tho*_*mas 2

由于它在没有“子窗口”的情况下可以正常工作,我的猜测是您的应用程序中有多个 OpenGL 上下文,并且纹理的更新是在错误的上下文活动时发生的。

尝试将纹理上传放入您的显示函数中,看看是否会产生影响。