primus
primus copied to clipboard
glXAllocateMemoryNV, glXFreeMemoryNV broken in Coin3d
REF: https://bitbucket.org/Coin3D/coin/issue/97/coin3d-with-nvidia-optimus-oddness
Triggered from the program FreeCAD
Coin warning in glglue_init(): glVertexArrayRangeNV found, but one or more of the other vertex array functions were not found
The missing functions are glXAllocateMemoryNV, glXFreeMemoryNV.
from Coin3d/src/glue/gl.cp , line 1866:
w->glVertexArrayRangeNV = NULL;
#if defined(GL_NV_vertex_array_range) && (defined(HAVE_GLX) || defined(HAVE_WGL))
if (cc_glglue_glext_supported(w, "GL_NV_vertex_array_range")) {
w->glVertexArrayRangeNV = (COIN_PFNGLVERTEXARRAYRANGENVPROC) PROC(w, glVertexArrayRangeNV);
w->glFlushVertexArrayRangeNV = (COIN_PFNGLFLUSHVERTEXARRAYRANGENVPROC) PROC(w, glFlushVertexArrayRangeNV);
#ifdef HAVE_GLX
w->glAllocateMemoryNV = (COIN_PFNGLALLOCATEMEMORYNVPROC) PROC(w, glXAllocateMemoryNV);
w->glFreeMemoryNV = (COIN_PFNGLFREEMEMORYNVPROC) PROC(w, glXFreeMemoryNV);
#endif /* HAVE_GLX */
#ifdef HAVE_WGL
w->glAllocateMemoryNV = (COIN_PFNGLALLOCATEMEMORYNVPROC) PROC(w, wglAllocateMemoryNV);
w->glFreeMemoryNV = (COIN_PFNGLFREEMEMORYNVPROC) PROC(w, wglFreeMemoryNV);
#endif /* HAVE_WGL */
if (w->glVertexArrayRangeNV) {
if (!w->glFlushVertexArrayRangeNV ||
!w->glAllocateMemoryNV ||
!w->glFreeMemoryNV) {
w->glVertexArrayRangeNV = NULL;
if (COIN_DEBUG || coin_glglue_debug()) {
cc_debugerror_postwarning("glglue_init",
"glVertexArrayRangeNV found, but one or more of the other "
"vertex array functions were not found");
}
}
}
}
#endif /* HAVE_GLX || HAVE_WGL */
Thanks jCandlish .