我一直在创建一个OpenGL函数加载库,它将帮助我在需要时调用OpenGL函数。
我有一个使用glX的getProcAddress
函数。
void* getProcAddress(const char *name)
{
auto pr = reinterpret_cast<void*>(glXGetProcAddress(
reinterpret_cast<const unsigned char*>(name)));
return pr;
}
这返回一个OpenGL函数的地址。如果我不使用reinterpret_cast
,就会出现奇怪的编译器错误,因此它们存在的原因就在这里。
然后我在头文件中定义了一个gl*函数的原型:
typedef void _GLACTIVETEXTURE(GLenum texture);
在另一个头文件中定义了一个枚举类型的 GLenum
。然后我在一个类中声明了函数指针:
_GLACTIVETEXTURE glActiveTexture;
然后在一个名为init
的函数中,我执行以下操作:
void GLFunctions::init()
{
glActiveTexture = (_GLACTIVETEXTURE)getProcAddress("glActiveTexture");
}
getProcAddress
函数本身可以编译通过,但上述代码行无法编译。GCC会抛出以下编译器错误:error: invalid cast to function type ‘_GLACTIVETEXTURE {aka void(GLenum)}’
我不知道如何处理这种编译器错误。这没有意义,因为这是一个函数指针,而不是函数本身,除非我使用()
。我不确定问题出在哪里,是我的问题还是GCC的问题。这一点也不清楚。我尝试过调整指针和voids,但都无济于事,仍然出现相同的错误消息。有人知道这里发生了什么,以及我如何正确调用OpenGL函数吗?