我想修改 glBindTexture() 函数来跟踪之前绑定(bind)的纹理 ID。目前我刚刚为它创建了新函数,但后来我意识到如果我使用其他使用 glBindTexture 的代码:那么我的整个系统可能会崩溃。
那我该怎么做呢?
编辑: 现在,当我想到时,检查我是否应该绑定(bind)纹理是毫无用处的,因为 opengl 可能已经这样做了。但我仍然需要跟踪以前使用的纹理。
最佳答案
正如安德烈亚斯在评论中所说,你应该检查这是必要的。尽管如此,如果你想做这样的事情,并且你使用 gnu 链接器(你没有指定操作系统)你可以使用链接器选项:
--wrap glBindTexture
(如果直接给 gcc 你应该写):
-Wl,--wrap,glBindTexture
由于这是在链接器阶段完成的,因此您可以将新函数与现有库一起使用(编辑:“库”是指一些您可以重新编译但不想修改的现有代码)。
“替换”功能的代码如下所示:
void * __wrap_glBindTexture (GLenum target, GLuint texture) {
printf ("glBindTexture wrapper\n");
return __real_glBindTexture (target,texture);
}
关于C++如何替换一个函数但仍然使用原来的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3494889/