OpenGL et Qt : Chargement d'une texture
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.
Code:
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);
} |
J'appelle la fonction load et j'ai une assertion sur la fonction statique QGLWidget::convertToGLFormat(temp) :
Code:
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. |
alors que mon image est correctement chargée.
Code:
success to load : C:/Users/.........../resources/mesh/cube.jpg
Ma variable membre format es définie comme suit :
Code:
1 2
| GLuint format;
format = GL_RGB; |
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.
Je ne vois pas vraiment comment corriger le problème et ce que je fais de mal...
Merci d'avance,
Az