gl.h - 如何隐藏函数原型
Posted
技术标签:
【中文标题】gl.h - 如何隐藏函数原型【英文标题】:gl.h - how to hide function prototypes 【发布时间】:2021-02-26 12:44:21 【问题描述】:我在 Linux 上工作。有一个包含 gl.h 的遗留 OpenGL 应用程序。我想定义一个函数指针来存储 glXGetProcAddress 结果:
typedef void (GLACTIVETEXTUREARB)(GLenum texture);
extern GLACTIVETEXTUREARB glActiveTextureARB;
但我收到以下错误:将 glActiveTextureARB 重新定义为不同类型的符号,之前的定义:gl.h:1966
我必须包含 gl.h,因为它包含基本类型定义,例如 GLenum。如何隐藏该函数原型? glext.h 基于 GL_GLEXT_PROTOTYPES 定义函数原型,但 gl.h 不使用它。
【问题讨论】:
不知道它是否适用于这个特定问题,但您也可以尝试定义GL_GLEXT_LEGACY
和GLX_GLXEXT_LEGACY
宏以避免Linux头文件无意包含系统提供的glext.h
跨度>
GL_GLEXT_LEGACY 在这里不适用
如果这是针对 C++ 的,那么使用命名空间怎么样?
C,可惜系统gl.h没有提供像GL_GLEXT_PROTOTYPES这样的选项
【参考方案1】:
使用define重写原来的名字:
#define glActiveTextureARB glh__glActiveTextureARB
#include<gl.h>
#undef glActiveTextureARB
顺便说一句,你的gl.h
可能已经将PFNGLACTIVETEXTUREARBPROC
定义为你想要的函数指针类型,所以你不需要重新定义它。
【讨论】:
以上是关于gl.h - 如何隐藏函数原型的主要内容,如果未能解决你的问题,请参考以下文章