我想使用Qt Creator在Qt中使用glDrawBuffer
和glReadBuffer
函数。我试着这样做:
glDrawBuffer(GL_NONE);
glReadBuffer(GL_NONE);
这段代码无法编译,它给了我这样的链接错误:
main.obj:-1:错误:LNK2019:未解析的外部符号__imp__glDrawBuffer @ 4在函数&#34中引用; public:void __thiscall Simple3DWidget :: OpenGLWindow :: render(void)" (?渲染@ OpenGLWindow @ @@ Simple3DWidget QAEXXZ)
此错误基本上意味着函数在包含的头文件中声明但未正确链接。
在网上搜索此问题后,我发现我必须使用QOpenGLFunctions_3_1
类。我尝试了这两个代码:
QOpenGLFunctions_3_1 m_openGL31Functions;
m_openGL31Functions.glDrawBuffer(GL_NONE);
m_openGL31Functions.glReadBuffer(GL_NONE);
和
QOpenGLFunctions_3_1().glDrawBuffer(GL_NONE);
QOpenGLFunctions_3_1().glReadBuffer(GL_NONE);
这两个代码都可以正确编译,但是当我运行程序时,在这两种情况下,程序崩溃并给了我以下错误:
访问冲突读取位置0x00000090
奇怪的是,当我将错误的值分配给指针时,我通常会收到此错误,但这些代码都不包含指针(或者函数可能包含生成此错误的指针,在这种情况下可能存在错误在Qt的QOpenGLFunctions_3_1
班?)。
在Qt中使用glDrawBuffer
和glReadBuffer
函数的正确方法是什么?
答案 0 :(得分:1)
此错误基本上意味着函数在包含的头文件中声明但未正确链接。
正确。你必须链接到OpenGL。 Windows上为opengl32.lib
,* nix / Linux为libGL.so
,MacOS为-framework OpenGL
。
但这些代码都不包含指针(或者函数可能包含产生此错误的指针,在这种情况下,Qt的QOpenGLFunctions_3_1类可能存在错误?)。
是的,他们这样做。任何超出某个版本的OpenGL接口都会在运行时加载到函数指针中。这就是QOpenGLFunctions类的功能。在正确加载这些指针之前,它们是无效的 - 实际上,根据OpenGL版本,您使用某些指针可能有效,而其他指令则无效;这就是Qt将OpenGL版本放入类名的原因。
回答以下问题:
如果你用" no"回答了这些问题中的任何一个问题。或者"我不知道",那就是你的问题所在。