我一直致力于创建一个 OpenGL 函数加载库,它可以帮助我在需要时调用 OpenGL 函数。
我有一个getProcAddress
使用 glX 的函数。
void* getProcAddress(const char *name)
{
auto pr = reinterpret_cast<void*>(glXGetProcAddress(
reinterpret_cast<const unsigned char*>(name)));
return pr;
}
这将返回 OpenGL 函数的地址。如果我不使用reinterpret_cast
s,我会收到奇怪的编译器错误,这就是它们存在的原因。
然后我在头文件中定义一个 gl* 函数原型:
typedef void _GLACTIVETEXTURE(GLenum texture);
whereGLenum
在另一个头文件中定义为枚举。然后我在一个类中声明函数指针:
_GLACTIVETEXTURE glActiveTexture;
然后在一个名为init
I 的函数中:
void GLFunctions::init()
{
glActiveTexture = (_GLACTIVETEXTURE)getProcAddress("glActiveTexture");
}
该getProcAddress
函数可以自行编译,但上面的代码行不会编译。GCC 抛出此编译器错误:
error: invalid cast to function type ‘_GLACTIVETEXTURE {aka void(GLenum)}’
而且我不知道如何处理这种编译器错误。这是没有意义的,因为这是一个函数指针,而不是函数本身,除非我使用()
. 我不太确定这里的问题是什么;无论是我这边还是海湾合作委员会。目前还不清楚。我试过摆弄指针和空位,但一切都是徒劳的,并且出现了相同的错误消息。有谁知道这里发生了什么以及如何正确调用 OpenGL 函数?