我无法编译#version 140或更高版本的GLSL着色器。理想情况下,我想编译#version 410的GLSL着色器。我相信这样做,OSG应该创建一个4.1的OpenGL上下文,但我所尝试的一切都是创建一个(很老的) !)2.1上下文。请帮忙!
我使用的是OpenSceneGraph 3.3.3。
我正在使用Macbook Air 11" (2013)与Mac OS X 10.10.3。从Apple's website,下载OpenGL Extensions Viewer,并在原始OpenGL中编写测试程序,我绝对相信我的机器支持OpenGL 4.1。
我直接尝试编译并运行osgsimplegl3示例。虽然它可以编译,但它不能成功运行,因为它可以使用#version 330标记它自己的着色器。这证实了当我打印OpenGL版本时程序正在运行(无法编译着色器后),它打印为OpenGL 2.1。
我尝试过设置CMake标志。我对CMake有点新,但我已经尝试在我的顶级CMakeLists.txt中添加它。
SET(OSG_GL3_AVAILABLE ON) SET(OSG_GL1_AVAILABLE OFF) SET(OSG_GL2_AVAILABLE OFF) SET(OSG_GLES1_AVAILABLE OFF) SET(OSG_GLES2_AVAILABLE OFF) SET(OSG_GL_DISPLAYLISTS_AVAILABLE OFF) SET(OSG_GL_FIXED_FUNCTION_AVAILABLE OFF) SET(OSG_GL_MATRICES_AVAILABLE OFF) SET(OSG_GL_VERTEX_ARRAY_FUNCS_AVAILABLE OFF) SET(OSG_GL_VERTEX_FUNCS_AVAILABLE OFF)
我也尝试了cmake命令。
cmake -G"Eclipse CDT4 - Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug \
-D OSG_GL3_AVAILABLE:BOOL=1 \
-D OSG_GL1_AVAILABLE:BOOL=0 \
-D OSG_GL2_AVAILABLE:BOOL=0 \
-D OSG_GLES1_AVAILABLE:BOOL=0 \
-D OSG_GLES2_AVAILABLE:BOOL=0 \
-D OSG_GL_DISPLAYLISTS_AVAILABLE:BOOL=0 \
-D OSG_GL_FIXED_FUNCTION_AVAILABLE:BOOL=0 \
-D OSG_GL_MATRICES_AVAILABLE:BOOL=0 \
-D OSG_GL_VERTEX_ARRAY_FUNCS_AVAILABLE:BOOL=0 \
-D OSG_GL_VERTEX_FUNCS_AVAILABLE:BOOL=0 \
.. "$@"
我现在已经结束了。在最终调查后,似乎OpenGLContext是在osg/src/osgViewer/GraphicsWindowCocoa.mm on line 1219中创建的,但是它似乎并没有考虑到GraphicsContext :: Traits对象中的glContextVersion 。我可以在代码中看到除了osg/src/osgViewer/GraphicsWindowWin32.cpp之外还使用glContextVersion的地方。
如何在Mac上使用OpenSceneGraph创建OpenGL 4.1上下文?