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()
就足够了。
我有一个基于 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()
就足够了。