Qt 和 QGLWidget 中的 glActiveTexture?

glActiveTexture in Qt and QGLWidget?

我有一个基于 OpenGL+GLEW 的小应用程序。现在,我正在尝试用 QT(而不是 GLEW)重写它。但我有一个问题。 IDE 写道:

'glActiveTexture' was not declared in this scope glActiveTexture(TextureUnit); ^

这是 .cpp 文件中的代码:

#include <iostream>
#include "texture.h"

Texture::Texture(GLenum TextureTarget, std::string& FileName)
{
    m_textureTarget = TextureTarget;
    m_fileName      = FileName;
}

bool Texture::Load()
{
    // A lot of code for reading the picture.
}

void Texture::Bind(GLenum TextureUnit)
{
    glActiveTexture(TextureUnit);
    glBindTexture(m_textureTarget, m_textureObj);
}

这是 .h 文件中的代码。

#ifndef TEXTURE_H
#define TEXTURE_H

#include <string>
#include <QGLWidget>

class Texture
{
public:
    Texture(GLenum TextureTarget, std::string& FileName);

    bool Load();

    void Bind(GLenum TextureUnit);

private:
    std::string m_fileName;
    GLenum m_textureTarget;
    GLuint m_textureObj;
    unsigned int width, height;
    unsigned char * data;
};


#endif  /* TEXTURE_H */

我开始认为 Qt 不提供此类功能。 我怎么解决这个问题? 我很乐意提出任何想法。

对于 GL 1.1 以外的任何东西(并且 glActiveTexture 超出那个),您必须使用 OpenGL 的扩展机制。 Qt 可以在幕后为大家做到这一点,看看 QAbstractOpenGLFunctions class 层次结构

您可以通过 QOpenGLWidget::context and the QAbstractOpenGLFunctions of the context via QOpenGLContext::versionFunctions(). There is also the older QOpenGLFunctions class available via QOpenGLContext::functions() 获取小部件创建的上下文,该上下文仅限于 GL ES 2.0(以及桌面 GL 2.0 的 smathcing 子集),但对于 glActiveTexture() 就足够了。