Ich habe sehr mysteriöse Problem gefunden, wo ich aus die Debug-Zeile habe ich in Programm und das Programm "Segmentaion Fehler (Core Dumped) ".OpenGL crash nur durch Entfernen von std :: cout << "hi" << std :: endl aus dem Programm
Ich habe das Programm eingegrenzt und komme dazu. Das ist der ganze Code, das Problem zu reproduzieren:
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <highgui.h>
#include <GL/glut.h>
#include <iostream>
int main(int argc, char **argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGBA | GLUT_ALPHA | GLUT_DEPTH | GLUT_DOUBLE);
glutInitWindowSize(500, 281);
(void) glutCreateWindow("Alpha Test");
cv::Mat image = cv::imread("alphatest.png");
int texWidth = image.cols;
int texHeight = image.rows;
GLuint texId;
glGenTextures(1, &texId);
glBindTexture(GL_TEXTURE_2D, texId);
//std::cout << "hi" << std::endl;
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, texWidth, texHeight, 0, GL_BGRA, GL_UNSIGNED_BYTE, image.ptr());
}
Dieses Programmabsturz bei glTexImage2D
mit Fehlermeldung:
zsh: segmentation fault (core dumped) ./mystery
(Das Programm mit dem Namen Geheimnis wurde)
von uncommenting die cout
Linie läuft das Programm ohne Fehler zusammen mit der Nachricht "hi". Ich frage mich, warum ich die Debug-Zeile behalten muss?
nach 'glut' inits sollten Sie einen gültigen OpenGL-Kontext erzeugen und' glew' Funktionszeiger initialisieren, indem Sie 'glewInit()' aufrufen, bevor Sie 'gl' aufrufen. – ampawd
@ampawd: glTexImage2D ist eine Funktion aus alten Zeiten. Es gibt es seit OpenGL-1.0. Es erfordert ganz bestimmt nicht GLEW. – datenwolf
@datenwolf yeah, aber bevor er einige moderne gl-Funktionen 'glGenTexture'' glBindTexture' aufruft, die '' glew''-Initialisierung benötigt, um korrekt zu arbeiten. – ampawd