Salut,
J'ai un problème en essayant de charger une texture en OpenGL avec Qt.
J'essaye de convertir l'image chargée au format OpenGL, mais alors il semble qu'il y ait un problème de format, car une assertion saute.
J'appelle la fonction load et j'ai une assertion sur la fonction statique QGLWidget::convertToGLFormat(temp) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 void Texture::load(QString file) { textpath = QDir::currentPath()+"/"+MESHES_PATH+file; if(QFile::exists(textpath)) { QImage temp; temp.load(textpath); temp.convertToFormat(QImage::Format_RGB32); if(image.load(textpath),"JPG") { cout << "success to load : " << textpath.toStdString() << endl; image = QGLWidget::convertToGLFormat(temp); cout << "after convertion" << endl; init(); } } else cout << "Warning : La texture " << file.toStdString() << " n'existe pas dans : " << (QDir::currentPath().toStdString()+"/"+MESHES_PATH) << endl; } void Texture::init() { // Generates 1 id and write it on ID glGenTextures(1, &ID); // Bind texture glBindTexture(GL_TEXTURE_2D, ID); // Send pixels to GC glTexImage2D(GL_TEXTURE_2D, 0, 3, image.width(), image.height(), 0, format, GL_UNSIGNED_BYTE, image.bits()); // Filters glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); // Unbind glBindTexture(GL_TEXTURE_2D, 0); }
alors que mon image est correctement chargée.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 ASSERT: "dst.depth() == 32" in file c:\ndk_buildrepos\qt-desktop\src\opengl\qgl.cpp, line 2207 Invalid parameter passed to C runtime function. Invalid parameter passed to C runtime function.
Ma variable membre format es définie comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part success to load : C:/Users/.........../resources/mesh/cube.jpg
J'ai essayé de setter le format de l'image chargée en openGL avec le bon format en faisant : "temp.convertToFormat(QImage::Format_RGB32);", mais il semble que cela ne fonctionne pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 GLuint format; format = GL_RGB;
Je ne vois pas vraiment comment corriger le problème et ce que je fais de mal...
Merci d'avance,
Az
Partager