【发布时间】:2016-07-30 23:09:33
【问题描述】:
我一直致力于创建一个 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_casts,我会收到奇怪的编译器错误,这就是它们存在的原因。
然后我在头文件中定义一个 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)}’
而且我不知道如何处理这种编译器错误。这是没有意义的,因为这是一个函数指针,而不是函数本身,除非我使用()。我不太确定这里的问题是什么;无论是我这边还是海湾合作委员会。目前还不清楚。我试过摆弄指针和空位,但一切都是徒劳的,并且出现了相同的错误消息。有谁知道这里发生了什么以及如何正确调用 OpenGL 函数?
【问题讨论】:
-
我希望你知道 glew? glew.sourceforge.net
-
@H.Guijt 他想手动加载函数指针。
-
@Akib Azmain 不要居高临下。指出替代解决方案并可能为某人节省大量工作并不是犯罪。