作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 OpenGL 之上创建一个 API,并且我希望在不先运行整个纹理处理程序的情况下不允许对 glActiveTexture 进行任何调用。本质上,有人需要为 glActiveTexture 方法提供一个 ID,我想检查该插槽是否未在使用,如果它是我想重定向他们的请求。我想以某种方式执行此操作,以某种方式允许我在使用该方法之前将代码注入(inject)该方法,因此让代码如下所示:
void glActiveTexture(int id){
{opengl code}
}
//...some other file
int main(){
glActiveTexture(2);
}
void glActiveTexture(int id){
{my code}
{opengl code}
}
//...some other file
int main(){
glActiveTexture(2);
}
最佳答案
最好的方法是使用预处理器宏。您可以使用以下代码,确保将其放在一个通用的包含文件中,该文件包含在代码中的任何位置。
mygl.h:
// we will have to make sure that gl.h is inlcuded before our redefine
#include <gl/gl.h>
// we will check if it's not included from the implementation
#ifndef _DONTMANGLE
#define glActiveTexture myActiveTexture
#endif
gl.h
在宏确保您覆盖默认的 GL 行为之前。我们使用
_DONTMANGLE
定义以确保函数名称不会被重写实现源文件中的预处理器破坏,以便我们仍然能够调用原始函数。
#define _DONTMANGLE
#include "mygl.h"
void myActiveTexture(GLint n)
{
/// your code here
return glActiveTexture(n);
}
glActiveTexture
可能已经是定义的宏,所以不要使用
#undef
重新定义之前就可以了!
#define
托管
myActiveTexture
的源文件中的头文件功能。否则,您将无法调用
glActiveTexture
,因为它会导致递归!另一种方法是在适用的情况下使用定义来排除重整。我已经更新了样本。
关于c++ - 如何在调用原始方法之前覆盖全局方法名称以将我的代码推送到前面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60144771/
我是一名优秀的程序员,十分优秀!