c++ 运行时GL_VERSION与glxinfo不匹配?[已关闭]

9bfwbjaz  于 2022-12-01  发布在  其他
关注(0)|答案(1)|浏览(117)

**已关闭。**此问题需要debugging details。当前不接受答案。

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
18小时前关门了。
Improve this question
我需要在OpenGL中使用Tessellation,这意味着我的OpenGL版本需要是4.0或更高。我在终端中获得了glxinfo | grep OpenGL的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
        )

为什么会出现这种不匹配?

ctehm74n

ctehm74n1#

你在运行时请求的是哪一个上下文?听起来像是在请求Python 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);

相关问题