glActiveTexture в Qt и 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 не предоставляет таких возможностей. Как я могу решить эту проблему? Буду рад любым идеям.
1 ответ
Для чего-либо кроме GL 1.1 (и glActiveTexture
за пределами этого), вы должны использовать механизм расширения OpenGL. Qt может сделать это для вас всех под капотом, взгляните на QAbstractOpenGLFunctions
иерархия классов
Вы можете получить контекст, который виджет создал через QOpenGLWidget::context
и QAbstractOpenGLFunctions контекста через QOpenGLContext::versionFunctions()
, Есть и старшая QOpenGLFunctions
класс доступен через QOpenGLContext::functions()
которая ограничена GL ES 2.0 (и хитрым набором настольных GL 2.0), но будет достаточно для glActiveTexture()
,