0

在程序中,我试图为 QOpenGLWidget(上下文是 opengl 3.3)加载一些纹理,在它之外,使用纹理管理器类(类 Textrues(){};)。在纹理中,我尝试使用

pixmap = QPixmap(file_name);
QOpenGLContext::currentContext()->makeCurrent(QOpenGLContext::currentContext()->surface());
f->glGenTextures(1, &id);
f->glBindTexture(GL_TEXTURE_2D, id);
f->glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, pixmap.width(), pixmap.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, &pixmap.data_ptr());

( f = QOpenGLContext::currentContext()->versionFunctions<QOpenGLFunctions_3_3_Core>(); ) 有没有比使用外部类更好的方法来处理多个纹理?我不想把所有东西都塞进 QOpenGLWidget 中,但据我所知,它只有 initGL 和paintGL 中的上下文。这条线有效吗?请详细说明上下文在 QT 中的工作原理。

QOpenGLContext::currentContext()->makeCurrent(QOpenGLContext::currentContext()->surface());

必须在运行时加载多个图像(用户从文件资源管理器中选择的任何图像)。上下文本身没有问题,但 Textures 不是 QObject,并且没有自己的表面。

4

0 回答 0