Mam kilka (OpenCV) kod, który generuje obrazy. Wyświetlam je za pomocą OpenGL. Kiedy nowe obrazy są tworzone uruchomić następującą funkcję (za każdym razem) o tej samej nazwie i texture
nowego image
:Dynamiczna zmiana tekstury w 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);
}
zainicjować pierwszy obraz przedglutMainLoop()
i wyświetla poprawnie. Podano identyfikator 1
. Kiedy ponownie zaktualizuję obraz, obraz się nie zmienia. (Potwierdziłem, że wywoływana jest funkcja wyświetlania i że obraz jest inny.)
Edytuj: Kolejna wskazówka, mam podokienki. Jeśli skomentuję inne moje okno, kod działa zgodnie z oczekiwaniami.
Nawiasem mówiąc, 'glGetError()' zwraca '0'. – Geoff
Jestem zdziwiony, że wygląda * tak * dobrze ... – Staffan
Czy bufor z buforem i bufor kolorów są czyste, gdy próbujesz odświeżyć obraz? Czy są operacje matrycowe? glScissor? A może glViewport miał dziwną wartość? Co się dzieje, gdy używasz glTexImage2d dla każdej klatki zamiast SubImage2D? Myślę, że jest to powiązane z kodem podokiennym - prawdopodobnie glViewport lub glScissors lub czymś podobnym. – SigTerm