1

我正在编写同时针对嵌入式 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 目标上,但我想知道为什么这个存根失败了?

4

0 回答 0