运行时GL_VERSION与 glxinfo 不匹配?



我需要在OpenGL中使用镶嵌,这意味着我的OpenGL版本需要是4.0或更高。我得到我的OpenGL版本与glxinfo | grep OpenGL在终端。输出如下所示:

OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: NVIDIA GeForce RTX 3090/PCIe/SSE2
OpenGL core profile version string: 4.6.0 NVIDIA 520.61.05
OpenGL core profile shading language version string: 4.60 NVIDIA
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 4.6.0 NVIDIA 520.61.05
OpenGL shading language version string: 4.60 NVIDIA
OpenGL context flags: (none)
OpenGL profile mask: (none)
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.2 NVIDIA 520.61.05
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
OpenGL ES profile extensions:

很明显我的OpenGL版本是4.6.0。但是当我运行代码时:

glGetString(GL_VERSION);

我:

3.3.0 NVIDIA 520.61.05

我发现这种不匹配的原因是,当我调用函数时,我得到segmentation fault:

void glPatchParameteri(GLenum pname​​, GLint value​​);

生成的GLAD是预期版本的4.6.0。我的CMakeLists.txt编辑如下:

cmake_minimum_required(VERSION 3.23)
project(visualization_displacement_map)
set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 14)
find_package(glfw3 REQUIRED)
file(GLOB project_file glad.c main.cpp)
add_executable(${PROJECT_NAME} ${project_file} utility/init_func.cpp utility/callback_func.cpp utility/class/SoarCamera.cpp utility/class/SoarCamera.h program/program_test.cpp utility/class/Shader.cpp utility/class/Shader.h utility/debug_func.cpp)
target_link_libraries(${PROJECT_NAME} ${TARGET_LIB}
-lglfw
-lGL
-lm
-lXrandr
-lXi
-lX11
-lXxf86vm
-lpthread
-ldl
-lXinerama
-lXcursor
)

为什么会发生这种不匹配?

您在运行时请求哪个上下文?听起来你好像在要求3.3上下文?(或者你正在使用的窗口库是)。

在过剩:

glutInitContextVersion( 3, 3 );
glutInitContextProfile( GLUT_CORE_PROFILE );

在glfw:

glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

在sdl:

SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);

相关内容

  • 没有找到相关文章

最新更新