我正在编写同时针对嵌入式 VxWorks 653 系统和 Windows 的图形代码(VxWorks 是我们提供的主要目标,Windows 是我们要测试的桌面环境)。
我们的VxWorks 653图形驱动使用glOrthof,没有glOrtho,所以我们的图形渲染代码使用glOrthof。为了在 Windows 上保持一致性,我在设置期间执行了此操作:
glOrthof = (PFNGLORTHOFPROC)wglGetProcAddress("glOrthof");
获取我们的 NVidia 驱动程序支持的 glOrthof 的 OpenGL 扩展功能。
这适用于 NVidia 驱动程序,但我们的一些开发人员仍坚持使用英特尔驱动程序。对于他们,我尝试了这个:
glOrthof = (PFNGLORTHOFPROC)&graphics_support_glOrthof;
static void WINAPI graphics_support_glOrthof(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
{
glOrtho((GLdouble)left, (GLdouble)right, (GLdouble)bottom, (GLdouble)top, (GLdouble)zNear, (GLdouble)zFar);
}
当我们的图形渲染循环调用 glOrthof 时,这个存根被命中,我可以看到(通过函数断点)glOrtho 在 opengl32.dll 中被调用,并且我传入的参数匹配。但是,我的显示器完全是白色的,我得到了值 1281 (GL_INVALID_VLAUE) 作为来自 glGetError() 的返回码。
我解决这个问题的解决方案是简单地
#define glOrthof glOrtho
在我的 Windows 目标上,但我想知道为什么这个存根失败了?